[bx]
在使用masm
编译汇编源程序的时候,不能使用类似:mov ax,[0]
作为相对寻址的方式。替代的方法就是现将偏移地址存到bx中,然后利用mov ax,[bx]
的方式来代替.或者以ds:[偏移地址
]的方式来寻址,在8086CPUT中,进行寄存器间接寻址的时候,[…]中的内容只可以是变址(index,指SI, DI)寄存器或基址(base,指BX, BP)寄存器。
mov ax,2000h
mov ds,ax
mov bx,1000h
mov ax,[bx]
bx寄存器常常用于存放偏移地址
loop指令
指令的格式是:loop标号,标号就是地址,这个标号必须存在于loop之前,标号会在编译的时候被替换成地址,
CPU执行loop指令的时候需要进行两步操作
-
(cx)=(cx)-1
-
CPU会自动判断
cx
中的值,cx
的值如果不为零则会执行标号中的程序,如果为零则会向下执行
所以cx
寄存器和loop指令相关性很强,cx寄存器在程序运行开始的时候会保存本程序占用的字节数
例子计算
assume cs:codesg
codesg segment
mov cx,123
mov ax,0
s:add ax,236
loop s
codesg ends
end
汇编语言在进行越位赋值,赋值的时候操作数和源操作数位数不一样的时候会自动给高位补上零
使用16进制的时候如果使用开头为字母的数例如mov ax,ffff
的时候masm
编译不会通过,因为编译器不会识别字母开头的数,如果使用这样的数需要在最高位补上0,就是mov ax,0ffff
debug的常用命令
]
g命令用于执行到某个位置
p命令用于程序某尾出返回,或者跳过循环
操作系统中安全的空间
]
注意点:
当需要将寄存器的数值写到内存单元的时候,是一个一个字节写入的,对于8086来说,寄存器为2byte,写入的时候需要考虑是否长度匹配