8086 汇编笔记(四):[BX] 和 loop 指令

一、BX

bx 同样也表示一个内存单元,它的偏移地址在 bx 中,比如下面的指令:

复制代码
mov ax,[bx]

二、loop 指令

通常我们用 loop 指令来实现循环功能,cx 中存放循环次数

案例:计算 2^12

复制代码
codesg segment

    mov ax,2
    mov cx,11
s:  add ax,ax
    loop s

    mov ax,4C00H
    int 21H

codesg ends

end

CPU 执行 loops 的时候,要进行两步操作:

1:(cx)(cx)-1;

2:判断 cx 中的值,不为0则转至标号s所标识的地址处执行(这里的指令是 add ax,ax),如果为0则执行下一条指令(下一条指令是 mov ax,4c00h)。

三、Debug 和汇编编译器 masm 对指令的不同处理

(1) 在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用"..."来表示内存单元,如果在"门"里用一个常量 idata 直接给出内存单元的偏移地址,就要在"\[\]"的前面显式地给出段地址所在的段寄存器。比如

复制代码
mov al,ds:[0]

如果没有在 "\[\]" 的前面显式地给出段地址所在的段寄存器,比如

复制代码
mov al,[0]

那么,编译器 masm 将把指令中的"idata"解释为"idata"

(2) 如果在"门"里用寄存器,比如 bx,间接给出内存单元的偏移地址,则段地址默认在 ds 中。当然,也可以显式地给出段地址所在的段寄存器。

四、段前缀

复制代码
mov ax,cs:[0]
mov ax,ss:[0]
mov ax,es:[bx]
mov ax,ss:[bx]
mov ax,ds:[bx]

这些出现在访问内存单元的指令中,用于显式地指明内存单元的段地址的 "ds:","cs:","ss","es"在汇编语言中称为段前缀

五、一段安全的空间

  1. 我们需要直接向一段内存中写入内容;

  2. 这段内存空间不应存放系统或其他程序的数据或代码,否则写入操作很可能引发错误;

  3. DOS 方式下,一般情况,0:200~0:2ff 空间中没有系统或其他程序的数据或代码;

  4. 以后,我们需要直接向一段内存中写入内容时,就使用 0:200~0:2ff这段空间。

相关推荐
hasty7 小时前
从 Prompt Injection 到越界写文件:Theia Agent Mode 的信任边界为何失效
安全·prompt
点心的游戏开发世界7 小时前
GDScript 入门笔记(十一):Lambda 与匿名函数
开发语言·笔记·游戏引擎·godot
啊阿狸不会拉杆7 小时前
《计算机网络-自顶向下方法》5.4 ISP之间的路由选择:BGP 读书笔记
网络·计算机网络·接口隔离原则
摇滚侠8 小时前
《SpringBoot 3:入门与应用实战》第 12 章 JDBC 与事务 使用 JdbcTemplate 阅读笔记 32
spring boot·笔记·后端
Amy187021118238 小时前
守好第一道门:馈线保护装置如何为海上风光固态变压器筑牢安全防线
安全
Delite8029 小时前
摆脱实验室束缚:便携式卡尔费休微量水分检测技术与现场应用解析
大数据·网络·人工智能
ACP广源盛139246256739 小时前
M6/M5 Pro Mac mini 端侧 AI 落地@ACP#YLB3116 中端多盘存储扩展在 AI 服务中的机会与应用场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos
鱼子星_9 小时前
【C++】继承和多态(上)
c++·笔记
ACP广源盛1392462567310 小时前
M6/M5 Pro Mac mini 端侧 AI 新形态@ACP#GSV5800 Serdes 长距离视频传输在 AI 服务中的机会与落地场景
大数据·网络·数据库·人工智能·嵌入式硬件·macos·音视频
xian_wwq10 小时前
【学习笔记】深度认知系列-第14讲 端侧AI崛起——为什么AI正在从云端走向本地
人工智能·笔记·学习