什么是汇编语言汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,也称为符号语言。在汇编语言中,助记符用来代替机器指令的操作码,地址符号或标号用来代替指令或操作数的地址。在不同的设备中,汇编语言对应不同的机器语言指令集,通过汇编过程转换成机器指令。一般来说,特定的汇编语言和特定的机器语言指令集是一一对应的,不能在不同平台之间直接移植。

许多汇编程序为程序开发、汇编控制和辅助调试提供了额外的支持机制。一些汇编语言编程工具经常提供宏,也称为宏汇编器。

汇编语言不像大多数其他编程语言那样在编程中广泛使用。在当今的实际应用中,通常用于底层、硬件操作和高要求的程序优化场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。

数据传输指令一、通用数据传输指令1、传输指令MOV(移动)

指令的汇编格式:MOV夏令时,SRC

指令的基本功能:(dst)"-(src)将原操作数(字节或字)传送到目的地址。

指令支持的寻址方式:目标操作数和源操作数不能同时在内存中寻址。这一限制适用于所有指令。

指令执行对标志位的影响:不影响标志位。指令的特殊要求:

目标操作数DST和源操作数SRC不允许同时是段寄存器;目标操作数DST不能是CS,也不能用作立即操作数。

2、推入(推入堆栈)

弹出(从堆栈中弹出)

指令的汇编格式:pushsrc流行夏令时

指令的基本功能:PUSH指令常用来临时存储程序中的一些数据,POP指令可以恢复这些数据。

推SRC(SP)——(SP)-2;(SP)《-(SRC)

POP DST(DST)——((SP));(SP)——(SP)

指令支持的寻址方式:push和pop指令不能使用立即寻址方式。

指令对标志位的影响:PUSH和POP指令都不会影响标志位。

指令的特殊要求:PUSH和POP指令只能是字操作,所以访问字数据后,SP的修改必须是2或-2;POP指令的DST不允许是CS寄存器;

3、交换指令XCHG(交换)

指令的汇编格式:XCHG OPR1,OPR2。

指令的基本功能:(OPR1) 《-》 (OPR2)

指令支持的寻址方式:一个操作数必须在寄存器中,另一个操作数可以在寄存器或内存中。

标志位上的指令阴影:它不影响标志位。

指令的特殊要求:不允许使用段寄存器。

二、累加器专用传输指令4、输入指令IN(输入)

输出指令OUT(输出)

指令的汇编格式:在ac中,port port"=0ffh"

在ac,DX端口”0FFH

输出端口,交流端口“=0FFH”

输出DX,交流端口”0FFH

指令的基本功能:对于8086及其后继型号的微处理器,所有I/O口与CPU的通信都是通过输入输出指令in和out来完成的。IN指令将信息从I/O输入到CPU,OUT指令将信息从CPU输出到I/O端口。因此,in和out指令都应该指示I/O端口的地址。

在ac中,port port=0ffh (al)-(port)传输字节或(ax)-(port 1,port)传输字。

在ac中,DXport“0 ffh(al)”-((dx))传送字节或(ax)”-((dx)1,(dx))传送字。

输出端口,交流端口=0ffh(端口)-(al)传输字节或(端口1,端口)-(ax)传输字。

OUT DX,AC端口0ffh (dx)"-(al)传输字节或((DX) 1,(dx)"-(ax)传输字指令对标志位的影响:不影响标志位。

指令的特殊要求:限于在al或AX与I/O口之间传输信息。AX用于传输16位信息,AL用于传输8位信息,具体取决于外设端口的宽度。

5、转义指令XLAT(翻译)

指令汇编格式:XLAT opr或XLAT。

指令的基本功能:该指令根据AL寄存器提供的位移替换BX指向的字节表中的代码。

艾尔.钟。(阿尔)((DS)*16 (BX)(阿尔))

指令对标志位的影响:不影响标志位。

指令的特殊要求:字节表的长度不能超过256字节,因为8位寄存器al是用来存储位移的。Opr是表的第一个地址,因为opr表示的偏移地址已经存储在BX寄存器中,所以opr在转义指令中是可选的,它会提高程序的可读性。

三、地址传输指令6、 LEA(加载有效地址)

指令的汇编格式:LEA reg,src

指令的基本功能:LEA指令将源操作数的有效地址发送到指定的寄存器,该地址由src选择的内存寻址方式决定。

指令支持的寻址模式:各种内存寻址模式。

指令对标志位的影响:不影响标志位。

指令的特殊要求:指令中的reg不能是段寄存器;

7、指向寄存器和DS LDS的指针(用指针加载DS)

指向寄存器和ES LES的指针(用指针加载ES)

指令的汇编格式:LDS reg,src LES reg,src。

指令的基本功能:LDS和LES指令将确定存储单元位置的偏移地址发送到寄存器,即段地址DS或ES。该偏移地址和段地址(也称为地址指针)由src指定的两个连续字单元提供。

LDS reg,src(reg)《src》(DS)《src 2》

LES reg,src(reg)《src》(ES)《src 2》

指令支持的寻址模式:src必须是内存寻址模式。

指令对标志位的影响:不影响标志位。

指令的特殊要求:指令中的REG不能是段寄存器;

四、标志寄存器传输指令8、标志寄存器的低位字节发送到AH LAHF(用标志加载AH)。

组装说明格式:LAHF

指令的基本功能:(ah)"-(标志)0-7"

指令对标志位的影响:不影响标志位。

9、AH发送标志寄存器低位字节SAHF(将AH存储到标志中)

教学形式:SAHF

指令的基本功能:(flags) 0-7"-(ah)

指令对标志位的影响:标志位的值由加载值决定。

10、标记PUSHF(推动旗帜)

指令的汇编格式:PUSHF

指令的基本功能:(sp)"-(sp)-2 ((sp) 1,(sp)"-(flags) 0-15。

指令对标志位的影响:不影响标志位。

11、标记弹出旗帜。

组装说明格式:POPF

指令的基本功能:(flags) 0-15"-((sp) 1,(sp)) (sp)"-(sp) 2"

指令对标志位的影响:标志位的值由加载值决定。

算术指令一、加法指令12、加法指令ADD(加法)

指令汇编格式:增加dst,src

指令的基本功能:(DST)"-(SRC) (DST)

指令支持的寻址方式:它们的两个操作数不能同时寻址内存。也就是说,除非源操作数是立即操作数,否则源操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:SF=1加法结果为负(符号位为1)。

SF=0的加法结果为正(符号位为0)。

ZF=1的加法结果为零。

ZF=0加法结果不为零。

CF=1最高有效位进位到高位。

CF=0最高有效位没有进位到高位。

OF=1当两个符号相同的数相加(正或负)时,结果的符号相反。

OF=0当添加两个不同的符号数时,或者添加相同的符号数时,结果符号是相同的。

13、进位输入为ADC(加进位)。

指令汇编格式:增加dst,src

指令的基本功能:(dst)"-(src) (dst) cf"

指令支持的寻址方式:它们的两个操作数不能同时寻址内存。也就是说,除非源操作数是立即操作数,否则源操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:SF=1加法结果为负。

SF=0的加法结果为正。

ZF=1的加法结果为零。

ZF=0加法结果不为零。

CF=1最高有效位进位到高位。

CF=0最低有效位相位高位置无进位。

OF=1两个符号相同的数相加,结果的符号与之相反。

OF=0将两个符号相同的数字相加,或者将相同的符号相加,得到的符号是相同的。

14、添加1个指令公司(增量)

组装说明格式:INC opr

指令的基本功能:(OPR)"-(OPR)

指令支持的寻址模式可以使用除立即模式之外的任何寻址模式。

指令对标志位的影响:SF=1加法结果为负。

SF=0的加法结果为正。

ZF=1的加法结果为零。

ZF=0加法结果不为零。

OF=1两个符号相同的数相加,结果的符号与之相反。

OF=0将两个符号相同的数字相加,或者将相同的符号相加,得到的符号是相同的。

二、减法指令15、减法指令SUB (subtract)

指令的汇编格式:SUB dst,src

指令的基本功能:(DST)"-(DST)-(SRC)

指令支持的寻址方式:它们的两个操作数不能同时寻址内存。也就是说,除非源操作数是立即操作数,否则源操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:SF=1减法结果为负(符号位为1)。

SF=0相减的结果为正(符号位为0)。

ZF=1减法的结果是零。

ZF=0相减的结果不为零。

在CF=1的二进制减法运算中,最高有效位方向有借位(当被减数小于被减数时,不足以减法)。

在CF=0的二进制减法运算中,最有意义的一条就是高位没有借位(被减数>=减法,这就够了)。

OF=1两个数的符号相反(正-负,或负-正),结果的符号与减法的符号相同。

当从符号数中减去OF=0时,或者减去不同符号的数目时,得到的符号与减法不同。

16、 SBB带借位减法指令(带借位减法)

指令的汇编格式:SBB夏令时,src

指令的基本功能:(DST)"-(DST)-(SRC)-CF"

指令支持的寻址方式:它们的两个操作数不能同时寻址内存。也就是说,除非源操作数是立即操作数,否则源操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:SF=1减法结果为负(符号位为1)。

SF=0相减的结果为正(符号位为0)。

ZF=1减法的结果是零。

ZF=0相减的结果不为零。

在CF=1的二进制减法运算中,最高有效位方向有借位(当被减数小于被减数时,不足以减法)。

在CF=0的二进制减法运算中,最有意义的一条就是高位没有借位(被减数>=减法,这就够了)。

OF=1两个数的符号相反(正-负,或负-正),结果的符号与减法的符号相同。

当从符号数中减去OF=0时,或者减去不同符号的数目时,得到的符号与减法不同。

17、减量指令DEC(减量)

说明的装配格式:DEC opr

指令的基本功能:(OPR)"-(OPR)-1"

指令支持的寻址模式:可以使用除立即模式以外的任何寻址模式。

指令对标志位的影响:SF=1减法结果为负(符号位为1)。

SF=0相减的结果为正(符号位为0)。

ZF=1减法的结果是零。

ZF=0相减的结果不为零。

OF=1两个数的符号相反(正-负,或负-正),结果的符号与减法的符号相同。

当从符号数中减去OF=0时,或者减去不同符号的数目时,得到的符号与减法不同。

18、比较说明CMP(比较)

指令汇编格式:CMP opr1,opr2。

指令的基本功能:(opr1)-(opr2),其中

ZF=1减法的结果是零。

ZF=0相减的结果不为零。

在CF=1的二进制减法运算中,最高有效位方向有借位(当被减数小于被减数时,不足以减法)。

在CF=0的二进制减法运算中,最有意义的一条就是高位没有借位(被减数>=减法,这就够了)。

OF=1两个数的符号相反(正-负,或负-正),结果的符号与减法的符号相同。

当从符号数中减去OF=0时,或者减去不同符号的数目时,得到的符号与减法不同。

19、补码指令负(求反)

说明的装配格式:NEG opr

指令的基本功能:(OPR)"-(OPR)

指令支持的寻址模式:可以使用除立即模式以外的任何寻址模式。

指令对标志位的影响:求CF=1且不为0的操作数的补码时间。

CF=0为0时,操作数需要补码。

OF=1操作数为-128(字节操作)或-32768(字操作)。

当补码运算的操作数不是-128(字节)或-32768(字)时OF=0三、乘法指令。

20、无符号乘法指令NUL(无符号倍数)

有符号乘法指令

组装说明格式:NUL src IMUL src

指令的基本功能:(ax)"-(al) * (src)"(dx,ax)"-(ax) * (src)

指令支持的寻址模式:src可以使用除立即模式以外的任何寻址模式。

指令对标志位的影响:乘法指令只影响标志位CF和OF,其他条件码位未定义。MUL指令的条件码设置为:

OF=0 0的乘积的上半部分为0(对于字节运算(AH)或字运算(DX))。

=1 ^ 1的CF的乘积的上半部分不是0。

IMUL指令的条件代码设置为:

OF=0 0的乘积的上半部分是下半部分的符号扩展。

CF=11其他情况

指令的特殊要求:MUL和IMUL指令的唯一区别是操作数是无符号的还是有符号的。它们的共同点是指令中只给出源操作数src,目的操作数是隐式的,而且只能是累加器(字操作是AX,字节操作是AL)。隐式乘积寄存器是AX或DX(高阶)和AX(低阶)。

四、符号扩展指令第2节1、扩展到字CBW(将字节转换为字)。

组装说明格式:CBW

指令的基本功能:(AH)=00H当(AL)的最高有效位为0时。

(AH)=当(AL)的最高有效位为1时的FFH。

指令对标志位的影响:不影响标志位。

指令的特殊要求:这是一条没有操作数的指令,用于符号扩展的操作数必须存储在al寄存器AX寄存器中。

22、单词扩展为双单词CWD(将单词转换为双单词)。

组装说明格式:CWD

指令的基本功能:(AX)最高有效位为0时:(DX)=0000H。

当(AX)的最高有效位为1时,(DX)=FFFFH。

指令对标志位的影响:不影响标志位。

指令的特殊要求:这是一条没有操作数的指令,用于符号扩展的操作数必须存储在al寄存器或AX寄存器中。

五、除法指令23、无符号数的除法DIV(无符号除法)有符号数的除法DIV(有符号除法)

指令的汇编格式:DIV src IDIV src

指令的基本功能:文字运算

-(ax)/src (ah)的商和-(ax)/src的剩余字节运算

(ax)是-(dx,AX)/src (dx)和-(dx,AX)/src的余数的商。

指令支持的寻址方式:src作为除数,可以通过除立即数以外的任何寻址方式获得。

指令对标志位的影响:不影响条件码。

指令的特殊要求:除法指令要求字运算时,被除数必须是32位,除数是16位,商和余数是16位;在字节运算中,被除数必须是16位,除数是8位,得到的商和余数是8位。

六、十进制调整说明

逻辑指令一、逻辑运算指令的格式:和dst,src指令的基本功能:(dst)"-(dst)和(src)

指令支持的寻址方式:两个操作数不能同时寻址存储器。也就是说,除非源操作数是立即操作数,否则源操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:CF和OF

SF=1指令的结果为负(符号位为1)。

SF=0指令的结果为正(符号位为0)。

ZF=1指令执行的结果为零。

ZF=0指令执行的结果不为零。

PF=1当结果操作数中1的个数为偶数时设置1。

PF=0当结果操作数中1的个数为奇数时,置0。

25、逻辑或(逻辑或)

指令的汇编格式:或dst,src

指令的基本功能:(DST)"-(DST)或(src)

指令支持的寻址方式:两个操作数不能同时寻址存储器。也就是说,除非源操作数是立即操作数,否则原始操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:执行后CF和OF置零,AF未定义。

SF=1指令的结果为负(符号位为1)。

SF=0指令的结果为正(符号位为0)。

ZF=1指令执行的结果为零。

ZF=0指令执行的结果不为零。

PF=1当结果操作数中1的个数为偶数时设置1。

PF=0当结果操作数中1的个数为奇数时,置0。

26、逻辑非(逻辑非)

指令的汇编格式:非orc

指令的基本功能:(DST)"-(OPR)

指令支持的寻址方式:除立即寻址方式以外的其它寻址方式。

指令对标志位的影响:对标志位没有影响。

27、异或xor(异或)

指令汇编格式:XOR dst,src

指令的基本功能:(DST)"-(DST) XOR (src)

指令支持的寻址方式:两个操作数不能同时寻址存储器。也就是说,除非源操作数是立即操作数,否则原始操作数和目标操作数必须有寄存器寻址方法。

指令对标志位的影响:执行后CF和OF置零,AF未定义。

SF=1指令的结果为负(符号位为1)。

SF=0指令的结果为正(符号位为0)。

ZF=1指令执行的结果为零。

ZF=0指令执行的结果不为零。

PF=1当结果操作数中1的个数为偶数时设置1。

PF=0当结果操作数中1的个数为奇数时,置0。

28、测试说明测试

组装说明格式:测试opr1、opr2。

指令的基本功能:(opr1)和(opr2)

指令支持的寻址方式:两个操作数不能同时寻址内存,即源操作数和目的操作数必须有寄存器寻址方式,除非源操作数是立即数的情况。

指令对标志位的影响:执行后CF和OF置零,AF未定义。

SF=1指令的结果为负(符号位为1)。

SF=0指令的结果为正(符号位为0)。

ZF=1指令执行的结果为零。

ZF=0指令执行的结果不为零。

PF=1当结果操作数中1的个数为偶数时设置1。

PF=0当结果操作数中1的个数为奇数时,置0。

二、移位指令29、逻辑移位SHL(逻辑左移)

指令的汇编格式:SHL dst,cnt

指令的基本功能:SHL指令将cnt倍一点一点地向左移动。每次逐位移动后,最低位补0,最高位移入CF。

指令支持的寻址方式:目标操作数dst可以是除立即数以外的任何寻址方式。当移位数(或位数)cnt=1时,1可直接写入指令;当cnt >1时,cnt必须放入CL寄存器。

指令对标志位的影响:CF=移位值。

OF=1当cnt=1时,最高有效位的值在移动后发生变化。

当cnt=1时,OF=0,移动时最高有效位的值不变。

根据移动后的结果设置SF、ZF和PF。

30、逻辑右移SHR(逻辑右移)

指令汇编格式:SHR dst,cnt

指令的基本功能:SHR指令将cnt倍一点一点向右移动。每次逐位移动后,最高位补0,最低位移入CF。

指令支持的寻址方式:目标操作数dst可以是除立即数以外的任何寻址方式。当移位数(或位数)cnt=1时,1可直接写入指令;当cnt >1时,cnt必须放入CL寄存器。

指令对标志位的影响:CF=移位值。

OF=1当cnt=1时,最高有效位的值在移动后发生变化。

当cnt=1时,OF=0,移动时最高有效位的值不变。

根据移动后的结果设置SF、ZF和PF。

31、算术左移SAL(算术左移)

指令的汇编格式:SAL dst cnt

指令的基本功能:SAL指令将cnt次一位一位向左移动。在每次逐位移动后,最低位被补0,最高位被移入CF.

指令支持的寻址方式:目标操作数dst可以是除立即数以外的任何寻址方式。当移位数(或位数)cnt=1时,1可直接写入指令;当cnt >1时,cnt必须放入CL寄存器。

指令对标志位的影响:CF=移位值。

OF=1当cnt=1时,最高有效位的值在移动后发生变化。

当cnt=1时,OF=0,移动时最高有效位的值不变。

根据移动后的结果设置SF、ZF和PF。

32、算术移位SAR(算术右移)

指令汇编格式:SAR dst,cnt

指令的基本功能:SAR指令将cnt倍一点一点向右移动。每次逐位移动后,最高位由符号位补充,最低位移入CF。

指令支持的寻址方式:目标操作数dst可以是除立即数以外的任何寻址方式。当移位数(或位数)cnt=1时,1可直接写入指令;当cnt >1时,cnt必须放入CL寄存器。

指令对标志位的影响:CF=移位值。

OF=1当cnt=1时,最高有效位的值在移动后发生变化。

当cnt=1时,OF=0,移动时最高有效位的值不变。

根据移动后的结果设置SF、ZF和PF。

33、循环左移ROL(向左旋转)

指令的汇编格式:ROL夏令时,cnt

指令的基本功能:ROL将dst指定的寄存器或内存操作数向左移动cnt指定的次数,同时将操作数的最高有效位移入CF和最低有效位。指令支持的寻址方式:目标操作数dst可以是除立即数以外的任何寻址方式。当移动次数(或位数)cnt=1时,可以直接在指令中写入1;当cnt >1时,cnt必须放入CL寄存器。

指令对标志位的影响:CF=移位值。

OF=1当cnt=1时,最高有效位的值在移动后发生变化。

当cnt=1时,OF=0,移动时最高有效位的值不变。

根据移动后的结果设置SF、ZF和PF。

34、循环右移ROR(向右旋转)

指令的汇编格式:ROR dst,cnt

指令的基本功能:ROR将dst指定的寄存器或内存操作数向右移动cnt指定的次数,同时将操作数的最低有效位移入CF和最高有效位。

指令支持的寻址方式:目标操作数dst可以是除立即数以外的任何寻址方式。当移动次数(或位数)cnt=1时,1可以直接写入指令,当cnt为1时,cnt必须放入CL寄存器。