8088汇编语言指令

合集下载

汇编语言8088指令

汇编语言8088指令

8088 汇编速查手册一、数据传输指令它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个操作数里 )XLAT 字节查表转换.── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法. 以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算), AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法. 以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用操作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令DS:SI 源串段寄存器 :源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表示重复操作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较操作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. ) CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描. 把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串. 把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串. 是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令1>无条件转移指令 (长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC 转换到外处理器.LOCK 封锁总线.NOP 空操作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束标志名称溢出OF 方向DF 中断IF 负号SF 零ZF 辅助进位AF 奇偶PF 进位CF 置位状态 OV DN EI NG ZR AC PE CY 复位状态 NV UP DI PL NZ NA PO NC。

8088汇编指令大全

8088汇编指令大全

8088汇编指令表一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV 传送字或字节.MOVSX 先符号扩展,再传送.MOVZX 先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP 交换32位寄存器里字节的顺序XCHG 交换字或字节.( 至少有一个**作数为寄存器,段寄存器不可作为**作数) CMPXCHG 比较并交换**作数.( 第二个**作数必须为累加器AL/AX/EAX )XADD 先交换再累加.( 结果在第一个**作数里 )XLAT 字节查表转换.── BX指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )2. 输入输出端口传送指令.IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,其范围是 0-65535.3. 目的地址传送指令.LEA 装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF 标志寄存器传送,把标志装入AH.SAHF 标志寄存器传送,把AH内容装入标志寄存器.PUSHF 标志入栈.POPF 标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加 1.AAA 加法的ASCII码调整.DAA 加法的十进制调整.SUB 减法.SBB 带借位减法.DEC 减 1.NEC 求反(以 0 减之).CMP 比较.(两**作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.DAS 减法的十进制调整.MUL 无符号乘法.IMUL 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV 无符号除法.IDIV 整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW 字节转换为字. (把AL中字节的符号扩展到AH中去)CWD 字转换为双字. (把AX中的字的符号扩展到DX中去)CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.OR 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两**作数作与运算,仅修改标志位,不回送结果).SHL 逻辑左移.SAL 算术左移.(=SHL)SHR 逻辑右移.SAR 算术右移.(=SHR)ROL 循环左移.ROR 循环右移.RCL 通过进位的循环左移.RCR 通过进位的循环右移.以上八种移位指令,其移位次数可达255次.移位一次时, 可直接用**作码. 如 SHL AX,1.移位>1次时, 则由寄存器CL给出移位次数.如 MOV CL,04SHL AX,CL四、串指令───────────────────────────────────────DS:SI 源串段寄存器 :源串变址.ES:DI 目标串段寄存器:目标串变址.CX 重复次数计数器.AL/AX 扫描值.D标志 0表示重复**作中SI和DI应自动增量; 1表示应自动减量.Z标志用来控制扫描或比较**作的结束.MOVS 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS 保存串.是LODS的逆过程.REP 当CX/ECX<>0时重复.REPE/REPZ 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC 当CF=1且CX/ECX<>0时重复.REPNC 当CF=0且CX/ECX<>0时重复.五、程序转移指令───────────────────────────────────────1>无条件转移指令 (长转移)JMP 无条件转移指令CALL 过程调用RET/RETF过程返回.2>条件转移指令 (短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 )JA/JNBE 不小于或不等于时转移.JAE/JNB 大于或等于转移.JB/JNAE 小于转移.JBE/JNA 小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE 大于转移.JGE/JNL 大于或等于转移.JL/JNGE 小于转移.JLE/JNG 小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z). JE/JZ 等于转移.JNE/JNZ 不等于时转移.JC 有进位时转移.JNC 无进位时转移.JNO 不溢出时转移.JNP/JPO 奇偶性为奇数时转移.JNS 符号位为 "0" 时转移.JO 溢出转移.JP/JPE 奇偶性为偶数时转移.JS 符号位为 "1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ CX不为零且标志Z=1时循环.LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.JCXZ CX为零时转移.JECXZ ECX为零时转移.4>中断指令INT 中断指令INTO 溢出中断IRET 中断返回5>处理器控制指令HLT 处理器暂停, 直到出现中断或复位信号才继续. WAIT 当芯片引线TEST为高电平时使CPU进入等待状态. ESC 转换到外处理器.LOCK 封锁总线.NOP 空**作.STC 置进位标志位.CLC 清进位标志位.CMC 进位标志取反.STD 置方向标志位.CLD 清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令───────────────────────────────────────DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.详细:80X86 汇编指令符号大全+、-、*、/∶算术运算符。

80888086的寻址方式和基本指令

80888086的寻址方式和基本指令
• SP为堆栈指针寄存器(Stack Pointer),指示堆栈段 栈顶的位置(偏移地址)
• B堆区P栈域为段基堆,中址采栈的指用(基针“S地寄先t址a存进c器k后)(出B是a”s主或e P存“o后i中nt进e一r)先个,出特表”殊存示数取的据在 SP操和作BP用方寄式8存0、8器8而/与8不0S8S是6段形随寄成机存的存器微取联机方合系式使统。用中以,确堆定堆 栈段栈中区的域存被储称单为元堆地栈址段
为学习指令系统打好基础
例如:关心用户“可编程”寄存器, 不关心无法操纵的“透明”寄存器
问题:为什么选择8088/8086?
简单、容易理解掌握 与目前的P3、P4向下兼容,形成x86体系 16位CPU目前仍在大量应用
8086/8088的基本情况
16/准16位CPU 16/8位外部数据总线 20位外部地址总线 40根引脚 4.77MHz时钟 集成度2.9万 3m工艺 1981年,IBM推出以8088为CPU的 IBM PC
溢出 无溢出 无溢出 溢出
辅助进位标志AF(Auxiliary Carry Flag)
运 算 时 D3 位 ( 低 半 字 节 ) 有 进 位或借位 时,AF=1;否则AF= 0
这个标志主要由处理器内部使用, 用于十进制算术运算调整指令中, 用户一般不必关心
3AH+7CH=B6H,D3有进位:AF=1
2. 指令指针寄存器
IP(Instruction Pointer)为指令指针寄存器, 指示主存储器指令的位置 随着指令的执行,IP将自动修改以指示下一条 指令所在的存储器位置 IP寄存器是一个专用寄存器 IP寄存器与CS段寄存器联合使用以确定下一条 指令的存储单元地址
3. 标志寄存器
标志(Flag)用于反映指令执行结果或控 制指令执行形式 8088处理器的各种标志形成了一个16位的 标 志 寄 存 器 FLAGS ( 程 序 状 态 字 PSW 寄 存器)

8086-8088 汇编语言指令表

8086-8088 汇编语言指令表

(续)
操作
ODITSZAPC
无符号除法:AX 除以 src,商送 AL,余 数送 AH;或(DX,AX)除以 src,商送 AX, 余数送 DX 带符号除法:AX 除以 src,商送 AL,余数 送 AH;或(DX,AX)除以 src,商送 AX,余 数送 DX
u---uuuuu u---uuuuu
把 AL 中的和调整到压缩的 BCD 格式
u---xxxxx
把 AL 中的差调整到压缩的 BCD 格式
u---xxxxx
把 AL 中的和调整到非压缩的 BCD 格式, AH 加调整产生的进位值 把 AL 中的差调整到非压缩的 BCD 格式, AH 减调整产生的借位值
u---uuxux u---uuxux
---------
JZ JE
跳 JZ label
JNZ JNE 转 JNZ label
JS
JS label
若 ZF 为 1,转到 label 处继续执行 若 ZF 为 0,转到 label 处继续执行 若 SF 为 1,转到 label 处继续执行
-------------------------
·418·
-----------------
把标志寄存器 FLAGS 入栈
---------
POPF IN OUT ADD ADC INC
POPF
出栈一个字数据,送到标志寄存器 FLAGS 中
rrrrrrrrr
IN AL, src IN AX, src OUT dst, AL OUT dst, AX ADD dst, src
JNC label
若 CF 为 0,即无符号数比较的不小于,
转到 label 处继续执行---------跳 转

汇编语言指令集合 吐血整理

汇编语言指令集合 吐血整理

RET(return)
5.中断
INT(interrupt)指令
IRET(interrupt return)
INTO(interrupt if overflow)
六、处理机控制指令
1.标志处理指令
CLC(Clear carry)
CMC(Complement carry)
STC(Set carry)
CLD(Clear direction)
串比较指令
SCASB(Scan string of byte)
串搜索指令
SCASW(Scan string of word)
串搜索指令
STOSB(Store string of byte)
存串指令
STOSW(Store string of word)
存串指令
LODSB(Load string of byte)
ES(Extra Segment):附加段寄存器。
第一部分:指令助记符: 一、数据传送指令
1.通用数据传送指令 MOV(Move) PUSH(Push onto the stack) POP(Pop from the stack) XCHG(Exchange)
2.累加器专用传送指令 IN(Input) OUT(Output) XLAT(Translate)
REPE(Repeat when empty) 若(CX)=0,则退出,否则 CX=CX+1;
REPZ(Repeat when flag )
若 ZF=0,则退出,否则 CX=CX+1;
REPC(Repeat when carry flag)
REPNE(Repeat when not empty)
REPNZ(Repeat when not zero flag)

8086 8088 汇编 指令 手册

8086 8088 汇编 指令 手册

8086 8088 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介:32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和EDX)2个变址和指针寄存器(ESI和EDI) 2个指针寄存器(ESP和EBP)6个段寄存器(ES、CS、SS、DS、FS和GS)1个指令指针寄存器(EIP) 1个标志寄存器(EFlags)1、数据寄存器数据寄存器主要用来保存操作数和运算结果等信息,从而节省读取操作数所需占用总线和访问存储器的时间。

32位CPU有4个32位的通用寄存器EAX、EBX、ECX和EDX。

对低16位数据的存取,不会影响高16位的数据。

这些低16位寄存器分别命名为:AX、BX、CX和DX,它和先前的CPU中的寄存器相一致。

4个16位寄存器又可分割成8个独立的8位寄存器(AX:AH-AL、BX:BH-BL、CX:CH-CL、DX:DH-DL),每个寄存器都有自己的名称,可独立存取。

程序员可利用数据寄存器的这种“可分可合”的特性,灵活地处理字/字节的信息。

寄存器EAX通常称为累加器(Accumulator),用累加器进行的操作可能需要更少时间。

可用于乘、除、输入/输出等操作,使用频率很高;寄存器EBX称为基地址寄存器(Base Register)。

它可作为存储器指针来使用;寄存器ECX称为计数寄存器(Count Register)。

在循环和字符串操作时,要用它来控制循环次数;在位操作中,当移多位时,要用CL来指明移位的位数;寄存器EDX称为数据寄存器(Data Register)。

在进行乘、除运算时,它可作为默认的操作数参与运算,也可用于存放I/O的端口地址。

在16位CPU中,AX、BX、CX和DX不能作为基址和变址寄存器来存放存储单元的地址,在32位CPU中,其32位寄存器EAX、EBX、ECX和EDX不仅可传送数据、暂存数据保存算术逻辑运算结果,而且也可作为指针寄存器,所以,这些32位寄存器更具有通用性。

8086 8088寻址方式和指令系统 2

8086 8088寻址方式和指令系统 2

8086 8088寻址方式和指令系统28086/8088的指令集可分为如下六个功能组:1、数据传送;2、算术运算;3、逻辑运算;4、串操作;5、程序控制;6、处理器控制。

指令表示格式:在汇编语言中,指令语句可由四部分组成,一般格式如下:[标号]指令助记符[操作数1][,操作数2][;注释]。

对于每条指令程序员要注意:1、指令的功能;2、适用于指令的操作数寻址方式;3、指令对标志的影响;4、指令的长度和执行时间。

1、数据传送指令:又可分为传送指令、交换指令、地址传送指令、堆栈操作指令、标志传送指令、查表指令、输入输出指令。

一、传送指令:格式如下:MOV DST,SRC。

指令把一个字节活一个字从远操作数SRC送至目的操作数DST。

MOV指令可实现的传送方式如下图所示:二、交换指令:利用交换指令可方便地实现通用寄存器与通用寄存器或存储单元的数据交换,交换指令的格式如下:XCHG OPRD1,OPRD2.此指令把OPRD1和OPRD2的内容交换,操作数同时是字节或字。

OPRD1和OPRD2可以是通用寄存器活存储单元,但不包括段寄存器,也不能同时是存储单元,还不能有立即数。

三、地址传送指令:8086/8088有如下三条地址传送指令。

(1)LEA:称为spss有效弟弟指令,指令格式:LEA REG,OPRD。

该指令把操作数OPRD的有效地址传送到操作数REG。

OPRD必须是一个存储器操作数,REG必须是一个16位的通用寄存器。

(2)LDS:该指令传送32位地址指针,格式:LDS REG,OPRD。

该指令把操作数OPRD中所含的32位地址指针段值部分送到数据段寄存器DS,把偏移部分送到给出的通用寄存器REG。

(3)LES:该指令传送32位地址指针,格式:LES REG,OPRD。

该指令把操作数OPRD中所含的32位地址指针段值部分送到数据段寄存器ES,把偏移部分送到给出的通用寄存器REG。

2、堆栈操作指令:堆栈是一段RAM区域,栈底地址较大,栈顶地址叫小。

8088[8086]指令格式(有用)

8088[8086]指令格式(有用)

附录:8086/8088 指令码格式我们用汇编语言写的汇编程序输入计算机后,由机器提供的汇编程序将其翻译成由机器指令(指令码)组成的机器语言程序,才能由计算机识别并执行,因此汇编语言程序需由汇编程序翻译成可执行的机器语言程序,一般来说,这一过程不需要人为干预。

我们在这里只介绍一下基本原理,以便在必要时也可以用手工的方式完成类似的工作。

8086/8088 指令系统的指令程序类型很多,功能很强,各种指令由于功能不同,需要指令码提供的信息也不同。

为了满足不同用户的功能的要求又要减少指令所占的空间,8086/8088 指令系统采用了一种灵活的,由1~6 个字节组成的变字长的指令格式,包括操作码、寻址方式以及操作数3 部分,如图2所示。

通常指令的第一字节为操作码,规定指令的操作类型。

第二字节规定操作数的寻址方式接着以后的3~6 字节依据指令的不同取舍。

可变字长的指令主要体现在这里,一般由其指出存储器操作数地址位移量或立即数。

操作码(第一字节)及寻址方式字节(MOD字段)格式如下。

图1 8086/8088操作码及寻址方式字段格式第一字节中,W 指出操作数类型:W=0 为字节,W=1 为字。

D 指出操作数的传送方向:D=0 寄存器操作数为源操作数,D=1 寄存器操作数为目标操作数。

第二字节指出所用的两个操作数存放的位置,以及存储器中操作数有效地址EA 的计算方法。

图2 8086/8088 不同字长的指令码格式REG 字段规定一个寄存器操作数,它作为源操作数还是目标操作数已由第一个字节中的D 位规定。

由REG 字段选择寄存器的具体规定见表1。

表1 REG 字段编码表MOD 字段用来区分另一个操作数在寄存器中(寄存器寻址)还是在存储器中(存储器寻址)。

在存储器寻址的情况下,还用来指出该字节后面有多少偏移量字节(即指出存储器操作数地址偏移量的字节数)。

MOD 字段编码表见表2。

表2 MOD 字段编码表R/M 字段受MOD 字段将指出第二操作数所在寄存器编号。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

8088指令系统总结预备知识:符号含意、数据传送原则符号含意符号含意opr 操作数src 源操作数dst 目的操作数mem 存储器im 立即数seg 段寄存器reg 通用寄存器EA 偏移地址PA 物理地址nn直接地址DISP8:8位偏移地址DISP16:16位偏移地址数据传送原则口诀数据传送原则寄段储间互传数,seg、reg、mem之间的数据可以相互传送。

立即只入寄和储。

im可入reg、mem只有寄间互换数,reg之间的数据可以传送。

Mem间、seg间不可自传CS立即不可目,CS和立即数不可入,不能当目的操作数8088指令系统8088指令系统分六大类一、数据传送指令二、算术运算指令三、逻辑运算与位移指令四、串操作指令五、控制与转移指令六、CPU控制指令一、数据传送指令1.通用传送指令(1)传送指令MOV dst, src功能:dst←src(2)堆栈操作指令人WPUSH src作用:SP←SP-2 ((SP+1)+SP)←src src(reg seg mem) POP dst 作用:dst←((SP+1)+SP)SP←SP-2 dst(reg seg mem)(3)交换指令XCHG OPR1,OPR2 OPR1←→OPR22.累加器传送指令(1)输入输出指令256B短格式:直接寻址,64K长格式:直接、间接寻址,PORT为8位口地址输入指令:直接寻址IN AX,PORT IN AL,PORT间接寻址IN AX,DX IN AL,DX输出指令:直接寻址OUT AX,PORT OUT AL,PORT间接寻址OUT AX,DX OUT AL,DX(2)换码指令XLAT AL←(BX+AL)(BX)为mem地址3.地址传送指令(1)有效地址传送寄存器LEA reg16, mem作用:mem的EA→reg16(2)指针送寄存器和DS指令LDS reg16, mem32 作用:reg16←mem32的低字高字→DS(3)指针送寄存器和有ES指令LES reg16, mem32 作用:reg16←mem32的低字高字→ES4.标志寄存器传送指令(1)取标志指令:LAHF F的低字节→AH(2)置标志指令:SAHF AH→flag的低字节(3)标志入栈指令:PUSHF SP-2→SP F→(SP+1):SP(4)标志出栈指令:POPF (SP+1):SP→F SP+2→SP二、算术运算指令1.加法类指令(Add)opr-reg mem B/W(1)不带进位加法ADD dst, src dst←dst+src 影响OSZAPC(2)带进位加法ADC dst, src dst←dst+src+CF影响OSZAPC(3)加1指令INC opr opr←opr+1影响OSZP(4)组合十进制调整DAA放在ADD后(5)非组合十进制调整AAA放在ADC后原理:2个十进制数相加,可能出现非法数(A到F),需用调整指令,进行加6调整变成合法十进制数。

十进制=BCD组合=压缩组合BCD占4位非组合BCD占8位2 . 减法类指令(substract)(1)减法指令SUB dst, src;dst←dst-src影响标志位OSZAPC(2)带借位减法指令SBB dst, src;dst←dst-src-CF影响标志位OSZAPC(3)减1指令DEC src 影响OSZP(4)求补指令NEG src ;negatesrc←0-src 0-src=FFH-src+1FFH-src=求反(5)比较指令COMP dst, src难在带符号数比较:SF⊕OF=0 A>B,SF⊕OF=1,A<B (6)组合十进制减法调整指令DAS(7)非组合十进制减法调整指令AAS3.乘法类指令multiplication(1)无符号数乘法MUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC(2)有符号数乘法IMUL src ;AX←src8×AL DX:AX←src16×AX,影响F:OC(3)组合十进制乘法调整指令AAM注意:1乘数和被乘数都是非组合BCD码。

2 AAM用于乘法指令MUL之后。

3影响F:SZP原理:AH←AL/0AH AH←AL%0AH(%为取余操作)4.除法类指令(Division)(1)无符号数除法DIV src ;AX÷src8商进AL,余数进AH;(DX:AX)÷src16商进AX,余数进DX,不影响F。

(2)有符号数除法IDIV src ;算法同上。

注意:1不影响F;2余数的符号与被除数相同,3若被除数和除数都是8位,被除数需扩展成16位;若被除数和除数都是16位,被除数需扩展成32位。

(3)非组合十进制乘法调整指令AA D注意:1除数和被除数都是非组合BCD码。

2AAD放在除法指令前。

原理:(AL)←(AH)×0AH+(AL)(AH)←0(4)字节扩展成字指令CBW;AL中的符号扩展为AX,不影响F原理:(AL)<80H(正数)使AH=00H;(AL)≧80H(负数)使AH=FFH (5)字扩展成双字指令CWB;AX中的符号扩展为DX:AX,不影响F原理:(AH)<8000H(正数)使DX=0000H;(AX)≧8000H(负数)使DX =FFFFH三、逻辑运算与位移指令1.逻辑运算(1)与AND dst, src ;dst←dst AND src 影响F: SZP(2)或OR dst, src ;dst←dst OR src 影响F: SZP(3)异或XOR dst, src ;dst←dst XOR src 影响F: SZP(4)非NOT opr ;dst←opr逐位求反不影响F(5)测试TEST reg, src ;dst AND src 影响F: SZP 不入dst逻辑运算dst src opr符合基本传输原则(不允许seg)2.移位(1)逻辑左移SHL opr, 1 或SHL opr, CL0填最右位(2)逻辑右移SHR opr, 1 或SHR opr, CL0填最左位(3)算术左移SAL opr, 1 或SAL opr, CL0填最右位(4)算术右移SAR opr, 1SAR opr, CL最左位不变注意:opr: reg mem3.循环移位(1)无进位左循环ROL opr, 1 ROL opr, CL(2)无进位右循环ROR opr, 1 ROR opr, CL(3)有进位左循环RCL opr, 1 RCL opr, CL(4)有进位右循环RCR opr, 1 RCR opr, CL注意:opr: reg mem B/W四、串操作和重复指令(唯一的src dst 可以均为mem的指令)特点:A源操作数src在DS:SI,目的操作数在dst ES:DIB修改指针决定于DF,0增1减,字节1字2C串长置于CXD重复靠REP1.串操作指令(1)串传送MOVS / MOVSB / MOVSW dst, src ;dst←src(2)串比较COMP / COMPB / COMPW dst, src ;dst-src影响F: OSZAPC(3)串搜索SCAS / SCASB / SCASW dst ;AL-dst或AX-dst影响F: OSZAPC(4)串进A LODS / LODSB /LODSW src ;AL←src或AX←src(5)A进串STOS / STOSB / STOSW dst ;dst←AL或dst←AX(6)重复指令REP,RETZ / REPE,REPNZ / REPNE2.重复指令(1)REP与MOVS/B/W,STOS/B/W联用①若CX≠0则重复,执行下一条,否则退出串操作②CX←(CX-1)③执行字符串命令④重复1~3(2)RETZ / REPE与CMPS/B/W,SCAS/B/W联用①若CX≠0且ZF=1则重复,执行下一条,若CX=0或ZF=0(两数不等)退出串操作②CX←(CX-1)③执行字符串命令④重复1~3(3)REPNZ / REPNE与CMPS/B/W,SCAS/B/W联用①若CX≠0且ZF=0则重复,执行下一条,若CX=0或ZF=1(两数不等)退出串操作②CX←(CX-1)③执行字符串命令④重复1~3五、控制与转移指令1.无条件转移指令注意:SHORT为运算符,页内,-128~127。

偏移量用补码表示,8位偏移量与IP相加需扩展成16位(1)段内直接短转移JMP SHORT偏移量8;IP←IP+8位偏移量(2)段内直接近转移JMP NEAT PTR偏移量16注意:NEAT PTR为运算符偏移量用补码表示:64K范围-32768~32767 (3)段内间接寻址JMP src ;IP←src src: reg mem注意:mem寻址要加WORD PTR(4)段间直接寻址JMP FAR PTR LABEL;CS←下2字节IP←上2字节注意:FAR PTR为段内转移运算符LABEL为四字节转移地址的首地址,下CS上IP(5)段间间接寻址JMP DWORD PTR mem注意:与段间直接寻址一样,仅mem需要寻址去找,如相对寻址、基址加变址等2.条件转移指令(共19条)特点:双字节指令,短转移。

转移范围-128~127 ,IP←opr opr: reg mem,通常为标号(1)以标志位为条件(F: OSZPC 十种情况)①JO opr ;OF=1转移,溢出转移,②JNO opr ;OF=0转移,不溢出转移③JS opr ;SF=1转移,负数转移④JNS opr ;SF=0转移,正数转移⑤JZ opr ;ZF=1转移,结果为0转移又JE⑥JNZ opr ;ZF=0转移,结果不为0转移又JNE⑦JP opr ;PF=1转移,偶数转移⑧JNP opr ;PF=0转移,奇数转移⑨JC opr ;CF=1转移,有进(借)位转移又JB JNA⑩JNC opr ;CF=0转移,无进(借)位转移又JA JNB(2)无符号数比较大于用A,小于用B,等于用E,四种情况:>≥<≤设参与比较的两数按序为M、NJA opr ;M>N转移到地址opr CF=0且ZF=0JAE opr ;M≥N转移到地址opr CF=0或ZF=1JB opr ;M<N转移到地址opr CF=1且ZF=0JBE opr ;M≤N转移到地址opr CF=1或ZF=1(3)有符号数比较大于用G,小于用L,等于用E,四种情况:>≥<≤设参与比较的两数按序为M、NJG opr ;M>N转移到地址opr SF⊕OF=0且ZF=0JGE opr ;M≥N转移到地址opr SF⊕OF=0或ZF=1JL opr ;M<N转移到地址opr SF⊕OF=1且ZF=0JLE opr ;M≤N转移到地址opr SF⊕OF=1或ZF=1(4)根据CX值转移JCXZ opr ;当CX=0转移到地址opr3.循环控制指令以CX为计数器,短转移,不影响F,IP←Label或IP←IP+扩展的opr8Label通常为符号地址(1)循环指令LOOP SHORT Label①CX-1②若CX≠0,则循环,改变IP③若CX=0执行下一条指令零循环指令LOOPZ SHORT Label 或LOOPE SHORT Label①CX-1②若CX≠0且ZF=1,则循环,改变IP③若CX=0或ZF=1执行下一条指令(2)非零循环指令LOOPNZ SHORT Label 或LOOPNE SHORT Label ①CX-1②若CX≠0且ZF=0,则循环,改变IP③若CX=0或ZF=0执行下一条指令4.子程序调用指令子程序=过程调用=转子返回=返子(1)段内直接调用CALL dst ;dst为子程序入口地址(D16范围)①现IP入栈:SP←(SP-2)(SP+1)SP←IP②子程序入口地址入IP:IP←dst(2)段内直接调用CALL dst ;dst:各种reg mem寻址的EA,D16①现IP入栈:SP←(SP-2)(SP+1)SP←IP②子程序入口地址入IP:IP←EA(3)段间直接调用CALL dst ;dst为子程序入口地址(D32范围)①现CS入栈:SP←(SP-2)(SP+1)SP←CS②现IP入栈:SP←(SP-2)(SP+1)SP←IP③子程序入口有效地址入IP:IP←有效地址④子程序入口段地址入IP:CS←段地址(4)段间间接调用CALL dst ;dst为各种mem寻址的EA,D32范围①现CS入栈:SP←(SP-2)(SP+1)SP←CS②现IP入栈:SP←(SP-2)(SP+1)SP←IP③子程序入口有效地址入IP:IP←EA④子程序入口段地址入IP:CS←EA+25.子程序返回指令(1)段内返回指令RET;与CALL dst成对出现①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)(2)段内带立即数返回指令RET im;与CALL dst成对出现,im为D16①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③IP加立即数:IP←IP+im(3)段间返回指令RET;与CALL dst成对出现①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③原CS出栈:IP←(SP+1)SP④修改SP指针:SP←(SP+2)(4)段间带立即数返回指令;与CALL dst成对出现,im为D16①原IP出栈:IP←(SP+1)SP②修改SP指针:SP←(SP+2)③原CS出栈:IP←(SP+1)SP④修改SP指针:SP←(SP+2)⑤IP加立即数:IP←IP+im六、CPU控制指令1.状态标志位操作指令D置位复位,I置位复位,C反置位复位STD;使DF=1CLD;使DF=0STI;使IF=1CLI;使IF=0STC;使CF=1CLC;使CF=0CMC;CF=CF的非2.外部同步HLT;暂停,等待中断或复位WAIT;当引脚TEXT等于0时,等待外部中断,否则顺序执行LOCK;总线封锁前缀3.NOP;空操作。

相关文档
最新文档