汇编05:[BX]和loop指令
Posted yinyunmoyi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了汇编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指令的前面。
以上是关于汇编05:[BX]和loop指令的主要内容,如果未能解决你的问题,请参考以下文章