汇编语言汇编指令[BX]

看一看下面指令的功能。

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单元中的内容。

511遇见

分析
注意,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所示

511遇见


发布日期:

所属分类: 易语言 标签: