文章目录[隐藏]
看一看下面指令的功能。
mov ax, [bx]
功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将SA:EA处的数据送入ax中。即:ax=((ds)* 16+(bx))
mov [bx] aX
功能:bx中存放的数据作为一个偏移地址EA,段地址SA默认在ds中,将ax中的数据送入内存SA:EA处。即:((ds)* 16+(bx)卜(ax)
由于在编译器中mov AX,[0]指令会被编译器认为是mov AX,0所以引入[bx]的概念mov [bx],AX的意思是将(ds)*16+(bx)内存位置的值赋给AX用法和之前的ds[address]一样
[bx]的使用方法 mov ax,1000H mov bx,2000H mov ds,ax ; 将ds数据段寄存器赋值为2000H mov [bx],ax ; 将ax寄存器的值赋给内存单元21000H位置 其他方式 mov ax,ds:[0] ; 将内存单元20000H位置的值赋给ax
问题
程序和内存中的情况如图5.1所示,写出程序执行后,21000H-21007H单元中的内容。
分析
注意,inc bx的含义是bx中的内容加1,比如下面两条指令:
mov bx,l inc bx
执行后,bx=2
(1)先看一下程序的前3条指令:
mov aX,2000H mov ds,aX mov bx,1000H
这3条指令执行后,ds=2000H, bx=1000H
(2)接下来,第4条指令:
mov ax, [bx]
指令执行前:ds=2000H, bx=1000H,则mov ax,[bx]将把内存2000:1000处的字型数据送入ax中。该指令执行后,ax=00beH
(3)接下来,第5, 6条指令:
inc bx inc bx
这两条指令执行前bx=1000H,执行后bx=1002H
(4)接下来,第7条指令:
mov [bx],aX
指令执行前:ds=2000H. bx=1002H,则mov [bx],ax将把ax2000:1002处。指令执行后,2000:1002单元的内容为BE, 2000:1003 中的数据送入内存单元的内容为00
(5)接下来,第8, 9条指令:
inc bx inc bx
这两条指令执行前bx=1002H,执行后bx=1004H
(6)接下来,第10条指令
mov [bx], aX
指令执行前:ds=2000H . bx=I 004H,则mov [bx],ax将把ax中的数据送入内存2000:1004处。指令执行后,2000:1004单元的内容为BE,2000:1005单元的内容为00
(7)接下来,第11条指令:
inc bx
这条指令执行前bx=1004H,执行后bx=1005H
(8)接下来,第12条指令
mov [bx],al
指令执行前:ds=2000H , bx=1005H,则mov [bx],al将把al中的数据送入内存2000:1005处。指令执行后,2000:1005单元的内容为BE
(9)接下来,第13条指令:
inc bx
这条指令执行前bx=1005 H,执行后bx=1006H
(10)接下来,第14条指令
mov [bx],al
指令执行前:ds=2000H, bx=1006H,则mov [bx],al将把al中的数据送入内存2000:1006处。指令执行后,2000:1006单元的内容为BE
程序执行后,内存中的情况如图5.2所示