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汇编指令表一、数据传输指令───────────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.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的寻址方式和基本指令
• 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 汇编语言指令表
(续)
操作
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 汇编指令手册一、常用指令二、算术运算指令三、逻辑运算指令四、串指令五、程序跳转指令------------------------------------------计算机寄存器分类简介: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寻址方式和指令系统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]指令格式(有用)
附录: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 字段将指出第二操作数所在寄存器编号。
8086—8088汇编语言
暂存寄存器 ALU EU控 制器 标志寄存器 执行部件(EU) 8086/8088内部结构图 总线接口部件(BIU) Q总线 指令队列
第二章 80 从存储器中取出一条指令,执行完所取出的指令 后再去取下一条要执行的指令。一般CPU和总线工作 过程如下:
第一章 概
述(1.4.10)
11100111 + 11100000 111000111 “1” 舍去
[X+Y]补=[X]补+[Y]补 =11100111B+11100000B =11000111B X+Y=-0111001B=-57D
[X-Y]补=[X]补+[-Y]补 =11100111B+00100000B =00000111B X-Y=00000111B=7D
CPU t
(二个字节)
0000 0101
0000 0110
第一章 概
BCD码
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 00010000 00010010 00010011 00010100 00010100 00010101 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111
第一章 概
述(1.4.9)
[X-Y]补=[X]补+[-Y]补 00011001 =00011001B+11100000B + 11100000 =11111001B 11111001 X-Y=-0000111B=-7D 例2 已知:X=-25D,Y=-32D,用8bit二进制补 码运算求 X+Y和X-Y的值 解:X=-25D=-0011001B Y=-32D=-0100000B [X]补=11100111B,[Y]补=11100000B [-Y]补=00100000B
8086_8088汇编语言指令集
8086_8088汇编语言指令集8086/8088汇编语言指令集数据传送指令集MOV功能: 把源操作数送给目的操作数语法: MOV 目的操作数,源操作数格式: MOV r1,r2MOV r,mMOV m,rMOV r,dataXCHG功能: 交换两个操作数的数据语法: XCHG格式: XCHG r1,r2 XCHG m,r XCHG r,mPUSH,POP功能: 把操作数压入或取出堆栈语法: PUSH 操作数POP 操作数格式: PUSH r PUSH M PUSH data POP r POP m PUSHF,POPF,PUSHA,POPA功能: 堆栈指令群格式: PUSHF POPF PUSHA POPALEA,LDS,LES功能: 取地址至寄存器语法: LEA r,m LDS r,m LES r,mXLAT(XLATB)功能: 查表指令语法: XLAT XLAT m算数运算指令ADD,ADC功能: 加法指令语法: ADD OP1,OP2 ADC OP1,OP2格式: ADD r1,r2 ADD r,m ADD m,r ADD r,data影响标志: C,P,A,Z,S,OSUB,SBB功能:减法指令语法: SUB OP1,OP2 SBB OP1,OP2格式: SUB r1,r2 SUB r,m SUB m,r SUB r,data SUB m,data 影响标志: C,P,A,Z,S,OINC,DEC功能: 把OP的值加一或减一语法: INC OP DEC OP格式: INC r/m DEC r/m影响标志: P,A,Z,S,ONEG功能: 将OP的符号反相(取二进制补码)语法: NEG OP格式: NEG r/m影响标志: C,P,A,Z,S,OMUL,IMUL功能: 乘法指令语法: MUL OP IMUL OP格式: MUL r/m IMUL r/m影响标志: C,P,A,Z,S,O(仅IMUL会影响S标志)DIV,IDIV功能:除法指令语法: DIV OP IDIV OP格式: DIV r/m IDIV r/mCBW,CWD功能: 有符号数扩展指令语法: CBW CWDAAA,AAS,AAM,AAD功能: 非压BCD码运算调整指令语法: AAA AAS AAM AAD影响标志: A,C(AAA,AAS) S,Z,P(AAM,AAD)DAA,DAS功能: 压缩BCD码调整指令语法: DAA DAS影响标志: C,P,A,Z,S位运算指令集AND,OR,XOR,NOT,TEST功能: 执行BIT与BIT之间的逻辑运算语法: AND r/m,r/m/data OR r/m,r/m/data XOR r/m,r/m/data TEST r/m,r/m/data NOT r/m影响标志: C,O,P,Z,S(其中C与O两个标志会被设为0) NOT指令不影响任何标志位SHR,SHL,SAR,SAL功能: 移位指令语法: SHR r/m,data/CL SHL r/m,data/CL SAR r/m,data/CL SAL r/m,data/CL影响标志: C,P,Z,S,OROR,ROL,RCR,RCL功能: 循环移位指令语法: ROR r/m,data/CL ROL r/m,data/CL RCR r/m,data/CL RCL r/m,data/CL影响标志: C,P,Z,S,O程序流程控制指令集CLC,STC,CMC功能: 设定进位标志语法: CLC STC CMC标志位: CCLD,STD功能: 设定方向标志语法: CLD STD标志位: DCLI,STI功能: 设定中断标志语法: CLI STI标志位: ICMP功能: 比较OP1与OP2的值语法: CMP r/m,r/m/data标志位: C,P,A,Z,OJMP功能: 跳往指定地址执行语法: JMP 地址JXX功能: 当特定条件成立则跳往指定地址执行语法: JXX 地址注:A: ABOVE,当C=0,Z=0时成立B: BELOW,当C=1时成立C: CARRY,当弁时成立CXZ: CX寄存器的值为0(ZERO)时成立E: EQUAL,当Z=1时成立G: GREATER(大于),当Z=0且S=0时成立L: LESS(小于),当S不为零时成立N: NOT(相反条件),需和其它符号配合使用O: OVERFLOW,O=1时成立P: PARITY,P=1时成立PE: PARITY EVEN,P=1时成立PO: PARITY ODD,P=0时成立S: SIGN,S=1时成立Z: ZERO,Z=1时成立LOOP功能: 循环指令集语法: LOOP 地址LOOPE(Z)地址LOOPNE(Z) 地址标志位: 无CALL,RET功能: 子程序调用,返回指令语法: CALL 地址RET RET n标志位: 无INT,IRET功能: 中断调用及返回指令语法: INT n IRET标志位: 在执行INT时,CPU会自动将标志寄存器的值入栈,在执行IRET时则会将堆栈中的标志值弹回寄存器字符串操作指令集MOVSB,MOVSW,MOVSD功能: 字符串传送指令语法: MOVSB MOVSW MOVSD标志位: 无CMPSB,CMPSW,CMPSD功能: 字符串比较指令语法: CMPSB CMPSW CMPSD标志位: C,P,Z,S,OSCASB,SCASW功能: 字符串搜索指令语法: SCASB SCASW标志位: C,P,Z,S,OLODSB,LODSW,STOSB,STOSW功能: 字符串载入或存贮指令语法: LODSB LODSW STOSB STOSW标志位: 无REP,REPE,REPNE功能: 重复前缀指令集语法: REP 指令S REPE 指令S REPNE 指令S标志位: 依指令S而定AT&T与Intel汇编语法的区别比较1. 前缀:在Intel的语法中,寄存器和立即数都没有前缀,但是在AT&T中,寄存器前冠以"%",而立即数前冠以"$"。
8086_8088_汇编_指令_手册
8086 8088 汇编指令手册通用寄存器(1)数据寄存器数据寄存器共有4个寄存器AX、BX、CX、DX,用来保存操作数或运算结果等信息。
AX寄存器称为累加器。
使用频度最高,用于算术、逻辑运算以及与外设传送信息等。
BX寄存器称为基址寄存器。
常用于存放存储器地址。
CX寄存器称为计数器。
一般作为循环或串操作等指令中的隐含计数器。
DX寄存器称为数据寄存器。
常用来存放双字数据的高16位,或存放外设端口地址。
(2)变址和指针寄存器变址和指针寄存器包括SI、DI、SP、BP 4个16位寄存器,主要用于存放某个存储单元的偏移地址。
SI是源变址寄存器。
DI是目的变址寄存器,在字符串操作中,SI和DI都具有自动增量或减量的功能。
SP为堆栈指针寄存器,用于存放当前堆栈段中栈顶的偏移地址。
BP为基址指针寄存器,用于存放堆栈段中某一存储单元的偏移地址。
2.段寄存器8086 CPU的4个16位的段寄存器分别称为代码段寄存器CS,数据段寄存器DS,堆栈段寄存器SS,附加数据段寄存器ES。
段寄存器用来确定该段在内存中的起始地址。
代码段用来存放程序的指令序列。
CS存放代码段的段首址,指令指针寄存器IP指示代码段中指令的偏移地址。
3.指令指针8086 CPU中的指令指针IP,它总是保存下一次将要从主存中取出指令的偏移地址,偏移地址的值为该指令到所在段段首址的字节距离。
在目标程序运行时,IP的内容由微处理器硬件自动设置,程序不能直接访问IP,但一些指令却可改变IP的值,如转移指令、子程序调用指令等。
3.1 标志寄存器8086 CPU中有一个很重要的16位标志寄存器,它包含9个标志位,主要用于保存一条指令执行后,CPU所处状态信息及运算结果的特征。
条件标志(1)进位标志CF (2)零标志ZF (3)符号标志SF (4)溢出标志 OF(5)奇偶标志 PF (6)辅助进位标志AF状态控制标志(1)方向标志DF (2)中断允许标志IF (3)追踪标志TF运算结果标志位1、进位标志CF(Carry Flag)进位标志CF主要用来反映运算是否产生进位或借位。
汇编语言指令详解
第一讲第三章 指令系统--寻址方式回顾: 8086/8088的内部结构和寄放器,地址分段的概念,8086/8088的工作进程。
重点和纲要:指令系统--寻址方式。
有关寻址的概念;6种大体的寻址方式及有效地址的计算。
教学方法、实施步骤时间分配 教学手段 回 顾 5”×2 板书 计算机 投影仪 多媒体课件等讲 授 40” ×2 提 问 3” ×2 小 结2” ×2教学内容:8086/8088寻址方式操作码 操作数 …… 操作数运算机中的指令由操作码字段和操作数字段组成。
操作码:指运算机所要执行的操作,或称为指出操作类型,是一种助记符。
操作数:指在指令执行操作的进程中所需要的操作数。
该字段除能够是操作数本身外,也能够是操作数地址或是地址的一部份,还能够是指向操作数地址的指针或其它有关操作数的信息。
寻址方式就是指令顶用于说明操作数所在地址的方式,或说是寻觅操作数有效地址的方式。
8086/8088的大体寻址方式有六种。
1.当即寻址所提供的操作数直接包括在指令中。
它紧跟在操作码的后面,与操作码一路放在代码段区域中。
如图所示。
例如:MOV AX,3000H当即数能够是8位的,也能够是16位的。
若是16位的,则存储时低位在前,高位在后。
当即寻址主要用来给寄放器或存储器赋初值。
2.直接寻址操作数地址的16位偏移量直接包括在指令中。
它与操作码—起寄存在代码段区域,操作数一般在数据段区域中,它的地址为数据段寄放器DS加上这16位地址偏移量。
如图2-2所示。
例如:MOV AX,DS:[2000H];图2-2(对DS来讲能够省略成MOV AX,[2000H],系统默以为数据段)这种寻址方式是以数据段的地址为基础,可在多达64KB的范围内寻觅操作数。
8086/8088中允许段超越,即还允许操作数在以代码段、堆栈段或附加段为基准的区域中。
现在只要在指令中指明是段超越的,则16位地址偏移量能够与CS或SS或ES相加,作为操作数的地址。
(汇编语言教程)5_80868088汇编语言-2
104H DUP(11H 104H DUP(11H)
DUP( DUP(0)
ENDS
ENDS DATA2 DATA2 SEGMENT PARA DB COMMON ‘DATA2’ DATA2 DATA N2 DATA2 DATA2 105H DUP( 105H DUP(0)
DATA2 DATA2 N1 DATA2 DATA2 END
默认值为: 默认值为:PARA
III、 III、组合类型
段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’] 定位类型] 组合类型] 使用类型] [‘类别 类别’ …… …… ; 语句序列 段名 ENDS
PRIVATE:私有段,不进行组合。 PUBLIC:
– 不同模块中的同为public属性的同名段连接组合成一个逻辑段。
3、过程定义伪指令
格式: 格式:过程名 [类型 类型] PROC [类型] … 过程体语句 RET 段名 ENDP PROC和ENDP是成对出现的 是成对出现的。 PROC和ENDP是成对出现的。 类型有近(NEAR)和远(FAR)两种, 类型有近(NEAR)和远(FAR)两种,若过程缺省 NEAR缺省 则属默认值。若为远过程, FAR不 缺省, 或NEAR缺省,则属默认值。若为远过程,则FAR不 能省略。 能省略。 过程名具有段地址、 过程名具有段地址、段内偏移量和类型三个属 性。
2、源程序开始和结束伪指令
程序开始伪指令
– NAME伪指令 NAME伪指令 – TITLE伪指令 TITLE伪指令
程序结束伪指令
– END
(1)程序开始伪指令NAME 程序开始伪指令NAME
NAME伪指令 NAME伪指令 格式: 格式:NAME 模块名 含义:表示一个模块的开始, 含义:表示一个模块的开始,并给出该模 块名。 块名。
8086-8088的指令格式及寻址方式
2021年1月30日星期六
图1-1 立即数寻址方式的存储和执行示意图
2)寄存器寻址方式 该寻址方式的操作数在CPU内部的寄存器中,指令中指定寄存器号。
对于16位操作数,寄存器可以是AБайду номын сангаас、BX、CX、DX,SI、DI、SP和 BP等; 对于8位操作数,寄存器可以是AL、AH、BL、BH、CL、CH、DL和DH。 3)直接寻址方式
2021年1月30日星期六
2021年1月30日星期六
图1-4 寄存器相对寻址方式指令的执行情况
6)基址加变址寻址方式 操作数在存储器中,操作数的有效地址由基址寄存器之一的内
容与变址寄存器之一的内容相加得到。即在一般情况(即不使用段超 越前缀明确指定段寄存器)下,如果BP的内容作为有效地址的一部分, 则以SS的内容为段值,否则以DS的内容为段值。
2021年1月30日星期六
8086/8088的指令格式及寻址方式
汇编语言是一种接近于机器语言的低级计算机语言,在 汇编语言中,助记符代替了操作码,而操作数部分也像机器 语言一样需要指明具体位置,具有机器语言相应的寻址方式, 当然表现形式不是二进制符号,而是数值、寄存器名、变量 等。对有操作数的指令,在执行指令所规定的操作之前首先 要寻找操作数。
2021年1月30日星期六
7)相对基址加变址寻址方式 操作数在存储器中,操作数的有效地址由基址寄存器之一的内容与变址寄存器之一的内容
与指令中给定的8位或16位位移量相加得到。也就是说,相对基址变址寻址方式的有效地址是 由指令中指定的8 位或16 位位移量(disp)、一个基址寄存器内容和一个变址寄存器内容之和。 即: [BX]+[SI]+[8 位disp] 或 [BP]+[DI]+[16位disp]
汇编语言之8088指令系统
8086/8088指令系统一、数据传送指令1.通用数据传送指令MOV(Move)传送PUSH(Push onto the stack)进栈POP(Pop from the stack)出栈XCHG(Exchange)交换.MOV指令格式为: MOV DST,SRC执行的操作:(DST)<-(SRC).PUSH进栈指令格式为:PUSH SRC执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(SRC).POP出栈指令格式为:POP DST执行的操作:(DST)<-((SP+1),(SP))(SP)<-(SP)+2.XCHG 交换指令格式为:XCHG OPR1,OPR2执行的操作:(OPR1)<-->(OPR2)2.累加器专用传送指令IN(Input) 输入OUT(Output) 输出XLAT(Translate) 换码这组指令只限于使用累加器AX或AL传送信息..IN 输入指令长格式为: IN AL,PORT(字节)IN AX,PORT(字)执行的操作: (AL)<-(PORT)(字节)(AX)<-(PORT+1,PORT)(字)短格式为: IN AL,DX(字节)IN AX,DX(字)执行的操作: AL<-((DX))(字节)AX<-((DX)+1,DX)(字).OUT 输出指令长格式为: OUT PORT,AL(字节)OUT PORT,AX(字)执行的操作: (PORT)<-(AL)(字节)(PORT+1,PORT)<-(AX)(字)短格式为: OUT DX,AL(字节)OUT DX,AX(字)执行的操作: ((DX))<-(AL)(字节)((DX)+1,(DX))<-AX(字)在IBM-PC机里,外部设备最多可有65536个I/O端口,端口(即外设的端口地址)为0000~FFFFH.其中前256个端口(0~FFH)可以直接在指令中指定,这就是长格式中的PORT,此时机器指令用二个字节表示,第二个字节就是端口号.所以用长格式时可以在指定中直接指定端口号,但只限于前256个端口.当端口号>=256时,只能使用短格式,此时,必须先把端口号放到DX寄存器中(端口号可以从0000到0FFFFH),然后再用IN或OUT指令来传送信息..XLAT 换码指令格式为: XLAT OPR或: XLAT执行的操作:(AL)<-((BX)+(AL))3.有效地址送寄存器指令LEA(Load effective address)有效地址送寄存器LDS(Load DS with Pointer)指针送寄存器和DSLES(Load ES with Pointer)指针送寄存器和ES.LEA 有效地址送寄存器格式为: LEA REG,SRC执行的操作:(REG)<-SRC指令把源操作数的有效地址送到指定的寄存器中..LDS 指针送寄存器和DS指令格式为: LDS REG,SRC执行的操作:(REG)<-(SRC)(DS)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及DS寄存器中.该指令常指定SI寄存器..LES 指针送寄存器和ES指令格式为: LES REG,SRC执行的操作: (REG)<-(SRC)(ES)<-(SRC+2)把源操作数指定的4个相继字节送到由指令指定的寄存器及ES寄存器中.该指令常指定DI寄存器.4.标志寄存器传送指令LAHF(Load AH with flags)标志送AHSAHF(store AH into flags)AH送标志寄存器PUSHF(push the flags) 标志进栈POPF(pop the flags) 标志出栈.LAHF 标志送AH格式为: LAHF执行的操作:(AH)<-(PWS的低字节).SAHF AH送标志寄存器格式为: SAHF执行的操作:(PWS的低字节)<-(AH).PUSHF 标志进栈格式为: PUSHF执行的操作:(SP)<-(SP)-2((SP)+1,(SP))<-(PSW).POPF 标志出栈格式为: POPF执行的操作:(PWS)<-((SP)+1,(SP))(SP)<-(SP+2)二、算术指令1.加法指令ADD(add)加法ADC(add with carry)带进位加法INC(increment)加1.ADD 加法指令格式: ADD DST,SRC执行的操作:(DST)<-(SRC)+(DST).ADC 带进位加法指令格式: ADC DST,SRC执行的操作:(DST)<-(SRC)+(DST)+CF.ADD 加1指令格式: INC OPR执行的操作:(OPR)<-(OPR)+12.减法指令SUB(subtract)减法SBB(subtract with borrow)带借位减法DEC(Decrement)减1NEG(Negate)求补CMP(Compare)比较.SUB 减法指令格式: SUB DST,SRC执行的操作:(DST)<-(DST)-(SRC).SBB 带借位减法指令格式: SBB DST,SRC执行的操作:(DST)<-(DST)-(SRC)-CF.DEC 减1指令格式: DEC OPR执行的操作:(OPR)<-(OPR)-1.NEG 求补指令格式: NEG OPR执行的操作:(OPR)<- -(OPR).CMP 比较指令格式: CMP OPR1,OPR2执行的操作:(OPR1)-(OPR2)该指令与SUB指令一样执行减法操作,但不保存结果,只是根据结果设置条件标志西半球.柯木整理2010年10月17日星期日。
汇编语言-指令集
例:假设(SS) = 2250H , (SP) = 0140H 如果在堆栈中存入5个数据,则栈顶的物理地址是多少? 未存入数据之前物理地址=22500 + 0140=22640H 存入5个数据,栈顶的物理地址为: 22640 – 0A = 22636H
如果又从堆栈中取出3个数据,则栈顶的物理地址是多少? 22636 + 6 = 2263CH
80x86/8088指令系统 8086/8088的指令系统丰富,而且指令的功能也强。 大多数指令既能处理字数据,又能处理字节数据。 指令系统可分为如下6个功能组: (1)数据传送 (2)算术运算 (3)逻辑运算 (4)串操作 (5)程序控制 (6)处理器控制 汇编语言中,指令语句可由四部分组成,一般格式如下: [标号:] 指令助记符 [操作数1 [,操作数2]] [;注释]
例如:PUSH AX 假设(AX) = 2107H
(2)出栈指令POP 格式: POP DST 执行的操作:从堆栈顶弹出一个字数据到目的操作数DST。 步骤为: 1. 把堆栈指针寄存器SP所指的字数据送往目的操作数DST; 2. 堆栈指针寄存器器SP的值加2。 DST可以是通用寄存器、段寄存器(CS除外),也可以是字 存储单元
3.加1指令INC(INCrement) 其格式如下:INC OPRD (OPRD) <- (OPRD) + 1 功能:对操作数加1. OPRD可以是通用寄存器,也可以是存储单元。 指令执行的结果影响ZF、SF、OF、PF、AF, 但不影响CF. 改指令主要用于调整地址指针和用于计算器。
例:写出把首地址为BLOCK的字数组的第6个字送到DX寄存 器的指令。 (1)使用寄存器间接寻址 MOV BX , OFFSET BLOCK ADD BX , 000AH MOV DX , [BX] (2)寄存器相对寻址 MOV BX , OFFSET BLOCK MOV DX , [BX + 000AH]
活用8086_8088汇编语言指令
活用8086/8088汇编语言指令邝 涛(平原大学计算机系,河南新乡453003)摘 要:以8086/8088汇编语言为例,通过两个程序的介绍,加以比较、分析,指出对汇编语言的理解与应用不能简单只留在指令的字面意义上,应清楚指令的实际执行的情况。
关键词:8086/8088;指令;汇编语言;堆栈中图分类号:TP313 文献标识码:A 文章编号:1008-3944(2002)02-0026-02学习和使用汇编语言时,对汇编指令的理解不应只停留在字面意义上,而应深刻理解指令被执行的实际意义,了解CPU内部寄存器和存储单元变化的情况。
这样对要处理的问题才能从多个方面考虑,灵活地运用汇编语言。
本文以8086/8088汇编语言为例,先介绍几条指令的用法与实质,然后通过子程序调用实例对指令的运用进行分析比较,从而来了解8086/8088汇编指令的一些使用技巧。
1 指令的实质1.1 CALL DST该指令首先移动栈顶指针,并把子程序的返回地址(即调用程序C ALL指令的下一条指令的地址,也就是当前CS、IP寄存器的内容)压入堆栈,供子程序返回主程序使用,然后再将子程序入口地址装入IP寄存器,以便使程序跳转到子程序的第一条指令继续执行。
1.2 RET该指令与调用指令CALL配合使用。
使当前栈顶指针SP所指向的字存储单元的内容送给IP,也就是使程序无条件转向当前栈顶字单元所确定的地址单元,开始执行程序。
1.3 JMP DS T无条件转移语句。
根据DST存放位置不同有两种寻址方式,直接寻址和间接寻址,使程序转移到DST所在地址处执行程序。
1.4 PUS H SRL指先将栈顶指针SP向上移两位,即SP-2,指向一个新的字存储单元,再将操作数的内容存入SP所指向的字存储单元。
1.5 POP DST将当前栈顶指针SP所指向字单元内容送向DS T,然后将栈顶指针SP向下移两位,即SP+2。
2 指令的应用通过下面两个例子的比较,可以很清楚地说明指令的使用情况。
微机原理80868088汇编语言上机基本操作指
8086/8088汇编语言,是在DOS环境下运行的编程语言,汇编语言是针对8086/8088 CPU的,凡兼容80X86指令系统的CPU ,都可以正常运行调试。
如目前使用的Windows 2000 / Windows 2003 / Windows XP等系统下都可以编辑、调试汇编语言程序。
一、进入编辑调试环境1.开始→运行,在运行框输入CMD而后回车,即进入DOS环境。
2.开始→程序→附件→C:命令提示符,也可进入DOS 环境。
二、使用到的软件程序1.源程序编辑软件:EDIT.EXE,也可用其他任意编辑软件,如Windows 环境下记事本,但最后扩展名要改为.ASM,否则无法汇编。
2.汇编程序(MASM.EXE或TASM.EXE),将编辑好的.ASM源程序汇编成目标文件.OBJ。
OBJ是程序编译后的二进制文件,在通过链接器和资源文件链接就成exe文件,OBJ只给出了程序的相对地址,而EXE是绝对地址。
3.连接程序(LINK.EXE或TLINK.EXE),LINK又称链接器,把一个或多个目标文件(.obj)链接成可执行(.exe)文件。
4.调试程序(DEBUG.EXE或TD.EXE),DEBUG,俗称“抓臭虫”,DOS 系统有力的侦错,跟踪程序运行,检查系统数据的工具程序,它是在字符界面下以单字符命令方式工作。
要很好地使用它必须具备一定的汇编程序设计和硬件基本知识的能力,当然,它为汇编语言程序员提供了有效的调试手段。
需要说明的是,EDIT、MASM、LINK、DEBUG是微软操作系统推出的汇编连接调试工具。
在一般教学上使用就足够了。
而TASM、TLINK、TD是Borland公司推出的。
到目前为止,TASM的最后一个版本是5.0版,这个版本支持WIN32编程,并单独为WIN32编程附带有一整套32位程序:32位的编译器TASM32.EXE、连接器TLINK32.EXE和资源编译器BRC32.EXE。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;空操作。