- 在8086CPU中,只有bx,si,di,dp这四个寄存器可以用在”[…]”中来进行内存单元的寻址。
- 在[…]中,这四个寄存器可以单独出现,或只能以4种组合出现:bx和si,bx和di,bp和si,bp和di。
- 只要在[…]中使用寄存器bp,而指令中没有显性的给出段地址,段地址就默认在ss中。
汇编语言中用3个概念来表达数据的位置。
(1)立即数
对于直接包含在机器指令中的数据(执行前在CPU的指令缓冲器中),在汇编语言中称为:立即数,在汇编指令中直接给出。
eg:
mov ax,1
add bx,2000h
or bx 00010000b
mov al,'a'
(2)寄存器
指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名。
(3)段地址(SA)和偏移地址(EA)
指令要处理的数据在内存中,在汇编指令中可用[x]的格式给出EA,SA在某个段寄存器中。
寻址方式
(1)直接寻址
eg:
[idata]
(2)寄存器间接寻址
eg:
[bx]
[si]
[di]
[bp]
(3)寄存器相对寻址
用于结构体: [bx].idata
用于数组: idata[si],idata[di]
用于二维数组: [bx][idata]
eg:
[bx+idata]
[si+idata]
[di+idata]
[bp+idata]
(4)基址变址寻址
用于二维数组:[bx][si]
eg:
[bx+si]
[bx+di]
[bp+si]
[bp+di]
(5)相对基址变址寻址
用于表格(结构)中的数组项:
[bx].idata[si]
用于二维数组:
idata[bx][si]
eg:
[bx+si+idata]
[bx+di+idata]
[bp+si+idata]
[bp+di+idata]