汇编05:[BX]和loop指令

[BX]和loop指令

[bx]

下列命令可以用寄存器代表偏移地址:

mov al,[bx]				将内存中的数据传入al寄存器中,该地址的偏移地址为bx寄存器的值,段地址在ds中
mov [bx],al				将al寄存器中的值放入地址中,该地址的偏移地址为bx寄存器的值,段地址在ds中

之所以要采用这种方式,而不是直接将偏移地址写在括号中,是因为下列指令编译器是无法成功解释的:

mov al,[0]

上面这条语句会被编译器理解为:

mov al, 0

这种将常量放在括号中的方式只有在debug模式下输入才能成功解释。为了让编译器成功执行赋值操作,需要借助bx寄存器,先将偏移地址放入bx中,然后再使用下列语句:

mov al,[bx]

或者也可以在编译器中显式的指明段地址:

mov al,ds:[0]			将段地址为ds中的数值,偏移地址为0的数据赋值给al寄存器

这就是段前缀。

loop指令

编写一个程序计算2的平方:

assume cs:code
code segment
	mov ax,2
	add ax,ax
	
	mov ax,4c00h
	int 21h
code ends
end

如果要计算2的11次方,用add指令来做是非常麻烦的,可以用loop指令来完成:

assume cs:code
code segment
	mov ax,2
	mov cx,11
s:  add ax,ax
	loop s
	mov ax,4c00h
	int 21h
code ends
end

在执行loop s指令时,首先把cx寄存器中的值自减1,然后判断cx中的值,如果不为0就跳转到s所标识的地址处执行,根据cx和loop配合来完成循环功能。在编程的时候注意,cx中的值就是循环次数,loop标识的地址要放在loop指令的前面。

猜你喜欢

转载自www.cnblogs.com/yinyunmoyi/p/12811463.html