汇编指令诠释

合集下载

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):如果比较的结果为相等,则跳转到指定的标签位置。

汇编指令1

汇编指令1

汇编语言指令集一、数据传输指令1. 通用数据传送指令.MOV(MOVe) 传送字或字节.MOVS(MOVe String) 串传送指令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 (eXCHanG)交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数) CMPXCHG比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )XADD先交换再累加.( 结果在第一个操作数里)XLAT(TRANSLATE) 字节查表转换.── 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 (Load Effective Address)装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS (Load DS with pointer)传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES (Load ES with pointer)传送目标指针,把指针内容装入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 (Load AH with Flags)标志寄存器传送,把标志装入AH.SAHF (Store AH into Flgs)标志寄存器传送,把AH内容装入标志寄存器.PUSHF (PUSH the Flags)标志入栈.POPF (POP the Flags)标志出栈.PUSHD 32位标志入栈.POPD 32位标志出栈.二、算术运算指令───────────────────────────────────────ADD 加法.ADC 带进位加法.INC 加1.AAA 加法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAA 加法的十进制调整.压缩的BCD码加法十进制调整指令SUB (SUBtract)减法.SBB (SuVtrach with borrow)带借位减法.DEC (DECrement)减1.NEC (NEGate)求反(以0 减之).CMP (CoMPare)比较.(两操作数作减法,仅修改标志位,不回送结果).AAS 减法的ASCII码调整.非压缩的BCD码加法十进制调整指令DAS 减法的十进制调整.压缩的BCD码减法十进制调整指令MUL (unsinged MULtiple)无符号乘法.IMUL (sIgned MUL tiple)整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM 乘法的ASCII码调整.DIV (unsigned DIVide)无符号除法.IDIV (sIgned DIVide)整数除法.以上两条,结果回送:商回送AL,余数回送AH, (字节运算);或商回送AX,余数回送DX, (字运算).AAD 除法的ASCII码调整.CBW (Count Byte to Word)字节转换为字. (把AL中字节的符号扩展到AH中去)CWD (Count Word to Doble word)字转换为双字. (把AX中的字的符号扩展到DX中去) CWDE 字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ 双字扩展. (把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令───────────────────────────────────────AND 与运算.or 或运算.XOR 异或运算.NOT 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL (SHift logical Letf)逻辑左移.SAL 算术左移.(=SHL)SHR (SHift logical Right)逻辑右移.SAR 算术右移.(=SHR)ROL (Rotate Left )循环左移.ROR (Rotate Right)循环右移.RCL (Rotate Left through Carry)通过进位的循环左移.RCR (Rotate Right through Carry)通过进位的循环右移.以上八种移位指令,其移位次数可达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 (CoMPare String)串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS (SCAn String)串扫描指令.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符. LODSW 传送字. LODSD 传送双字. )STOS (STOre into String)保存串.是LODS的逆过程.REP (REPeat)当CX/ECX<>0时重复.REPE/REPZ (REPeat while Equal/Zero)当ZF=1或比较结果相等,且CX/ECX<>0时重复. REPNE/REPNZ (REPeat while Not Equal/Zero)当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 (SeT Direction flag)置方向标志位.CLD (CLear Direction flag)清方向标志位.STI 置中断允许位.CLI 清中断允许位.六、伪指令───────────────────────────────────────DW 定义字(2字节).PROC 定义过程.ENDP 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS 段结束.END 程序结束.8088 汇编跳转cmp a,b 比较a与bmov a,b 把b的值送给aret 返回主程序nop 无作用,英文“no operation”的简写,意思是“do nothing” call 调用子程序je 或jz 若相等则跳jne或jnz 若不相等则跳jmp 无条件跳jb 若小于则跳ja 若大于则跳jg 若大于则跳jge 若大于等于则跳jl 若小于则跳jle 若小于等于则跳pop 出栈push 压栈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 mPUSHF,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而定。

汇编语言的基本语法

汇编语言的基本语法

汇编语言的基本语法在计算机科学领域中,汇编语言是一种低级语言,用于编写计算机程序。

它直接操作计算机硬件,比高级语言更接近计算机底层。

汇编语言的使用需要对其基本语法有一定的了解。

本文将介绍汇编语言的基本语法,以帮助读者更好地理解和使用这种语言。

一、数据传送指令在汇编语言中,数据传送是最基本的操作之一。

它用于将一个数据从一个位置传送到另一个位置。

数据传送指令由源操作数和目的操作数组成,示例如下:MOV 目的操作数,源操作数其中,目的操作数是要传送数据的目标位置,源操作数是数据的来源位置。

例如,将一个常量值传送给寄存器AX的指令可以写成:MOV AX,1000H这条指令将十六进制常量1000H传送给寄存器AX。

二、算术指令在汇编语言中,算术指令用于对数据进行算术运算。

常见的算术运算包括加法、减法、乘法和除法。

以下是一些常用的算术指令示例:ADD 目的操作数,源操作数 ; 相加SUB 目的操作数,源操作数 ; 相减MUL 目的操作数,源操作数 ; 乘法DIV 目的操作数,源操作数 ; 除法其中,目的操作数是要进行运算的操作数存储位置,源操作数是用于运算的数据来源。

三、跳转指令在程序执行过程中,跳转指令用于改变程序的执行顺序。

它根据条件选择不同的路径执行,或者直接跳转到指定的地址。

常见的跳转指令有以下几种形式:JMP 目标地址 ; 无条件跳转JE 目标地址 ; 相等时跳转JNE 目标地址 ; 不相等时跳转JG 目标地址 ; 大于时跳转JGE 目标地址 ; 大于等于时跳转JL 目标地址 ; 小于时跳转JLE 目标地址 ; 小于等于时跳转这些指令根据前面的条件判断进行跳转。

四、循环指令在汇编语言中,循环指令用于重复执行一段程序。

常见的循环指令有以下两种形式:LOOP 目标地址 ; 循环指令,计数器减1并跳转JCXZ 目标地址 ; 循环指令,计数器为0时跳转这些指令根据指定的条件进行重复执行,直到条件不满足为止。

汇编语言代码例子

汇编语言代码例子

汇编语言代码例子汇编语言代码例子是指使用汇编语言编写的代码,它是机器语言的一种表示形式,主要用于编写计算机的低级程序,而不是用于创建高级程序。

汇编语言的特点是可以迅速地将机器指令转换为机器代码,并且可以编写出非常高效的程序,也就是所谓的“驱动程序”,它们能够直接控制计算机硬件,如CPU、内存和磁盘。

汇编语言代码例子包括:1. MOV 命令。

MOV 是移动指令,是把某个寄存器中的值移动到另一个寄存器中,或者把内存地址中的值移动到寄存器中,如:mov ax, bx 将bx中的值移动到ax中。

2. ADD 命令。

ADD 是加法指令,是把某个寄存器中的值和另一个寄存器中的值相加,或者把内存地址中的值和寄存器中的值相加,如:add ax, bx 将bx中的值和ax中的值相加。

3. SUB 命令。

SUB 是减法指令,是把某个寄存器中的值和另一个寄存器中的值相减,或者把内存地址中的值和寄存器中的值相减,如:sub ax, bx 将bx中的值从ax中减去。

4. MUL 命令。

MUL 是乘法指令,是把某个寄存器中的值和另一个寄存器中的值相乘,或者把内存地址中的值和寄存器中的值相乘,如:mul ax, bx 将bx中的值和ax中的值相乘。

5. DIV 命令。

DIV 是除法指令,是把某个寄存器中的值和另一个寄存器中的值相除,或者把内存地址中的值和寄存器中的值相除,如:div ax, bx 将bx中的值从ax中除去。

6. CMP 命令。

CMP 是比较指令,是把某个寄存器中的值和另一个寄存器中的值进行比较,或者把内存地址中的值和寄存器中的值进行比较,如:cmp ax, bx 将bx中的值和ax中的值进行比较。

7. JMP 命令。

JMP 是跳转指令,是根据条件跳转到指定的指令处执行,如:jmp label 跳转到“label”标记处执行。

8. CALL 命令。

CALL 是调用指令,是把子程序调用到当前程序中,如:call subroutine 调用名为“subroutine”的子程序。

微机原理汇编常用指令

微机原理汇编常用指令

1) ADD 加法指令汇编格式:ADD 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数2) ADC 带进位加法指令汇编格式:ADC 目的操作数,源操作数执行的操作:(目的操作数)←源操作数+目的操作数+CF3) INC 增量指令汇编格式:INC 操作数执行的操作:(操作数)←操作数+1PS:以上三条指令都可作字或字节运算,除INC指令不影响CF标志位外,其他标志位都受指令操作结果的影响。

4) SUB 减法指令汇编格式:SUB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数5) SBB 带借位减法指令汇编格式:SBB 目的操作数,源操作数执行的操作:(目的操作数)←目的操作数-源操作数-CF6) DEC 减量指令汇编格式:DEC 操作数执行的操作:(操作数)←操作数-17) NEG 求补指令汇编格式:NEG 操作数执行的操作:(操作数)←0-操作数8) CMP比较指令汇编格式:CMP 目的操作数,源操作数执行的操作:目的操作数-源操作数。

PS:以上五条指令都可作字或字节运算。

另外,除DEC指令不影响CF标志位外,其他指令都对标志位有影响。

9) MUL 无符号数乘法指令汇编格式:MUL 源操作数执行的操作:假设为字节操作(AX)←(AL)×源操作数假设为字操作(DX), (AX)←(AX)×源操作数10) IMUL 有符号数乘法指令汇编格式:IMUL 源操作数执行的操作:与MUL一样,只是处理的数据是有符号数,而MUL处理的数据是无符号数。

11) DIV 无符号数除法指令汇编格式:DIV 源操作数执行的操作:假设为字节操作:(AL)←(AX)/源操作数的商(AH)←(AX)/源操作数的余数假设为字操作:(AX)←(DX、AX)/源操作数的商(DX)←(DX、AX)/源操作数的余数商和余数均为无符号数。

12) IDIV 有符号数除法指令汇编格式:IDIV 源操作数执行的操作:与DIV一样,只是操作数是有符号数,商和余数均为有符号数,余数符号同被除数符号。

汇编语言指令集

汇编语言指令集

mov‎a,b ‎把b的值送‎给a‎ret ‎返回主程序‎n‎o p 无作‎用,英文“‎n o op‎e rati‎o n”的简‎写,意思是‎“do n‎o thin‎g”(机器‎码90)*‎**机器码‎的含义参看‎上面‎(解释:‎u ltra‎e dit打‎开编辑ex‎e文件时你‎看到90,‎等同于汇编‎语句nop‎)‎c all ‎调用子程序‎j‎e或jz‎若相等则‎跳(机器码‎74 或0‎F84) ‎jn‎e或jnz‎若不相等‎则跳(机器‎码75或0‎F85) ‎jm‎p无条件‎跳(机器码‎E B)‎jb ‎若小于则跳‎j‎a若大于‎则跳‎jg 若‎大于则跳‎jg‎e若大于‎等于则跳‎jl‎若小于则‎跳‎j le 若‎小于等于则‎跳‎p op 出‎栈‎p ush ‎压栈三‎.常见修改‎(机器码)‎7‎4=>75‎74=>‎90 74‎=>EB ‎75‎=>74 ‎75=>9‎0 75=‎>EB‎jnz‎->nop‎7‎5->90‎(相应的机‎器码修改)‎j‎n z ->‎jmp ‎75‎-> E‎B(相应的‎机器码修改‎)‎j nz -‎> jz ‎75‎->74 ‎(正常) ‎0F 85‎-> 0‎F 84(‎特殊情况下‎,有时,相‎应的机器码‎修改)‎四.两种不‎同情况的不‎同修改方法‎1‎.修改为j‎m p‎je(j‎n e,jz‎,jnz)‎=>jm‎p相应的机‎器码EB ‎(出错信息‎向上找到的‎第一个跳转‎)jmp 的‎作用是绝对‎跳,无条件‎跳,从而跳‎过下面的出‎错信息‎xxx‎x xxxx‎x xxx ‎出错信息,‎例如:注册‎码不对,s‎o rry,‎未注册版不‎能...,‎"Func‎t ion ‎N ot A‎v aibl‎e in ‎D emo"‎或‎"Com‎m and ‎N ot A‎v aibl‎e" 或‎"Can'‎t sav‎e in ‎S hare‎w are/‎D emo"‎等(我们‎希望把它跳‎过,不让它‎出现)<。

汇编基本指令查询

1.数据操作MOV AX,BX 数据传送指令,将BX的值移送给AX中.MOVSX AX,BL 符号填充命令,将BL的值移送给AX中,同时用BL的符号位填充AX 的高位数据为符号位MOVZX AX,BL 零填充指令,将BL的值移送给AX中,同时用0填充AX的高位数据位.XCHG AX,BX 将AX与BX的值互换.2.算术运算ADD AX,BX 加法运算AX=AX+BXSUB AX,BX 减法运算AX=AX-BXINC AX 寄存器加 AX=AX+1DEC AX 寄存器减AX=AX-1MUL 乘法运算DIV 除法运算3.比较语句CMP AX,BX AX寄存器减去BX寄存器的内容AND AX,BX AX与BX做"与运算"OR AX,BX AX与BX做"或运算"TEST AX,BX 与AND AX,BX命令相同的效果XOR AX,AX 使AX的内容清零,每个寄存器与自己做异或运算,等于清零动作.1,根据条件标志位的状态判断的转移指令JZ/JE 结果为零/相等则转移。

JNZ/JNE 结果不为零/不相等则转移。

//============================================================== JS 结果为负则转移。

JNS 结果为正则转移。

//============================================================== JO 溢出则转移。

JNO 不溢出则转移。

//============================================================== JP/JPE 奇偶位为1则转移。

JNP/JPO 奇偶位为0则转移。

//============================================================== JC 进位为1则转移。

mulss汇编指令

mulss汇编指令(原创版)目录1.MULSS 汇编指令概述2.MULSS 汇编指令的语法和格式3.MULSS 汇编指令的操作和功能4.MULSS 汇编指令的应用实例5.MULSS 汇编指令的优缺点分析正文一、MULSS 汇编指令概述MULSS 是汇编语言中的一种指令,主要用于执行两个源操作数的乘法操作。

该指令在计算机中具有重要作用,可以实现数据的快速乘积计算。

二、MULSS 汇编指令的语法和格式MULSS 指令的基本语法格式如下:```MULSS src1, src2```其中,src1 和 src2 分别为两个源操作数,即需要相乘的操作数。

三、MULSS 汇编指令的操作和功能MULSS 汇编指令执行的操作是将两个源操作数相乘,并将结果存储在累加器中。

该指令具有如下功能:1.将两个操作数相乘,结果存储在累加器中;2.影响标志位,如进位标志、溢出标志等;3.支持寄存器间接寻址。

四、MULSS 汇编指令的应用实例以下是一个简单的 MULSS 汇编指令应用实例:```DATA SEGMENTnum1 DB 5 ; 操作数 1num2 DB 3 ; 操作数 2DATA ENDSCODE SEGMENTASSUME DS:DATA, CS:CODESTART:MOV AX, DATA ; 将数据段地址加载到寄存器 AXMOV DS, AX ; 将数据段地址存储到数据段寄存器 DS 中MOV AH, 0 ; 将累加器清零MOV AL, [DATA + num1] ; 将操作数 1 加载到累加器低字节 MOV AH, [DATA + num2] ; 将操作数 2 加载到累加器高字节 MULSS AL, AH ; 执行乘法操作; 检查溢出标志,如果溢出则跳转到错误处理标签JC error; 将结果存储到内存中MOV [result], AX; 程序结束MOV AH, 4CHINT 21Herror:; 错误处理标签MOV AH, 9INT 21HCODE ENDSEND START```五、MULSS 汇编指令的优缺点分析1.优点:执行速度快,能够实现两个操作数的快速乘法计算。

汇编语言常用指令大全

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寄存器。

汇编语言常用指令大全

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寄存器。

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

汇编指令大全一、数据传输指令─────────────────────────它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.1. 通用数据传送指令.MOV ----> move 传送字或字节.MOVSX ----> extended move with sign data先符号扩展,再传送.MOVZX ----> extended move with zero data,先零扩展,再传送.PUSH 把字压入堆栈.POP 把字弹出堆栈.PUSHA ----> push all,把AX,CX,DX,BX,SP,BP,SI,DI依次压入堆栈.POPA ----> pop all ,把DI,SI,BP,SP,BX,DX,CX,AX依次弹出堆栈.PUSHAD ----> push all data,把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.POPAD ----> pop all data,把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次弹出堆栈.BSWAP ----> byte swap,交换32位寄存器里字节的顺序XCHG ----> exchange ,交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)CMPXCHG----> exchange and add 比较并交换操作数.( 第二个操作数必须为累加器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 ---->load effective address,装入有效地址.例: LEA DX,string ;把偏移地址存到DX.LDS ----> load DS 传送目标指针,把指针内容装入DS.例: LDS SI,string ;把段地址:偏移地址存到DS:SI.LES ----> load ES 传送目标指针,把指针内容装入ES.例: LES DI,string ;把段地址:偏移地址存到ES:DI.LFS ----> load FS 传送目标指针,把指针内容装入FS.例: LFS DI,string ;把段地址:偏移地址存到FS:DI.LGS ----> load GS 传送目标指针,把指针内容装入GS.例: LGS DI,string ;把段地址:偏移地址存到GS:DI.LSS ----> load SS 传送目标指针,把指针内容装入SS.例: LSS DI,string ;把段地址:偏移地址存到SS:DI.4. 标志传送指令.LAHF ----> load AH from flag 标志寄存器传送,把标志装入AH.SAHF ----> save AH to flag 标志寄存器传送,把AH内容装入标志寄存器.PUSHF ----> push flag 标志入栈.POPF ----> pop flag 标志出栈.PUSHD ----> push dflag , 32位标志入栈.POPD ----> pop dflag, 32位标志出栈.二、算术运算指令─────────────────────────ADD 加法.ADC ----> add with carry; 带进位加法.INC ----> increase 1; 加1.AAA ----> ascii add with adjust ; 加法的ASCII码调整.DAA ----> decimal add with adjust; 加法的十进制调整.SUB ----> substract; 减法.SBB ----> substract with borrow; 带借位减法.DEC ----> decrease 1; 减1.NEG ----> negative; 求反(以0 减之).CMP ----> compare; 比较.(两操作数作减法,仅修改标志位,不回送结果).AAS ----> ascii adjust on substract; 减法的ASCII码调整.DAS ----> decimal adjust on substract; 减法的十进制调整.MUL ----> multiplication; 无符号乘法.IMUL ----> integer multiplication; 整数乘法.以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),AAM ----> ascii adjust on multiplication; 乘法的ASCII码调整.DIV ----> divide; 无符号除法.IDIV ----> integer divide; 整数除法.以上两条,结果回送:商回送AL,余数回送AH(字节运算);或商回送AX,余数回送DX, (字运算).AAD ----> ascii adjust on divide; 除法的ASCII码调整.CBW ----> change byte to word; 字节转换为字.(把AL中字节的符号扩展到AH中去) CWD ----> change word to double word; 字转换为双字.(把AX中的字的符号扩展到DX 中去)CWDE ----> change word to double word with sign to EAX;字转换为双字. (把AX中的字符号扩展到EAX中去)CDQ --->change double word to quadrate word 双字扩展.(把EAX中的字的符号扩展到EDX中去)三、逻辑运算指令─────────────────────────AND OPRD1,OPRD2 与运算.两个全是1才是1,其余全是O.与操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位清零的场合.OR OPRD1,OPRD2 或运算.一个是1就是1,其他全是0.或操作指令主要用在使一个操作数中的若干位维持不变,而另外若干位为1的场合.XOR OPRD1,OPRD2 异或运算.一样的为0,不一样的为1.异或指令主要用在使一个操作数的若干位不变,而另外若干位取反的场合.NOT OPRD 取反.TEST 测试.(两操作数作与运算,仅修改标志位,不回送结果).SHL ----> shift left; 逻辑左移.SAL ----> arithmatic shift left; 算术左移.(=SHL)SHR ----> shift right; 逻辑右移.SAR ----> arithmatic shift right; 算术右移.(=SHR)ROL ----> rotate left; 循环左移.ROR ----> rotate right; 循环右移.RCL ----> rotate left with carry; 通过进位的循环左移.RCR ----> rotate right with carry; 通过进位的循环右移.以上八种移位指令,其移位次数可达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 ----> move string; 串传送.( MOVSB 传送字符. MOVSW 传送字. MOVSD 传送双字. )CMPS ----> compare string; 串比较.( CMPSB 比较字符. CMPSW 比较字. )SCAS ----> scan string; 串扫描.把AL或AX的内容与目标串作比较,比较结果反映在标志位.LODS ----> load string; 装入串.把源串中的元素(字或字节)逐一装入AL或AX中.( LODSB 传送字符.LODSW 传送字. LODSD 传送双字. )STOS ----> store string; 保存串.是LODS的逆过程.REP ----> repeat 当CX/ECX<>0时重复.REPE/REPZ ----> repeat when equal/repeat when zero flag 当ZF=1或比较结果相等,且CX/ECX<>0时重复.REPNE/REPNZ ----> repeat when not equal/repeat when zero flag 当ZF=0或比较结果不相等,且CX/ECX<>0时重复.REPC ----> repeat when carry flag ; 当CF=1且CX/ECX<>0时重复.REPNC ----> repeat when not carry flag ; 当CF=0且CX/ECX<>0时重复.五、程序转移指令─────────────────────────1>无条件转移指令(长转移)JMP ---->jump 无条件转移指令CALL 过程调用RET/RETF---->return/return far;过程返回.2>条件转移指令(短转移,-128到+127的距离内)( 当且仅当(SF XOR OF)=1时,OP1<OP2 ) JA/JNBE 不小于或不等于时转移.JAE/ JNB ---->jump when above or equal/ jump when not below大于或等于转移.JB/JNAE --->jump when below/ jump when not above or equal小于转移.JBE/JNA ---->jump when below or equal/ jump when not above;小于或等于转移.以上四条,测试无符号整数运算的结果(标志C和Z).JG/JNLE ---->jump when greater/ jump when not less or equal/ jump when not less or equal;大于转移.JGE/JNL ---->jump when greater or equal/ jump when not less大于或等于转移.JL/JNGE ---->jump when less/ jump when not greater or equal;小于转移.JLE/JNG ---->jump when less or equal/ jump when not greater;小于或等于转移.以上四条,测试带符号整数运算的结果(标志S,O和Z).JE/JZ ---->jump when equal/ jump when has zero flag等于转移.JNE/JNZ ---->jump when not equal/ jump when not has zero flag;不等于时转移.JC --->jump when has carry flag 有进位时转移.JNC ---->jump when not has carry flag 无进位时转移.JNO ---->jump when not has overflow flag 不溢出时转移.JNP/JPO ---->jump when not has parity flag/ jump when parity flag is odd 奇偶性为奇数时转移JNS ---->jump when not has sign flag 符号位为"0" 时转移.JO ---->jump when has overflow flag 溢出转移.JP/JPE ---->jump when has parity flag / jump when parity flag is even 奇偶性为偶数时转移.JS ---->jump when has sign flag 符号位为"1" 时转移.3>循环控制指令(短转移)LOOP CX不为零时循环.LOOPE/LOOPZ ---->jump when has sign flag/ loop zero CX不为零且标志Z=1时循环. LOOPNE/LOOPNZ ---->loop not equal/ loop not zero; CX不为零且标志Z=0时循环. JCXZ ---->jump when CX is zero CX为零时转移.JECXZ ---->jump when ECX is zero ECX为零时转移.4>中断指令INT ---->interrupt 中断指令INTO ---->overflow interrup 溢出中断IRET ---->interrupt return 中断返回5>处理器控制指令HLT ---->halt 处理器暂停, 直到出现中断或复位信号才继续.WAIT 当芯片引线TEST为高电平时使CPU进入等待状态.ESC ---->escape 转换到外处理器.LOCK 封锁总线.NOP ---->no operation 空操作.STC ---->set carry 置进位标志位.CLC ---->clear carry 清进位标志位.CMC ---->carry make change 进位标志取反.STD ---->set direction 置方向标志位.CLD ---->clear direction 清方向标志位.STI ---->set interrupt 置中断允许位.CLI ---->clear interrupt 清中断允许位.六、伪指令─────────────────────────DW ---->definw word 定义字(2字节).PROC ---->procedure 定义过程.ENDP ---->end of procedure 过程结束.SEGMENT 定义段.ASSUME 建立段寄存器寻址.ENDS ---->end segment 段结束.END 程序结束.。

相关文档
最新文档