两个基本问题
- 处理的数据在什么地方?
- 处理的数据有多长?
寄存器seg: ax,bx,cx,dx,ah,al,ch,cl,dh,dl,sp,bp,si,di;
段寄存器sreg: (segment register) ds,ss,cs,es
1.1 bx,si,di,bp
- 在8086CPU中,只有这4个寄存器可以在“[...]”中进行内存单元的寻址。
- 在“[...]”中,这4个寄存器可以单个出现,或只能以4种组合出现:
[bx]
[si]
[di]
[bp]
[bx+si]
[bx+di]
[bp+si]
[bp+di]
[bx+si+idata]
[bx+di+idata]
[bp+si+idata]
[bp+di+idata]
- 只要在“[...]”中使用bp,而指令中没有显式的给出段地址,段地址就默认在ss中:
mov ax,[bp+si+idata] //(ax)=((ss)*16+(bp)+(si)+idata)
1.2 机器指令处理的数据在什么地方
指令在执行前,所要处理的数据可以在3个地方:
CPU内部,内存,端口。
汇编指令 指令执行前数据的位置
mov bx,[0] 内存,ds:0 单元
mov bx,ax CPU内部,ax寄存器
mov bx,1 CPU内部,指令缓冲器
1.3 寻址方式
可以用多种方式来给定这个内存单元的偏移地址,这种定位内存单元的方式成为 寻址方式。
8086CPU寻址方式如下:
寻址方式 | 含义 | 名称 |
[idata] | EX=idata;SA=(ds) | 直接寻址 |