汇编语言常用指令大全

合集下载

mrs汇编指令

mrs汇编指令

mrs汇编指令Mrs汇编指令是一种常用的汇编指令集,用于编写汇编程序。

本文将介绍一些常见的Mrs汇编指令及其用法。

1. MOV指令MOV指令用于将数据从一个位置复制到另一个位置。

例如,MOV AX, BX将BX寄存器的值复制到AX寄存器中。

2. ADD指令ADD指令用于将两个数相加,并将结果存储在目标操作数中。

例如,ADD AX, BX将AX寄存器和BX寄存器中的值相加,并将结果存储在AX寄存器中。

3. SUB指令SUB指令用于将两个数相减,并将结果存储在目标操作数中。

例如,SUB AX, BX将AX寄存器中的值减去BX寄存器中的值,并将结果存储在AX寄存器中。

4. CMP指令CMP指令用于比较两个数的大小,并根据比较结果设置标志位。

例如,CMP AX, BX将比较AX寄存器和BX寄存器中的值,并根据比较结果设置标志位。

5. JMP指令JMP指令用于无条件跳转到指定的地址。

例如,JMP label将跳转到标签为label的位置。

6. JE指令JE指令用于在相等时跳转到指定的地址。

例如,JE label将在相等时跳转到标签为label的位置。

7. JNE指令JNE指令用于在不相等时跳转到指定的地址。

例如,JNE label将在不相等时跳转到标签为label的位置。

8. INC指令INC指令用于将指定操作数的值加1。

例如,INC AX将AX寄存器中的值加1。

9. DEC指令DEC指令用于将指定操作数的值减1。

例如,DEC AX将AX寄存器中的值减1。

10. AND指令AND指令用于逻辑与操作,并将结果存储在目标操作数中。

例如,AND AX, BX将AX寄存器和BX寄存器中的值进行逻辑与操作,并将结果存储在AX寄存器中。

11. OR指令OR指令用于逻辑或操作,并将结果存储在目标操作数中。

例如,OR AX, BX将AX寄存器和BX寄存器中的值进行逻辑或操作,并将结果存储在AX寄存器中。

12. XOR指令XOR指令用于逻辑异或操作,并将结果存储在目标操作数中。

汇编的基本常用指令

汇编的基本常用指令

汇编的基本常用指令汇编语言是一种底层的程序设计语言,主要用于编写机器码指令。

以下是一些常用的汇编指令:1. MOV:将数据从一个位置复制到另一个位置。

2. ADD:将两个操作数相加,并将结果存储在目的操作数中。

3. SUB:将第二个操作数从第一个操作数中减去,并将结果存储在目的操作数中。

4. INC:将一个操作数的值增加1。

5. DEC:将一个操作数的值减少1。

6. CMP:比较两个操作数的值,并将结果影响到标志寄存器中。

7. JMP:无条件跳转到指定的代码位置。

8. JZ / JE:当指定的条件成立时,跳转到指定的代码位置(零标志或相等标志)。

9. JNZ / JNE:当指定的条件不成立时,跳转到指定的代码位置(非零标志或不相等标志)。

10. JL / JB:当源操作数小于目的操作数时,跳转到指定的代码位置(小于标志或借位标志)。

11. JG / JA:当源操作数大于目的操作数时,跳转到指定的代码位置(大于标志或进位标志)。

12. CALL:调用一个子程序或函数。

13. RET:返回子程序或函数的调用处。

14. NOP:空操作,用于占位或调整程序代码的位置。

15. HLT:停止运行程序,将CPU置于停机状态。

这里只列举了一些基本的汇编指令,实际上汇编语言有更多更复杂的指令,具体使用哪些指令取决于所使用的汇编语言和目标处理器的指令集架构。

继续列举一些常用的汇编指令:16. AND:将两个操作数进行按位与运算,并将结果存储在目的操作数中。

17. OR:将两个操作数进行按位或运算,并将结果存储在目的操作数中。

18. XOR:将两个操作数进行按位异或运算,并将结果存储在目的操作数中。

19. NOT:对一个操作数的每一位进行取反操作。

20. SHL / SAL:将一个操作数的每一位向左移动指定的位数。

对于无符号数,使用SHL指令;对于带符号数,使用SAL指令。

21. SHR:将一个操作数的每一位向右移动指定的位数,高位空出的位使用0填充。

30个常用汇编命令

30个常用汇编命令

11、BSWAP(字节交换)
写法:bswap reg32 作用:将 reg32 的第 0 与第 3 个字节,第 1 与第 2 个字节进行交换。 示例:设 EAX=12345678h 执行 bswap eax;后,eax=78563412H
12、XLAT(换码)
写法:XLAT; 作用:AL=DS:[bx+AL] 将 DS:BX 所指内存中的由 AL 指定位移处的一个字节赋值给 AL。原来它的主要用途是查表。注意可以给它提供操作
13、ADD(加法)
写法:ADD reg/mem reg/mem/imm 作用:将后面的操作数加到前面的操作数中 注意:两个操作数必须类型匹配,并且不能同时是内存操作数 ADC (带进位加法) 写法:ADC reg/mem, reg/mem/imm ; 作用:dest=dest+src+cf 当 CF=0 时 ADD 与 ADC 的作用是相同的。 示例:实现 64 位数 EDX:EAX 与 ECX:EBX 的加法: Add EAX,EBX; ADC EDX,ECX;
写法:NEG reg/mem 作用:求补就是求相反数,即:dest=0-dest;
20、CMPXCHG(比较交换)
写法:CMPXCHG reg/mem, reg;
作用:AL/AX/EAX-oprd1,如果等于 0,则 oprd1=oprd2,否则,AL/AX/EAX=oprd1; 即:比较 AL/AX/EAX 与第一个操作数,如果相等,则置 ZF=1,并复制第二个操作数给第一个操作数;否则,置 ZF=0, 并复制第一个操作数给 AL/AX/EAX。 说明:CMPXCHG 主要为实现原子操作提供支持 CMPXCHG8B(8 字节比较交换指令) 写法:CMPXCHG8B MEM64; 功能:将 EDX:EAX 中的 64 位数与内存的 64 位数进行比较,如果相等,则置 ZF=1,并存储 ECX:EBX 到 mem64 指定 的内存地址;否则,置 ZF=0,并设置 EDX:EAX 为 mem64 的 8 字节内容

大全语言常用语句一览

大全语言常用语句一览

汇编语言常用语句一览一、数据传输指令──────────────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.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/EAXXADD 先交换再累加. 结果在第一个操作数里XLAT 字节查表转换.── BX 指向一张 256 字节的表的起点, AL 为表的索引值 0-255,即0-FFH; 返回 AL 为查表结果. BX+AL->AL2. 输入输出端口传送指令.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 算术左移.=SHLSHR 逻辑右移.SAR 算术右移.=SHRROL 循环左移.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 程序结束.。

汇编语言标志位(CF)及一些常用指令

汇编语言标志位(CF)及一些常用指令

汇编语言标志位(CF)及一些常用指令英文翻译:carry 进位 flag标志NV: no overflow OV: overflowUP: up DN:downDI: disable interrupt EI: enable interruptPL: plus NG: negativeNZ: no zero ZR: zeroNA: no assistant carry AC: assistant carryPO: parity odd PE: parity even 奇偶校验NC: no carry CY: carry汇编标志位:标志名标志 1 标志 0 OF (溢出标志) OV NVDF (方向标志) UP DNIF (中断标志) DI EISF (符号标志位) PL NGZF (零标志) NZ ZRAF (辅助进位标志位) NA ACPF (奇偶标志) PO PECF (进位标志) NC CYOF 溢出(是/否) OV OVerflow NV Not oVerflowDF 方向(减量/增量) DN DowN UP UPIF 中断(允许/关闭) EI Enable Interrupt DI Disable InterruptSF 符号(负/正) NG NeGative PL PLusZF 零(是/否) ZR ZeRo NZ Not ZeroAF 辅助进位(是/否) AC Auxiliary Carry NA Not AuxiliaryPF 奇偶(是/否) PE Parity Even PO Parity OddCF 进位(是/否) CY CarrY NC Not Carry英文解释:NV: no overflow OV: overflowUP: up DN:downDI: disable interrupt EI: enable interruptPL: plus NG: negativeNZ: no zero ZR: zeroNA: no assistant carry AC: assistant carryPO: parity odd PE: parity evenNC: no carry CY: carry先熟悉一下FLAGS标志位:OV、NV即溢出标志位OF=1或0,表示运算结果有无溢出。

leave汇编指令

leave汇编指令

leave汇编指令汇编语言是一种低级机器语言的抽象表示,用于编写底层的系统软件和驱动程序。

在编程中,我们需要了解一些常见的汇编指令,以便能够对计算机进行底层的控制和操作。

下面是一些常见的汇编指令及其相关参考内容,供您参考。

1. MOV (Move):将数据从一个位置复制到另一个位置。

参考内容:- 操作数:寄存器、内存地址或立即数。

- 语法格式:MOV destination, source- 示例:MOV AX, BX (将BX的值复制到AX)- 参考资料:《x86汇编语言:从实模式到保护模式》2. ADD (Addition):将两个操作数的值相加,并将结果存储在目的操作数中。

参考内容:- 操作数:寄存器、内存地址或立即数。

- 语法格式:ADD destination, source- 示例:ADD AX, BX (将AX和BX的值相加,并将结果存储在AX)- 参考资料:《汇编语言程序设计》3. SUB (Subtraction):从目的操作数减去源操作数,并将结果存储在目的操作数中。

参考内容:- 操作数:寄存器、内存地址或立即数。

- 语法格式:SUB destination, source- 示例:SUB AX, BX (将AX减去BX的值,并将结果存储在AX)- 参考资料:《汇编语言程序设计:基于x86处理器》4. JMP (Jump):用于无条件跳转到程序的其他部分。

参考内容:- 操作数:跳转目标地址。

- 语法格式:JMP destination- 示例:JMP label (跳转到指定的标签位置)- 参考资料:《汇编语言程序设计》5. CMP (Compare):比较两个操作数的值,并根据比较结果设置状态寄存器中的标志位。

参考内容:- 操作数:寄存器、内存地址或立即数。

- 语法格式:CMP operand1, operand2- 示例:CMP AX, BX (比较AX和BX的值)- 参考资料:《x86 Assembly Language Programming with Ubuntu》6. JE (Jump if Equal):如果比较的结果为相等,则跳转到指定的标签位置。

汇编指令大全(有注释)_IT计算机_专业资料

汇编指令大全(有注释)_IT计算机_专业资料汇编指令大全(有注释)为了方便开发者理解和使用汇编语言,本文汇编指令大全提供了对常用指令的详细注释。

汇编语言是一种低级编程语言,直接操作计算机的硬件和寄存器。

掌握汇编语言对于理解计算机底层原理和优化程序性能至关重要。

下面列举了一些常用的汇编指令,以供参考。

1. MOV指令:用于将一个数据从一个位置复制到另一个位置。

可以在寄存器和内存之间传输数据。

示例:MOV AX, 10h ; 将数据10h复制到寄存器AX中MOV [BX], AX ; 将寄存器AX中的数据复制到内存地址BX指向的位置2. ADD指令:用于将两个数据相加,并将结果存储在指定的位置。

示例:ADD AX, BX ; 将寄存器AX和BX中的数据相加,并将结果保存在AX中ADD [BX], CX ; 将内存地址BX指向的数据与寄存器CX中的数据相加,并将结果保存在内存地址BX指向的位置3. SUB指令:用于将两个数据相减,并将结果存储在指定的位置。

示例:SUB AX, BX ; 将寄存器AX的数据减去BX的数据,并将结果保存在AX中SUB [BX], CX ; 将内存地址BX指向的数据减去寄存器CX的数据,并将结果保存在内存地址BX指向的位置4. INC指令:用于将指定位置的数据加1。

示例:INC AX ; 将寄存器AX的数据加1INC [BX] ; 将内存地址BX指向的数据加15. DEC指令:用于将指定位置的数据减1。

示例:DEC AX ; 将寄存器AX的数据减1DEC [BX] ; 将内存地址BX指向的数据减16. JMP指令:用于无条件跳转到指定的代码位置。

示例:JMP label1 ; 无条件跳转到标签label1处JMP 100h ; 无条件跳转到内存地址100h处7. CMP指令:用于比较两个数据的大小,并根据比较结果设置条件码寄存器。

示例:CMP AX, BX ; 比较寄存器AX和BX的数据大小,并设置条件码寄存器CMP [BX], CX ; 比较内存地址BX指向的数据和寄存器CX的数据大小,并设置条件码寄存器8. JE指令:用于在两个数据相等时跳转到指定的代码位置。

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


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)

80c51汇编语言指令

80c51汇编语言指令80C51汇编语言是一种常用的低级程序设计语言,广泛应用于嵌入式系统中。

它是基于Intel 8051系列单片机的指令集架构,具有高效、灵活、可靠的特点。

本文将介绍80C51汇编语言的一些常用指令。

一、MOV指令MOV指令是80C51汇编语言中最基本、最常用的指令之一,用于将数据从一个寄存器或内存位置复制到另一个寄存器或内存位置。

例如,MOV A, #25H表示将立即数25H复制到A寄存器中。

二、ADD指令ADD指令用于执行两个操作数的相加运算,并将结果存储在目标操作数中。

例如,ADD A, R0表示将A寄存器和R0寄存器中的数据相加,并将结果存储在A寄存器中。

三、SUBB指令SUBB指令用于执行两个操作数的减法运算,并将结果存储在目标操作数中。

与ADD指令不同的是,SUBB指令会考虑进位位的值。

例如,SUBB A, R1表示将A寄存器中的数据减去R1寄存器中的数据,并将结果存储在A寄存器中。

四、MUL指令MUL指令用于执行两个操作数的乘法运算,并将结果存储在累加器A和可选的乘法寄存器B中。

例如,MUL AB表示将累加器A和B 中的数据相乘,并将结果存储在A和B中。

五、DIV指令DIV指令用于执行两个操作数的除法运算,并将结果存储在累加器A和可选的余数寄存器B中。

例如,DIV AB表示将累加器A和B 中的数据相除,并将商存储在A中,余数存储在B中。

六、JC、JNC指令JC指令用于在条件跳转时执行跳转操作,如果进位标志位(C)为1,则执行跳转。

JNC指令则相反,只有当进位标志位为0时才执行跳转。

七、JZ、JNZ指令JZ指令用于在条件跳转时执行跳转操作,如果零标志位(Z)为1,则执行跳转。

JNZ指令则相反,只有当零标志位为0时才执行跳转。

八、CJNE指令CJNE指令用于在条件跳转时执行跳转操作,它比较两个操作数的值,并根据比较结果来确定是否执行跳转。

如果两个操作数相等,则不执行跳转;如果不相等,则执行跳转。

汇编指令

一、数据传送指令(七种助记符)MOV (Move)对内部数据寄存器RAM和特殊功能寄存器SFR的数据进行传送MOVX (Move External RAM)对外部存储器的数据传送XCH (Exchange)字节交换XCHD (Exchange Low-order Digit)低半字节交换PUSH (Push onto Stack)入栈POP (Pop from Stack)出栈二、算术运算指令(8种助记符)ADD (Addition)加法ADDC (Add with Carry)带进位加法SUBB (Subtract withBorrow)带借位减法DA (Decimal Adjust)十进制调整INC (Increment)加1DEC (Decrement)减1MUL (Multiplication Multiply)乘法DIV (Division Divide)除法三、逻辑运算类指令(10种助记符)ANL (AND Logic)逻辑与ORL (OR Logic)逻辑或XRL (Exclusive-OR Logic)逻辑异或CLR (Clear)清零CPL (Complement)取反RL (Rotate left)循环左移RLC (RL throught the carry flag)带进位循环左移SWAP (Swap)低4位与高4位交换四、控制转移类指令(17种助记符)ACCALL (Absolute subroutine Call)子程序绝对调用LCALL (Long subrout Call)子程序常调用RET (Return from Interruption)子程序返回RET1 (Return from Interruption)中断返回SJMP (Short jump)短转移AJMP (Absolute jump)绝对转移LJMP (Long Jump)长转移CJNE (Compare Jump if Not Equal)比较不等则转DJNZ (Decrement Jump if Not Zero)减1不为0则转JZ (Jump if zero)结果为0则跳转JNZ (Jump if Not Zero)结果不为0则跳转JC (Jump if Not carry flag is set)有进位则转移JB (Jump if the Bit is set)位为1则转移JNB (Jump if the Bit is Not set)位为0则转移JBC (JB and Clear the bit)位为1则转并清除该位NOP (No Operation)空操作五位操作指令(1种助记符)CLR 位清零SETB (Set Bit)位置1八种常用伪指令 16位地址此指令用在原程序或数据块的开始,指明此语句后面目标程序或数据块存放的起始地址2.【标号】DB 字节数据项表:奖项表中的字节数据存放到从标号开始的连续字节单元中。

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

MOV 指令为双操作数指令,两个操作数中必须有一个是寄存器.MOV DST , SRC // Byte / Word执行操作: dst = src1.目的数可以是通用寄存器, 和段寄存器(但不允许用CS段寄存器).2.立即数不能直接送段寄存器3.不允许在两个存储单元直接传送数据4.不允许在两个段寄存器间直接传送信息PUSH 入栈指令及POP出栈指令: 操作是以“后进先出”的方式进行数据操作.PUSH SRC //Word入栈的操作数除不允许用立即数外,可以为通用寄存器,段寄存器(全部)和存储器.入栈时高位字节先入栈,低位字节后入栈.POP DST //Word出栈操作数除不允许用立即数和CS段寄存器外, 可以为通用寄存器,段寄存器和存储器.执行POP SS指令后,堆栈区在存储区的位置要改变.执行POP SP 指令后,栈顶的位置要改变.XCHG(eXCHanG)交换指令: 将两操作数值交换.XCHG OPR1, OPR2 //Byte/Word执行操作: Tmp=OPR1 OPR1=OPR2 OPR2=Tmp1.必须有一个操作数是在寄存器中2.不能与段寄存器交换数据3.存储器与存储器之间不能交换数据.XLAT(TRANSLATE)换码指令: 把一种代码转换为另一种代码.XLAT (OPR 可选) //Byte执行操作: AL=(BX+AL)指令执行时只使用预先已存入BX中的表格首地址,执行后,AL中内容则是所要转换的代码.LEA(Load Effective Address) 有效地址传送寄存器指令LEA REG , SRC //指令把源操作数SRC的有效地址送到指定的寄存器中.执行操作: REG = EAsrc注: SRC只能是各种寻址方式的存储器操作数,REG只能是16位寄存器MOV BX , OFFSET OPER_ONE 等价于LEA BX , OPER_ONEMOV SP , [BX] //将BX间接寻址的相继的二个存储单元的内容送入SP中LEA SP , [BX] //将BX的内容作为存储器有效地址送入SP中LDS(Load DS with pointer)送寄存器和DS指令LDS REG , SRC //常指定SI寄存器。

执行操作: REG=(SRC), DS=(SRC+2) //将SRC指出的前二个存储单元的内容送入指令中指定的寄存器中,后二个存储单元送入DS段寄存器中。

LES (Load ES with pointer) 指针送寄存器和ES指令LES REG , SRC //常指定DI寄存器执行操作: REG=(SRC) , ES=(SRC+2) //与LDS大致相同,不同之处是将ES代替DS而已.LAHF ( Load AH with Flags ) 标志位送AH指令LAHF //将PSW寄存器中的低8位的状态标志(条件码)送入AH的相应位, SF 送D7位, ZF送D6位......执行操作: AH=PSW的低位字节。

SAHF ( Store AH into Flags ) AH送标志寄存器指令SAHF //将AH寄存器的相应位送到PSW寄存器的低8位的相应位, AH的D7位送SF, D6位送ZF......执行操作: PSW的低位字节=AH。

PUSHF ( PUSH the Flags) 标志进栈指令PUSHF //将标志寄存器的值压入堆栈顶部, 同时栈指针SP值减2执行操作: SP=SP-1,(SP)=PSW的高8位, SP=SP-1, (SP)=PSW的低8位POPF ( POP the Flags ) 标志出栈指令POPF //与PUSHF相反, 从堆栈的顶部弹出两个字节送到PSW寄存器中, 同时堆栈指针值加2执行操作: PSW低8位=(SP), SP=SP+1, PSW高8位=(SP) , SP=SP+1输入输出指令(IN,OUT):只限于使用累加器AX或AL与外部设备的端口传送信息.IN (INput)输入指令:信息从I/O通过累加器传送到CPUIN AL , PORT //直接的字节输入,PORT是外设端口编号(即端口地址),只能取00H ~ 0FFH共256个端口地址.IN AX , PORT //直接的字输入,AX存储连续两个端口地址PORT+1,PORTIN AL , DX //间接的字节输入,端口地址范围可通过DX设置为0000H ~ 0FFFFH 共65536个端口地址IN AX , DX //间接的字输入OUT( OUTput)输出指令:信息从CPU通过累加器传送到I/OOUT PORT , AL //直接的字节输出,PORT规定与IN指令相同.OUT PORT , AXOUT DX , AL //间接的字节输出OUT DX , AXMOV AL,05H OUT 27H, AL //将字节05H传送到地址27H的端口ADD(ADD)加法指令ADD DST , SRC //Byte/Word执行操作: dst=dst+src1.两个存储器操作数不能通过ADD指令直接相加, 即DST 和SRC必须有一个是通用寄存器操作数.2.段寄存器不能作为SRC 和DST.3.影响标志位Auxiliary Crray Flag ,Carry Flag, Overflow Flag, Parity Flag, Sign Flag 和Zero Flag ,如下所示:CF 根据最高有效位是否有进(借)位设置的:有进(借)位时CF=1, 无进(借)位时CF=0.OF 根据操作数的符号及其变化来设置的:若两个操作数的符号相同,而结果的符号与之相反时OF=1, 否则为0.ZF 根据结果来设置:不等于0时ZF=0, 等于0时ZF=1SF 根据结果的最高位来设置:最高位为0, 则SF=0.AF 根据相加时D3是否向D4进(借)位来设置:有进(借)位时AF=1, 无进(借)位时AF=0PF 根据结果的1的个数时否为奇数来设置:1的个数为奇数时PF=0, 为偶数时PF=1ADC( ADd with Carry)带进位加法指令ADC DST , SRC //Byte/Word执行操作: dst=dst+src+CF //与ADD不同之处是还要加上进位标志位的值.INC ( INCrement) 加1指令INC OPR //Byte/Word执行操作: OPR=OPR+11.OPR可以是寄存器和存储器操作数, 但不能是立即数和段寄存器2.影响标志位OF,SF,ZF,PF 和AF,不影响CF.SUB ( SUBtract ) 不带借位的减法指令SUB DST , SRC //Byte/Word执行操作:dst=dst - src1.DST和SRC寻址方式及规定与ADD相同.2.影响全部标志位.(判断标志位参见ADD)SBB ( SuBtract with Borrow) 带借位减法指令SBB DST , SRC //Byte/Word执行操作:dst= dst - src - CFDEC ( DECrement ) 减1指令DEC OPR //Byte/Word执行操作:OPR = OPR - 1 //除CF标志位, 其余标志位都受影响.NEG ( NEGate ) 求补指令NEG OPR执行操作:opr = 0- opr //将操作数按位求反后末位加1.CMP ( CoMPare ) 比较指令CMP OPR1 , OPR2执行操作:OPR1 - OPR2 //与SUB指令一样执行运算, 但不保存结果.比较情况无符号数有符号数A=B ZF=1 ZF=1A>B CF=0 && ZF=0 SF^OF=0 && ZF=0A<B CF=1 && ZF=0 SF^OF=1 && ZF=0A>=B CF=0 || ZF=1 SF^OF=0 || ZF=1A<=B CF=1 || ZF=1 SF^OF=1 || ZF=1MUL ( unsigned MULtiple ) 无符号数乘法指令MUL SRC //Byte/Word .执行操作:Byte => AX= AL *src //字节运算时目的操作数用AL, 乘积放在AX 中Word => DX=AX *src //字运算时目的操作数用AX, DX存放乘积的高位字, AX 放乘积的低位字1.目的数必须是累加器AX 或AL,指令中不需写出2. 源操作数SRC可以是通用寄存器和各种寻址方式的存储器操作数, 而绝对不允许是立即数或段寄存器.IMUL (sIgned MULtiple) 有符号数乘法指令IMUL SRC //与MUL指令相同,但必须是带符号数DIV ( unsigned DIVide) 无符号数除法指令DIV SRC //Byte/Word 其中: SRC的规定同乘法指令MUL执行操作:Byte => AX / src //字节运算时目的操作数在AX中,结果的商在AL 中,余数在AH中Word=> DX,AX /src //字运算时目的操作数在DX高位字和AX低位字中,结果的商在AX中,余数在DX中存储器操作数必须指明数据类型:BYTE PTR src 或WORD PTR srcIDIV (sIgned DIVied) 有符号数除法指令IDIV SRC //Byte/Word 与DIV指令相同,但必须是带符号数CBW (Convert Byte to Word) 字节转换为字指令CBW执行操作: AL中的符号位(D7)扩展到8位AH中,若AL中的D7=0,则AH=00H,若AL中的D7=1,则AH=FFH.CWD (Convert Word to Double word) 字转换为双字指令CWD执行操作: AX中的符号位(D15)扩展到16位DX中,若AX中的D15=0,则DX=0000H,若AX中的D15=1,则DX=FFFFH十进制调整指令当计算机进行计算时,必须先把十进制数转换为二进制数,再进行二进制数运算,最后将结果又转换为十进制数输出.在计算机中,可用4位二进制数表示一位十进制数,这种代码称为BCD ( Binary Coded Decimal ).BCD码又称8421码,在PC机中,BCD码可用压缩的BCD码和非压缩的BCD 码两种格式表示.压缩的BCD码用4位二进制数表示一个十制数,整个十进数形式为一个顺序的以4位为一组的数串.非压缩的BCD码以8位为一组表示一个十进制数,8位中的低4位表示8421的BCD码,而高4位则没有意义.压缩的BCD码调整指令DAA (Decimal Adjust for Addition) 加法的十进制调整指令DAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个压缩的BCD码相加,并把结果存话在AL寄存器中.DAS (Decimal Adjust for Subtraction) 减法的十进制调整指令DAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个压缩的BCD码相减,并氢结果存放在AL寄存器中.非压缩的BCD码调整指令AAA (ASCII Adjust for Addition) 加法的ASCII调整指令AAA执行操作:执行之前必须先执行ADD或ADC指令,加法指令必须把两个非压缩的BCD码相加,并把结果存话在AL寄存器中.AAS (ASCII Adjust for Subtraction) 减法的ASCII调整指令AAS执行操作:执行之前必须先执行SUB或SBB指令,减法指令必须把两个非压缩的BCD码相减,并氢结果存放在AL寄存器中.MOVS ( MOVe String) 串传送指令MOVB //字节串传送DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1MOVW //字串传送DF=0, SI = SI + 2 , DI = DI + 2 ;DF = 1 , SI = SI - 2 , DI = DI - 2执行操作:[DI] = [SI] ,将位于DS段的由SI所指出的存储单元的字节或字传送到位于ES段的由DI 所指出的存储单元,再修改SI和DI, 从而指向下一个元素.在执行该指令之前,必须预置SI和DI的初值,用STD或CLD设置DF值.MOVS DST , SRC //同上,不常用,DST和SRC只是用来用类型检查,并不允许使用其它寻址方式来确定操作数.1.目的串必须在附加段中,即必须是ES:[DI]2.源串允许使用段跨越前缀来修饰,但偏移地址必须是[SI].STOS (STOre into String) 存入串指令STOS DSTSTOSB //存放字节串( DI ) = ALSTOSW //存放字串( DI ) = AX执行品作:把AL或AX中的内容存放由DI指定的附加段的字节或字单元中,并根据DF值修改及数据类型修改DI的内容.1.在执行该指令之前,必须把要存入的数据预先存入AX或AL中,必须预置DI 的初值.2.DI所指向的存储单元只能在附加段中,即必须是ES:[DI]LODS ( LOaD from String ) 从串取指令LODS SRCLODSB //从字节串取AL=(SI)LODSW //从字串取AX= (SI±1) (SI)执行操作:把由SI指定的数据段中字节或字单元的内容送入AL或AX中,并根据DF值及数据类型修改SI的内容.1.在执行该指令之前,要取的数据必须在存储器中预先定义(用DB或DW),必须预置SI的初值.2.源串允许使用段超越前缀来改变数据存储的段区.REP (REPeat)重复操作前缀REP String Primitive //其中:String Primitive可为MOVS,STOS或LODS指令执行操作:使REP前缀后的串指令重复执行,每执行一次CX=CX-1,直至CX=0时退出REP.方向标志设置CLD (CLear Direction flag) 清除方向标志指令CLD执行操作:令DF=0, 其后[SI],[DI]执行增量操作STD (SeT Direction flag) 设置方向标志指令STD执行操作:令DF=1, 其后[SI],[DI]执行减量操作CMPS (CoMPare String) 串比较指令CMPS SRC , DSTCMPSB //字节串比较(SI)-(DI)CMPSW //字串比较(SI+1)(SI) - (DI+1)(DI)执行操作:把由SI指向的数据段中的一个字节或字与由DI指向的附加段中的一个字节或字相减,不保留结果,只根据结果置标志位.SCAS (SCAn String ) 串扫描指令SCAS DSTSCASBSCASW执行操作:把AX或AL的内容与由DI指向的在附加段中的一个字节或字相减,不保留结果,根据结果置标志位.AND, OR , XOR 和 TEST都是双字节操作指令,操作数的寻址方式的规定与算术运算指令相同.NOT是单字节操作指令,不允许使用立即数.逻辑运算均是按位进行操作,真值表如下:AND (位与&) OR ( 位或| ) XOR ( 位异或^ )1 & 1 = 1 1 | 1 = 1 1 ^ 1 = 01 & 0 = 0 1 | 0 = 1 1 ^ 0 = 10 & 1 = 0 0 | 1 = 1 0 ^ 1 = 10 & 0 = 0 0 | 0 = 0 0 ^ 0 = 0A:逻辑运算指令AND (and) 逻辑与指令AND DST , SRC //Byte/Word执行操作:dst = dst & src1.AND指令执行后,将使CF=0,OF=0,AF位无定义,指令执行结果影响SF,ZF和PF标志位.2.AND指令典型用法A:用于屏蔽某些位,即使某些位为0.屏蔽AL的高4位:即将高4位和0000B相与,低4位和1111B相与MOV AL , 39H //AL= 0011 1001B[39H]ADD AL , 0FH // AL= 0000 1001B[09H] 即0011 1001B[39H] & 0000 1111B[0FH] = 0000 1001B[09H]3.AND指令典型用法B:取出某一位的值(见TEST)OR (or) 逻辑或指令OR DST , SRC //Byte/Word执行操作:dst = dst | src1.OR指令执行后,将使CF=0, OF=0, AF位无定义,指令执行结果影响SF, ZF和PF标志位.2.常用于将某些位置1.将AL的第5位置1:MOV , 4AH // =0100 1010B[4AH]OR AL , 10H // AL=0101 1010B[5AH] 即0100 1010B[4AH] | 0001 0000B[10H] =0101 1010B [5AH]XOR (eXclusive OR) 逻辑异或指令XOR DST , SRC //Byte/Word执行操作:dst = dst ^ src1.XOR指令常用于使某个操作数清零,同时使CF=0,清除进位标志.2.XOR指令使某些位维持不变则与'0' 相异或,若要使某些位取反则与'1'相异或.将AL的高4位维持不变,低4位取反:MOV AL, B8H //AL=1011 1000B[B8H]XOR AL, 0FH //AL=1011 0111B[B7H] 即1011 1000B[B8H] ^ 00001111[0FH]=1011 0111B[B7H]测试某一个操作数是否与另一确定操作数相等:XOR AX , 042EHJZ .... //如果AX==042EH, 则ZF=TRUE(1), 执行JZ...NOT (not) 逻辑非指令NOT OPR //Byte/Word执行操作:opr = ~opr // ~ 01100101 [65H] =10011010 [9AH]1.操作数不能使用立即数或段寄存器操作数,可使用通用寄存器和各种方式寻址的存储器操作数.2.NOT指令不影响任何标志位。

相关文档
最新文档