[bx+si+idata]和[bx+di+idata]的含义相似,我们以[bx+si+idata]为例进行讲解
[bx+si+idata]表示一个内存单元,它的偏移地址为(bx)+(si)+idata(即bx中的数值加上si中的数值再加上idata).
我们看一下指令mov ax,[bx+si+idata]的含义:
将一个内存单元的内容送入ax,这个内存单元长度为2字节(字单元),存放一个字,偏移地址为bx中的数值加上si中的数值在加上idata,段地址在ds中.
数学化的描述为:(ax)=((ds)*16+(bx)+(si)+idata)
该指令也可以写成如下格式(常用):
mov ax,[bx+200+si] mov ax,[200+bx+si] mov ax,200[bx][si] mov ax,[bx].200[si] mov ax,[bx][si].200
用DEBUG查看内存:
d 2000:1000
写出下面的程序执行后,ax,bx,cx中的内容.
mov ax,2000H mov ds,ax mov bx,1000H mov si,0 mov ax,[bx+2+si] inc si mov cx,[bx+2+si] inc si mov di,si mov bx,[bx+2+di]
分析:
mov ax,[bx+2+si]
访问的字单元的段地址在ds中, (ds)=2000H;偏移地址=(bx)+(si)+2=1002H;指令执行后(ax)=0006H
mov cx,[bx+2+si]
访问的字单元的段地址在ds中,(ds)=2000H;偏移地址=(bx)+(si)+2=1003H;指令执行后(cx)=6A00H
mov bx,[bx+2+di]
访问的字单元的段地址在ds中,(ds)=2000H;偏移地址=(bx)+(di)+2=1004H;指令执行后(bx)=226AH