8086CPU中有14个16位的寄存器,按用途分为4类
AX | AH | AL | 累加器 |
---|---|---|---|
BX | BH | BL | 基址寄存器 |
CX | CH | CL | 计数(寄存)器 |
DX | DH | DL | 数据寄存器 |
AX,AH,AL
AX是16位寄存器,AH是AX的高8位,AL是AX的低8位
AX是EAX的低16位
CS | 代码段寄存器 |
---|---|
DS | 数据段寄存器 |
SS | 堆栈寄存器 |
ES | 附加段寄存器 |
IP | 指令指示器 |
---|---|
IF | 标志寄存器 |
SP | 堆栈指示器 |
---|---|
BP | 基址指示器 |
SI | 源变址寄存器 |
DI | 目的变址寄存器 |
数据传送由“源-> 目的地”
MOV AX, BX ;寄存器寻址
MOV DL, AL ;寄存器寻址
MOV AX, 02 ;源操作数用立即寻址
MOV SI, [BX] ;源操作数寄存器间接寻址
MOV AL, 4[DI] ;源操作数寄存器相对寻址
MOV AX, [BX+2] ;源操作数寄存器相对寻址
MOV [BX][DI],DX ;目的操作数用基址加变址寻址
入栈指令: PUSH
出栈指令:POP
寄存器之间或寄存器与存储器之间内容交换
xchg ax,cx
XLAT [转换表]
常用于查表
输入
IN AL, PORT ;输入 port表示某一个具体的I/O端口地址
输出
OUT PORT, AL
输入
IN AX, PORT
输出
OUT PORT, AX
将源操作数的偏移地址送到目的操作数中
LEA CX,[2000H];执行结果CX=2000H
;若SI=1000H,BX=2000H
LEA DX,[SI+BX]; 执行结果为DX=3000H
传送一个32位的远地址指针,其中包括一个便宜地址和一个段地址,
前者送寄存器,后者送DS.
;设:DS=C000H,有关存储单元内容为
;(C0010H)=80H
;(C0011H)=01H
;(C0012H)=00H
;(C0013H)=20H
LDS SI,[0010H];执行后SI=0180H,DS=2000H
传送一个32位的远地址指针,其中包括一个便宜地址和一个段地址,
前者送寄存器,后者送ES.
;设:DS=B000H,BX=080AH有关存储单元内容为
;(B080AH)=A2H
;(B080BH)=05H
;(B080CH)=00H
;(B080DH)=40H
LES DI,[BX];执行后DI=05A2H,ES=4000H
ADD DST,SRC; DST <- DST+SRC
ADC DST,SRC; DST <- DST+SRC+CF
SUB DST,SRC; DST <- DST-SRC
SBB DST,SRC; DST <- DST-SRC-CF
NEG DST ; 0-DST,即取补
CMP AX,BX;
; 比较后 ZF=1,则AX=BX
; ZF =0,则AX不等于BX
INC DST; DST+1 -> DST
DEC DST; DST-1 -> DST
IMUL SRC;符号数的乘法
;字节运算时,ALXSRC->AX
;字运算时,AX x SRC -> DX与AX
MUL SRC; 无符号数的乘法,其他同上
IDIV SRC;符号数除法
;字节运算时:AX/SRC的商 -> AL; AX/SRC的余数-> AH
;字运算时: DX/SRC的商 -> AX; DX/SRC的余数-> DX
DIV SRC; 符号数除法,其他同上
AND DST,SRC ; DST^SRC -> DST,清CF、OF
;根据结果置SF、ZF、PF,标志AF不定
OR DST,SRT ;或, 标志位设置同上
XOR DST,SRT ;异或, 标志位设置同上
TEST DST,SRT;DST^SRC,仅设置标志位, 标志位设置同上
NOT DST ;取反, 不影响标志位
SHR DST,CNT; 逻辑右移
SHL/SAL DST,CNT;逻辑/算数左移
SAR DST,CNT;算数右移
ROR DST,CNT; 循环右移
ROL DST,CNT; 循环左移
RCR DST,CNT; 带进位循环右移
RCL DST,CNT; 带进位循环左移
MOVSW ;字传送:SI+(-)2->SI,DI+(-)2->DI
MOVSB ;字节传送:SI+(-)1->SI,DI+(-)1->DI
CMPSW ;字比较:SI+(-)2->SI,DI+(-)2->DI
CMPSB ;字节比较:SI+(-)1->SI,DI+(-)1->DI
SCASW ;字扫描: AX-(ES:DI),DI+(-)2->DI
SCASB ;字节扫描:AL-(ES:DI),DI+(-)1->DI
LODSW ;字取出: (DS:SI) -> AX,SI+(-)2->SI
LODSB ;字节取出: (DS:SI) -> AL,SI+(-)1->SI
STOSW ;字存储: AX -> (ES:DI),DI+(-)2->DI
STOSB ;字节存储: AL -> (ES:DI),DI+(-)1->DI
JMP OPRD ;OPRD时转移的目的地址
CALL NEAR PTR OPRD;段内调用
CALL FAR PTR OPRD ;段间调用
指令助记符 | 功能 | 指令名称 |
---|---|---|
STC | CF <- 1 | 进位标志置1 |
CLC | CF <- 0 | 进位标志置0 |
CMC | CF <- | 进位标志取反 |
STD | DF <- 1 | 方向标志置1 (地址减量) |
SLD | DF <- 0 | 方向标志置0 (地址增量) |
STI | IF <- 1 | 中断允许标志置1 (开中断) |
CLI | IF <- 0 | 中断允许标志置0 (关中断) |
原文:https://www.cnblogs.com/waterserver/p/12305091.html