您的位置:首页 > 运维架构

汇编语言复习摘要五——[BX] and loop

2010-09-25 00:42 274 查看
1. [bx]:[0]表示一个内存单元,其地址为:ds:0。同样道理,[bx]也是表示一个内存单元,偏移地址在寄存器bx中。

比如:mov ax, [bx]:bx中存放的数据作为偏移地址,把一个内存单元送入ax中。

mov [bx], ax:跟上面一样道理,只是把ax的内容送入内存单元[bx]中。

2. Loop指令:Loop指令用于循环,其执行分为两个步骤进行:

1) (cx) = (cx) - 1;(cx)表示的cx中的值;

2) 判断cx中的值是否等于0,如果不等于0,继续循环执行;如果等于0,执行下面的指令;

例子:计算2 ^ 10:

assume codesg
codesg segment
mov ax, 0
mov cx, 10
s:  add ax, 2
loop s
mov ax, 4c00H
int 21H
codesg ends
end


在上面的例子中,s其实是一个地址,loop s 即把IP的值设置为s的地址值。

3. Debug和masm对指令的不同处理

这个问题其实我感觉有点尴尬,见下面的例子:

mov ax, 2000h
mov ds, ax
mov al, [0]
mov bl, [1]
mov cl, [2]
mov dl, [3]


在debug中,这段代码的mov al, [0]等指令是这样执行的:mov al, ds:[0];但是反过来看看masm的处理方式,是:

mov al, 00h。所以,程序中,你能通过两种方式解决这个问题:

1) mov dx, 00

mov ax, [dx]  ;这个是通过寄存器来实现的,比较麻烦,因为多了一步

2) mov ax, ds:[0] ;这个是通过执行数据段地址来实现的

4. 段前缀:mov ax, ds:[0] ; mov ax, ss:[0] ; mov ax, es:[0]; 冒号前面的用于显示指明内存单元的段地址,在汇编语言中称作为:段前缀。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: