
什么是汇编语言汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,也称为符号语言。在汇编语言中,助记符用来代替机器指令的操作码,地址符号或标号用来代替指令或操作数的地址。在不同的设备中,汇编语言对应不同的机器语言指令集,通过汇编过程转换成机器指令。一般来说,特定的汇编语言和特定的机器语言指令集是一一对应的,不能在不同平台之间直接移植。
许多汇编程序为程序开发、汇编控制和辅助调试提供了额外的支持机制。一些汇编语言编程工具经常提供宏,也称为宏汇编器。
汇编语言不像大多数其他编程语言那样在编程中广泛使用。在当今的实际应用中,通常用于底层、硬件操作和高要求的程序优化场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
数据传输指令一、通用数据传输指令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寄存器。









