7. 更灵活的定位内存地址的方法
7.1 and 和 or 指令
-
and
指令:逻辑与指令,按位进行与运算。如:mov al,01100011B and al,00111011B 执行后:al=00100011B
通过该指令可将操作对象的相应位设为0,其他位不变。同位异为0,同位同为原数。
-
or
指令:逻辑或指令,按位进行或运算mov al,01100011B or al,00111011B 执行后:al=01111011B
通过该指令可将操作对象的相应位设为1,其他位不变。同位异为1,同位同为原数
7.3 以字符形式给出数据
assume cs:code,ds:data
data segement
db 'unIX'
db 'foRK'
data ends
code segment
start: mov
7.5 [bx+idata]
[bx]指明一个内存单元;[bx+idata]也表示一个内存单元,它的偏移地址为(bx)+idata(bx中的数值加上idata)。如:
mov ax,[bx+200]
&mov ax,[200+ax]
:将内存单元的内容送入ax,偏移地址为bx中的数值加上200,段地址在ds中。
数字化描述:(ax)=((ds)*16+(bx)+200)
SI和DI
si和di是8086CPU中和bx功能相近的寄存器,但不能分成两个8位的寄存器
7.8 [bx+si]和[bx+di]
前面提及可以使用[bx(si&di)]和[bx(si&di)+idata]的方式来指明一个内存单元,还可以用更为灵活的方式[bx+si]和[bx+di]
[bx+si]表示一个内存单元,它的偏移地址为(bx)+(si)(即bx中的数值加上si中的数值)
指令mov ax,[bx+si]
含义如下:
将一个内存单元的内容送入ax,偏移地址为bx中的数值加上si中的数值,段地址在ds中。
数学化的描述为:(ax)=((ds)*16+(bx)+(si))
7.9 [bx+si+idata]和[bx+di+idata]
指令mov ax,[bx+si+idata]
含义如下:
将一个内存单元的内容送入ax,偏移地址为bx中的数值加上si中的数值再加上idata,段地址在ds中。
数学化的描述为:(ax)=((ds)*16+(bx)+(si)+idata)
7.10 不同的寻址方式的灵活应用
- [idata]用一个常量表示地址,可用于直接定位一个内存单元
- [bx]用一个变量来表示内存地址,可用于简介定位一个内存单元
- [bx+idata]用一个变量和常量表示地址,可在一个起始地址的基础上用变量间接定位一个内存单元。
- [bx+si]用两个变量表示地址
- [bx+si+idata]用两个变量和一个常量表示地址