处理数据的两个基本问题
1 处理的数据在什么地方
2 处理的数据有多长
用符号reg表示一个寄存器
reg集合 : AX,BX,CX,DX,AH,BH,CH,DH,AL,BL,CL,DL,SP,BP,SI,DI
用符号sreg表示一个段寄存器
sreg集合:DS,SS,CS,ES
si 和 di 是8086CPU中和bx功能相近的寄存器,但是不能区分成两个8位的寄存器来用
机器指令处理的数据在什么地方
1 在汇编指令中直接给出
mov ax,1
add bc,2000h
2 寄存器。指令要处理的数据在寄存器中,在汇编指令中给出相应的寄存器名
mov ax,bx
mov ds,ax
3 用地址(SA)和偏移地址(EA)。指令要处理的数据在内存中,在汇编指令中可用[x]的格式给出EA和SA在某个寄存器中
存放段地址的寄存器可以是默认的
mov ax,[0]
mov ax,[di]
mov ax,[bx+8]
mov ax,[bx+si]
mov ax,[bx+si+8]
等指令段地址默认在ds中
mov ax,[bp]
mov ax,[bp+8]
mov ax,[bp+si]
mov ax,[bp+si+8]
等指令段地址默认在ss中
存放段地址的寄存器也可以显示给出
指令 含义
mov ax,ds:[bp] (ax)= ((DS)*16+(BP))
mov ax,es:[bx] (AX)=((ES)*16+(BX))
mov ax,ss:[bx+si] (AX) =((SS)*16+(SI)+(BX))
mov ax,cs:[BX+SI+8] (AX) =((SS)*16+(SI)+(BX)+8)
1[idara] 用一个常量表示地址,可用于直接定位一个内存单元
2 [BX] 用一个变量来表示内存地址,可用于间接定位一个内存单元
3 [bx+idata] 用一个变量和常量表示地址,可在一个起始地址的基础上用变量定位一个内存单元
4 [bx + si] 用两个变量表示地址
5 [bx+si+idata] 用两个变量和一盒常量表示地址
寻址方式 含义 名称 例子