码迷,mamicode.com
首页 > 其他好文 > 详细

汇编05:[BX]和loop指令

时间:2020-04-30 23:20:54      阅读:60      评论:0      收藏:0      [点我收藏+]

标签:内存   理解   输入   赋值   完成   loop   debug   sum   寄存器   

[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指令的前面。

汇编05:[BX]和loop指令

标签:内存   理解   输入   赋值   完成   loop   debug   sum   寄存器   

原文地址:https://www.cnblogs.com/yinyunmoyi/p/12811463.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!