汇编语言常用指令大全解释

合集下载

常用汇编指令

常用汇编指令

常用汇编指令汇编语言是一种低级机器语言的抽象表示,通过使用汇编指令可以编写出与硬件相关的程序。

在计算机科学领域中,汇编指令是非常重要的,是理解计算机底层原理和实现的关键。

本文将介绍一些常用的汇编指令,以帮助读者更好地理解和应用这些指令。

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

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

2. LEA指令:LEA指令用于将内存地址加载到寄存器中。

例如,LEA BX, [SI+10]将[S1+10]的内存地址加载到寄存器BX中。

3. PUSH指令:PUSH指令用于将数据压入栈中。

例如,PUSH AX将AX中的数据压入栈中。

4. POP指令:POP指令用于从栈中弹出数据。

例如,POP BX将栈中的数据弹出到BX中。

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

例如,ADD AX, BX将BX的值加到AX中。

2. SUB指令:SUB指令用于将源操作数的值从目标操作数中减去,并将结果存储在目标操作数中。

例如,SUB AX, BX从AX中减去BX的值。

3. MUL指令:MUL指令用于将源操作数与累加器中的值相乘,并将结果存储在累加器中。

例如,MUL BX将累加器的值与BX相乘。

4. DIV指令:DIV指令用于将累加器的值除以源操作数,并将商存储在累加器中,余数存储在另一个寄存器中。

例如,DIV BX将累加器的值除以BX。

三、逻辑运算指令1. AND指令:AND指令用于对两个操作数进行逻辑与运算,并将结果存储在目标操作数中。

例如,AND AX, BX将AX与BX进行逻辑与操作。

2. OR指令:OR指令用于对两个操作数进行逻辑或运算,并将结果存储在目标操作数中。

例如,OR AX, BX将AX与BX进行逻辑或操作。

3. NOT指令:NOT指令用于对操作数进行逻辑非运算,并将结果存储在目标操作数中。

汇编语言指令功能总结

汇编语言指令功能总结

汇编语言指令功能总结汇编语言是一种低级语言,主要用于编写机器码指令的程序。

在计算机科学领域中,汇编语言是非常重要的,因为它可以直接操作计算机的硬件资源。

本文将对汇编语言中常用的指令功能进行总结。

1. 数据传输指令数据传输指令用于将数据从一个位置传送到另一个位置。

常用的数据传输指令包括MOV(将数据从一个位置复制到另一个位置)、XCHG(交换两个位置的数据)、PUSH(将数据压入堆栈)、POP (将数据从堆栈中弹出)等。

2. 算术运算指令算术运算指令用于执行各种算术运算,例如加法、减法、乘法和除法。

常用的算术运算指令包括ADD(将两个数相加)、SUB(将一个数减去另一个数)、MUL(将两个数相乘)、DIV(将一个数除以另一个数)等。

3. 逻辑运算指令逻辑运算指令用于执行各种逻辑运算,例如与、或、非和异或。

常用的逻辑运算指令包括AND(对两个数执行与运算)、OR(对两个数执行或运算)、NOT(对一个数执行非运算)、XOR(对两个数执行异或运算)等。

4. 控制转移指令控制转移指令用于实现程序的跳转和循环执行。

常用的控制转移指令包括JMP(无条件跳转到指定的地址)、JZ(如果前一个运算结果为零则跳转)、JC(如果前一个运算结果进位则跳转)等。

5. 位操作指令位操作指令用于对数据的位进行操作。

常用的位操作指令包括AND(将两个数的对应位执行与运算)、OR(将两个数的对应位执行或运算)、NOT(取反操作)等。

6. 字符串操作指令字符串操作指令用于对字符串进行操作。

常用的字符串操作指令包括MOVSB(将一个字节从源地址复制到目的地址)、LODSB(将一个字节从源地址加载到AL寄存器)、STOSB(将AL寄存器中的值存储到目的地址)等。

7. 输入输出指令输入输出指令用于与计算机的输入输出设备进行交互。

常用的输入输出指令包括IN(从指定的端口读取数据)、OUT(将数据发送到指定的端口)等。

总结:汇编语言中的指令功能丰富多样,可以实现各种复杂的操作。

汇编语言基本指令详解

汇编语言基本指令详解

汇编语言基本指令详解在计算机科学和计算机工程领域,汇编语言是一种计算机底层编程语言,用于直接控制计算机硬件。

它是机器语言的文本形式,使用符号和助记符来代表机器指令,相对于高级编程语言来说更加底层。

汇编语言基本指令是使用汇编语言进行编程时必不可少的内容。

下面将详细介绍汇编语言中常用的基本指令。

1. 数据传送指令数据传送指令用于在寄存器之间传递数据,常见的指令有MOV、ADD、SUB、MUL等。

MOV指令用于将数据从一个位置传送到另一个位置,格式为MOV 目标操作数, 源操作数。

例如,MOV AX, BX可以将BX的值传送给AX。

ADD指令用于将两个操作数相加,并将结果保存到目标操作数中。

格式为ADD 目标操作数, 源操作数。

例如,ADD AX, BX可以将AX与BX的值相加,并将结果保存在AX中。

SUB指令用于将源操作数的值从目标操作数中减去,并将结果保存到目标操作数中。

格式为SUB 目标操作数, 源操作数。

例如,SUB AX, BX可以将BX的值从AX中减去,并将结果保存在AX中。

MUL指令用于将两个操作数相乘,并将结果保存到目标操作数中。

格式为MUL 目标操作数, 源操作数。

例如,MUL AX, BX可以将AX与BX的值相乘,并将结果保存在AX中。

2. 算术逻辑指令算术逻辑指令用于进行各种算术和逻辑运算,例如加法、减法、乘法、除法、与、或、非等。

ADD指令在前面已经提到,用于将两个操作数相加。

SUB指令在前面已经提到,用于将源操作数的值从目标操作数中减去。

MUL指令在前面已经提到,用于将两个操作数相乘。

DIV指令用于将目标操作数除以源操作数,并将商保存到目标操作数,余数保存在DX中。

格式为DIV 操作数。

例如,DIV BX可以将AX的值除以BX,并将商保存在AX中,余数保存在DX中。

AND指令用于对两个操作数进行按位与运算,并将结果保存到目标操作数中。

格式为AND 目标操作数, 源操作数。

例如,AND AX,BX可以将AX与BX的值按位与,并将结果保存在AX中。

汇编常用指令

汇编常用指令

汇编常用指令汇编语言是计算机底层的一种编程语言,通过编写汇编指令可以直接控制机器的硬件和内存。

在使用汇编语言编写程序时,掌握一些常用指令是非常重要的。

本文将介绍一些常用的汇编指令,帮助读者更好地理解和应用汇编语言。

一、数据传输指令数据传输指令用于在寄存器和内存之间传输数据,包括将数据从内存加载到寄存器中,以及将寄存器中的数据存储到内存中。

常用的数据传输指令包括:1. MOV:将一个操作数的值传送给另一个操作数。

例如,"MOV AX, BX"表示将BX中的值传送给AX寄存器。

2. XCHG:交换两个操作数的值。

例如,"XCHG AX, BX"表示交换AX和BX的值。

3. PUSH:将数据压入栈中。

例如,"PUSH AX"表示将AX的值压入栈中。

4. POP:从栈中弹出数据。

例如,"POP AX"表示将栈顶的值弹出并存储到AX中。

二、算术和逻辑指令算术和逻辑指令用于执行各种算术运算和逻辑操作,包括加法、减法、乘法、除法以及与、或、非等逻辑运算。

常用的算术和逻辑指令包括:1. ADD:将两个操作数相加。

例如,"ADD AX, BX"表示将BX的值加到AX中。

2. SUB:将第一个操作数减去第二个操作数。

例如,"SUB AX, BX"表示用BX的值减去AX,并将结果存储到AX中。

3. MUL:将两个操作数相乘。

例如,"MUL AX, BX"表示将AX乘以BX,并将结果存储到一组寄存器中。

4. DIV:将第一个操作数除以第二个操作数。

例如,"DIV AX, BX"表示用AX的值除以BX,并将商存储到一组寄存器中。

5. AND:对两个操作数执行逻辑与运算。

例如,"AND AX, BX"表示将AX和BX进行逻辑与操作。

6. OR:对两个操作数执行逻辑或运算。

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

汇编指令大全(有注释)_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指令:用于在两个数据相等时跳转到指定的代码位置。

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法

汇编语言各种指令的解释与用法汇编语言是一种低级语言,通过编写汇编程序可以直接操作计算机硬件。

在汇编语言中,各种指令起到了关键的作用。

本文将对常用的汇编语言指令进行解释,并说明其用法。

1. 数据传输指令数据传输指令用于在存储器和寄存器之间传输数据。

常用的数据传输指令包括MOV、PUSH和POP。

- MOV指令用于将数据从一个位置传送到另一个位置。

语法格式为:MOV 目的地,源。

- PUSH指令用于将数据压入栈中。

语法格式为:PUSH 寄存器/内存地址。

- POP指令用于从栈中弹出数据并存放到指定位置。

语法格式为:POP 寄存器/内存地址。

2. 算术运算指令算术运算指令用于进行各种算术运算,如加法、减法、乘法和除法。

常用的算术运算指令有ADD、SUB、MUL和DIV。

- ADD指令实现两个操作数的加法。

语法格式为:ADD 目的操作数,源操作数。

- SUB指令实现两个操作数的减法。

语法格式为:SUB 目的操作数,源操作数。

- MUL指令实现两个操作数的乘法。

语法格式为:MUL 操作数。

- DIV指令实现两个操作数的除法。

语法格式为:DIV 操作数。

3. 分支控制指令分支控制指令用于根据条件来选择不同的执行路径,包括条件跳转和无条件跳转。

常用的分支控制指令有JMP、JZ、JE和JNE。

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

语法格式为:JMP 标号/偏移量。

- JZ指令用于在零标志位为1时跳转到指定地址。

语法格式为:JZ标号/偏移量。

- JE指令用于在相等标志位为1时跳转到指定地址。

语法格式为:JE 标号/偏移量。

- JNE指令用于在不相等标志位为1时跳转到指定地址。

语法格式为:JNE 标号/偏移量。

4. 逻辑运算指令逻辑运算指令用于实现与、或、非、异或等逻辑运算。

常用的逻辑运算指令有AND、OR、NOT和XOR。

- AND指令用于执行按位与运算。

语法格式为:AND 目的操作数,源操作数。

- OR指令用于执行按位或运算。

汇编常用命令总结

汇编常用命令总结

汇编常用命令总结汇编语言是一种底层的计算机语言,通过使用汇编命令对机器指令进行编写和控制。

在学习和使用汇编语言时,掌握常用的汇编命令非常重要。

以下是汇编常用命令的详细总结:1.MOV:将数据从一个位置复制到另一个位置。

例如,将数据从寄存器复制到内存或者将数据从内存复制到寄存器。

2.ADD:将两个数相加,并将结果保存在目标位置。

可以用于寄存器之间的相加或者将寄存器和内存中的数据相加。

3.SUB:从一个数中减去另一个数,并将结果保存在目标位置。

与ADD命令类似,可以用于寄存器之间或者寄存器和内存之间的相减。

4.CMP:比较两个数,一些条件下,设置标志位用于后续的条件分支。

例如,当两个数相等时,设置零标志位。

6.JE、JNE、JG、JL、JA等:基于条件进行转移。

例如,JE用于当ZF标志位被设置为1时,跳转到指定位置,即上一次比较的结果是相等的。

7.AND、OR、XOR:对两个数位进行逻辑运算,并将结果保存在目标位置。

AND用于逻辑与运算,OR用于逻辑或运算,XOR用于逻辑异或运算。

8.NOT:对一个数位取反。

9.PUSH:将数据压入栈顶。

用于将寄存器、内存中的数据或者立即数压入栈中。

10.POP:从栈顶弹出数据。

用于将栈中的数据弹出到寄存器或者内存中。

11.CALL:调用子程序或函数。

将当前的程序状态保存到栈上,并跳转到子程序的入口地址。

12.RET:从子程序中返回。

将存储在栈上的返回地址弹出,恢复程序的现场,并返回到调用者。

13.LOOP:循环指令。

根据计数寄存器的值,重复执行指定的循环代码。

14.MOVZX:将一个无符号字节或无符号字进行零扩展,转换为更大的数据类型。

15.MOVSX:将一个有符号字节或有符号字进行符号扩展,转换为更大的数据类型。

16.LEA:将一个偏移地址加载到寄存器中。

17.INC、DEC:递增或递减寄存器或内存中的值。

18.NOP:空操作。

用于占位或延时。

19.INT:软中断。

汇编语言指令大全及实例解析

汇编语言指令大全及实例解析

汇编语言指令大全及实例解析
汇编语言是一种底层的计算机语言,它直接操作计算机的硬件资源。

在汇编语言中,指令是最基本的操作单位,通过指令可以实现对计算机硬件的控制和操作。

本文将为大家介绍一些常用的汇编语言指令,并通过实例解析它们的具体用法和功能。

1. MOV指令。

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

例如,下面的汇编代码将把寄存器AX中的值移动到寄存器BX中:
MOV BX, AX.
这条指令将AX中的值复制到BX中。

2. ADD指令。

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

例如,下面的汇编代码将把寄存器AX和BX中的值相加,并将结果存储到AX中:
ADD AX, BX.
3. SUB指令。

SUB指令用于将目标操作数减去源操作数,并将结果存储到目标操作数中。

例如,下面的汇编代码将把寄存器AX中的值减去BX 中的值,并将结果存储到AX中:
SUB AX, BX.
4. CMP指令。

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

例如,下面的汇编代码将比较AX和BX中的值:
CMP AX, BX.
以上是一些常用的汇编语言指令及其实例解析。

通过学习和理解这些指令,我们可以更好地理解和掌握汇编语言的编程技巧,从而更好地编写高效的汇编语言程序。

希望本文对大家有所帮助。

  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=1 ADC( 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寄存器中. // 来自 技术BBS论坛// MOVS ( MOVe String) 串传送指令MOVB //字节串传送DF=0, SI = SI + 1 , DI = DI + 1 ;DF = 1 , SI = SI - 1 , DI = DI - 1 MOVW //字串传送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 AL , 4AH // AL=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] ^ 0000 1111[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指令不影响任何标志位。

相关文档
最新文档