标签:内存 理解 输入 赋值 完成 loop debug sum 寄存器
下列命令可以用寄存器代表偏移地址:
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寄存器
这就是段前缀。
编写一个程序计算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指令的前面。
标签:内存 理解 输入 赋值 完成 loop debug sum 寄存器
原文地址:https://www.cnblogs.com/yinyunmoyi/p/12811463.html