当前位置:C++技术网 > 资讯 > 汇编学习之loop指令与[BX]

汇编学习之loop指令与[BX]

更新时间:2016-10-19 21:57:36浏览次数:1+次

看看下面指令的功能:
mov ax,[bx]

功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EX中的数据送入ax中。即:(ax)=((dx)*16+(bx))。

mov [bx],ax

功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处。即:((dx)*16+(bx))=(ax)。

程序与内存中的情况如图所示:


请写出完整的内存数据分布.

分析:
先看看程序的前3条指令:

mov ax, 2000H
mov ds, ax
mov bx, 1000H

这三条指令执行后,ds=2000H,bx=1000H,

接下来,第四条指令:

mov ax,[bx]

指令执行前:ds=2000H,bx=1000H,则mov ax,[bx]将内存2000:1000处的字型数据送入ax中。该指令执行后,ax=00beH

接下来,第5,6条指令:
inc bx

inc bx
这两条指令执行前bx=1000H,执行后bx=1002H

接下来,第7条指令:
mov [bx],ax

指令执行前:ds=2000H,bx=1002H,则mov [bx],ax,ax将把ax中的数据送入内存2000:1002处。指令执行后,2000:1002单元的内容为BE,2000:1003单元的内容为00.
......

接下来的指令我们照着上面的理解就可以.

loop指令的格式是:loop 标号,CPU执行loop指令的时候,要进行两步操作:
1,(cx)=(cx)-1;
2,判断cx中的之,不为零则转至标号处执行程序,如果为0则向下执行。

assume cs:code
code segment
mov ax,2

mov cx,11

s: add ax,ax
loop s

mov ax,4c00H
int 21H

code ends
ends


分析:
(1)标号:
在汇编语言中,标号代表一个地址,上述程序中有一个标号s,它实际上标识了一个地址,在这个地址处有一条指令:add ax,ax

(2) loop s
CPU执行 loop s 的时候,要执行两步操作:
1,(cx)=(cx)-1;
2,判断cx中的之,不为零则转至标号处执行程序,如果为0则向下执行。

(3)以下三条指令:
mov cx,11
s: add ax,ax
loop s

执行loop s时,首先要将(cx)减一,然后若(cx)不为0,则向前转至s处执行add ax,ax.所以可以利用cx来控制add ax,ax的执行次数.