汇编语言
1. [bx+idata]
- 我们可以用[bx]来指明一个内存单元
- 我们也可以用[bx+idata]来表示一个内存单元,它的偏移地址为bx中的数值加上idata
mount c d:masm
c:
debug
r
d 2000:1000
e 2000:1000
12 34 56 78
a
mov ax,2000
mov ds,ax
mov bx,1000
mov ax,[bx]
mov cx,[bx+1]
add cx,[bx+2]
2. si和di
- si和di是8086CPU中和bx功能相近的寄存器
- si和di不能够分成两个8位寄存器来使用
- 下面3组指令实现了相同的功能
mov bx,0
mov ax,[bx]mov si,0
mov ax,[si]mov di,0
mov ax,[di]
- 下面的3组指令也实现了相同的功能
mov bx,0
mov ax,[bx+123]mov si,0
mov ax,[si+123]mov di,0
mov ax,[di+123]
3. [bx+si]和[bx+di]
- [bx+si]和[bx+di]的含义相似
- [bx+si]和[bx+di]表示一个内存单元,它的偏移地址为(bx)+(si),即bx中的数值加上si中的数值
4. 不同的寻址方式的灵活应用
- [idata]用一个常量来表示地址,可用于直接定位一个内存单元
- [bx]用一个变量来表示内存地址,可用于简介定位一个内存单元
- [bx+idata]用一个变量和常量表示地址,可以一个起始地址的基础上用变量间接定位一个内存单元
- [bx+si]用两个变量表示地址
- [bx+si+idata]用两个变量和一个常量表示地址
5. bx、si、di和bp
- 在[…]中,这4个寄存器可以单个出现,可以组合出现
- 注意:bx和bp,si和di不能同时出现
- 但是idata可以加,这个没关系
- 只要在[…]中使用寄存器bp,而指令中没有显性地给出段地址,段地址就默认在ss中
例如:
r ss
1000
d 1000:0000
12 34 56
a
mov ax,[bp+1]
t
//输出结果,ax = 5634
//没有显性给出段地址,使用默认地址即ss的值“1000”,再bp加上1,则地址为1000:0001