3.4 bp,si,di寄存器,寻址方式,寄存器总结

264 阅读2分钟

汇编语言

1. [bx+idata]

  • 我们可以用[bx]来指明一个内存单元
  • 我们也可以用[bx+idata]来表示一个内存单元,它的偏移地址为bx中的数值加上idata

image.png

image.png

image.png

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. 不同的寻址方式的灵活应用

  1. [idata]用一个常量来表示地址,可用于直接定位一个内存单元
  2. [bx]用一个变量来表示内存地址,可用于简介定位一个内存单元
  3. [bx+idata]用一个变量和常量表示地址,可以一个起始地址的基础上用变量间接定位一个内存单元
  4. [bx+si]用两个变量表示地址
  5. [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

image.png

image.png

6. 寻址方式总结

image.png

image.png