80 x86汇编语言程序设计.ppt

上传人:创****公 文档编号:1705717 上传时间:2019-10-23 格式:PPT 页数:47 大小:180.50KB
返回 下载 相关 举报
80 x86汇编语言程序设计.ppt_第1页
第1页 / 共47页
80 x86汇编语言程序设计.ppt_第2页
第2页 / 共47页
点击查看更多>>
资源描述

《80 x86汇编语言程序设计.ppt》由会员分享,可在线阅读,更多相关《80 x86汇编语言程序设计.ppt(47页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、2019/10/23,80x86汇编语言程序设计,第3章 80x86指令系统,讲授要点,3种操作数(立即数、寄存器和内存操作数)的形式。 常用指令的格式、功能以及对CF、OF、SF、ZF的影响。 使用指令时容易犯的错误。,2019/10/23,80x86汇编语言程序设计,3.1 指令格式,1指令的书写格式 标号:指令助记符操作数; 注释2操作数的3种形式: 立即操作数:指令的操作数是立即数,并直接出现在指令中。 寄存器操作数:操作数是寄存器的值,指令中使用寄存器名。 内存操作数:操作数是某个内存单元的值,指令中给出有效地址EA,段地址在某个段寄存器中。,2019/10/23,80x86汇编语言

2、程序设计,3.2 操作数的形式,3.2.1 8086指令的操作数形式,1.立即数: 8位或16位立即数。2.寄存器操作数: 8位/16位通用寄存器和段寄存器(除了FS和GS)。3.内存操作数 包括下列几种形式。 Variable或 Variable regdispregbaseindexdispbaseindex,说明: Variable是变量名或变量名 整数表达式。 reg为BX、BP、SI、DI。 disp可以是常量或变量,汇编后为一个常数,若是变量,则取其偏移地址。 base为BX或BP,index为SI或DI。 有效地址为各项之和。如dispbaseindex形式,EA = base

3、+ index + disp。 若使用了BP,则隐含段地址在SS,否则在DS。 当段地址不在隐含的段寄存器时,可使用段超越前缀,形式为:段寄存器名:,2019/10/23,80x86汇编语言程序设计,3.2.2 32位CPU扩展的操作数形式,1.立即数: 32位立即数。2.寄存器操作数: 32位通用寄存器以及FS和GS。3.内存操作数 包括下列几种形式。 base dispbasebaseindex dispbaseindexindex*ndispindex*n baseindex*n dispbaseindex*n,说明: base、index为任一32位通用寄存器(index不能取ESP)

4、。 n为比例因子,取1、2、4或8。 若包含base且base为EBP或ESP,则隐含段地址在SS;否则,隐含段地址在DS。 若在16位CPU上编程,则不能使用这些寻址方式。,2019/10/23,80x86汇编语言程序设计,3.3 指令系统,介绍设计完整程序所需的常用指令,对于其余指令,一部分在后续章节中讲授,一部分自学。 介绍常用指令的格式、功能以及对CF、OF、SF、ZF的影响。,2019/10/23,80x86汇编语言程序设计,为了描述方便,采用下列符号约定:dest 目的操作数src 源操作数oprdn 第n个操作数,如oprd1, oprd2, oprd3= 赋值/ 或者reg8

5、8位通用寄存器AH/AL/BH/BL/CH/CL/DH/DLreg16 16位通用寄存器AX/BX/CX/DX/SI/DI/BP/SPreg32 32位通用寄存器EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESPreg reg8/reg16/reg32seg 段寄存器CS/DS/SS/ES/FS/GSmem8 8位内存操作数mem16 16位内存操作数mem32 32位内存操作数,mem mem8/mem16/mem32 mem64 64位内存操作数imm8 8位立即数imm16 16位立即数imm32 32位立即数imm imm8/imm16/imm32,2019/10/23,8

6、0x86汇编语言程序设计,3.3.1 数据传送指令,1. MOV ( Move ):传送 一般形式:MOVdest, src; dest = src。将源操作数src复制到目的操作数dest,src不变。 语法格式:MOVreg/mem/seg, reg/mem/seg/imm 对标志位的影响:无。 说明: dest与src不能作如下搭配:MOVmem, mem; 错误MOVseg, seg; 错误MOVseg, imm; 错误 dest不能是CS。 dest与src必须类型匹配,即同时是字节、字或双字类型。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,2. X

7、CHG ( Exchange ):交换一般形式:XCHGoprd1, oprd2; 交换oprd1与oprd2的内容语法格式:XCHGreg/mem, reg/mem 对标志位的影响:无。说明:oprd1与oprd2不能作如下搭配:XCHGmem, mem; 错误oprd1与oprd2类型必须匹配。、【例】xchgebx, edxxchgebpeax*4, edx,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,3. LEA (Load Effective Address ) :装入有效地址语法格式:LEAreg16, mem; reg16 = mem的有效地址对标

8、志位的影响:无。【例】设BX = 5678H,EAX = 1,EDX = 2。leasi, 2bx; 执行后,SI = 567AHleasi, 2eaxedx; 执行后,SI = 54. LDS、LES 语法格式: LDS reg16, mem32; reg16 = mem32的低字,DS = mem32的高字 LES reg16, mem32; reg16 = mem32的低字,ES = mem32的高字对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,5. 堆栈操作指令 80x86系统的堆栈具有如下特点:堆栈是在内存的堆栈段中,具有“先进后出

9、”的特点。堆栈只有一个出入口,即当前栈顶。当堆栈为空时,栈顶和栈底指向同一内存单元。堆栈有两个基本操作:PUSH(进栈)和POP(出栈)。PUSH操作使栈顶向低地址方向移动,而POP操作则刚好相反。堆栈操作只能以字或双字为单位。SS:SP指向栈顶。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(1)PUSH与POP:进栈与出栈 语法格式:PUSHreg16/seg/mem16/ reg32/mem32 POPreg16/seg/mem16/ reg32/mem32; 操作数不能是CSPUSHimm; 286新增 功能描述:PUSH指令(16位): SP = SP

10、 - 2SS:SP = 16位操作数POP指令(16位): 16位操作数 = SS:SPSP = SP + 2PUSH指令(32位): SP = SP - 4SS:SP = 32位操作数POP指令(32位): 32位操作数 = SS:SPSP = SP + 4 对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(2)PUSHF与POPF:标志寄存器进栈和出栈 语法格式:PUSHF; FLAGS进栈POPF; 栈顶字出栈到FLAGS对标志位的影响:只有POPF指令会以弹出值设置标志寄存器。 【例】设SP = 100H, EBX = 12345678

11、H, 给出下列指令依次执行后的结果。pushbx; ss:00ffh = 56h, ss:00feh = 78h, sp = 0fehpopax; ax = 5678h, sp = 100hpushebx; ss:00feh = 1234h, ss:00fch = 5678h, sp = 0fchpopax; ax = 5678h, sp = 0fehpopax; ax = 1234h, sp = 100h 【例】交换AX与CX的值。pushaxpushcxpopaxpopcx,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,6. 标志寄存器传送指令(1)LAHF(

12、Load AH from Flags)语法格式:LAHF; AH = FLAGS的低8位对标志位的影响:无。(2)SAHF(Store AH into Flags)语法格式:SAHF; FLAGS的低8位 = AH对标志位的影响:由新装入值确定。,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,符号扩展与零扩展指令对标志位的影响:无。(1)CBW、CWD、CWDE与CDQ语法格式:CBW; AL符号扩展为AX CWD; AX符号扩展为32位数DX:AX CWDE; AX符号扩展为EAX;386新增CDQ; EAX符号扩展为64位数EDX:EAX;386新增【例】设A

13、L = 0FEH,给出依次执行下列指令后的结果。cbw; ax = 0fffehcwd; dx = 0ffffh, ax不变,即dx:ax = -2cwde; eax = 0fffffffeh(-2)cdq; edx = 0ffffffffh, eax不变,即edx:eax = -2,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(2)MOVSX 一般形式:MOVSXdest, src; src符号扩展为dest;386新增 语法格式: MOVSXreg16, reg8/mem8MOVSXreg32, reg8/mem8/reg16/mem16 功能描述:MOVS

14、X是CBW、CWD和CWDE的一般形式,用来将8位数符号扩展为16位或32位数,或者将16位数符号扩展为32位数。 【例】 CBW和CWDE的功能可由MOVSX指令实现。movsxax, al ; 等价于cbw movsx eax, ax ; 等价于cwde movsx eax, al; 等价于顺序执行cbw与cwde,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,(3)MOVZX 一般形式:MOVZXdest, src; src零扩展为dest;386新增 语法格式: MOVZXreg16, reg8/mem8MOVZXreg32, reg8/mem8/reg1

15、6/mem16,2019/10/23,80x86汇编语言程序设计,3.3.1 数据传送指令,8. XLAT(Translate):换码 语法格式:XLAT; AL = DS: BX +AL 功能描述:将DS:BX所指内存区中、由AL指定位移处的一个字节赋给AL。 对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,1. 加法 一般形式:ADDdest, src; dest = dest + srcADCdest, src; dest = dest + src + CF INCdest; dest = dest + 1 语法格式:ADDreg/mem,

16、reg/mem/immADCreg/mem, reg/mem/immINCreg/mem 对标志位的影响: ADD、ADC:按一般规则影响CF、OF、SF和ZF。 INC:不影响CF,其它同ADD。 说明:ADD与ADC的2个操作数必须类型匹配,且不能同时是内存操作数。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,2. 减法 一般形式:SUBdest, src; dest = dest srcSBBdest, src; dest = dest - src CFCMPdest, src; dest src。 与SUB的区别在于,不将减法结果存入dest。DECdest

17、; dest = dest - 1NEGdest; dest = 0 dest 语法格式:SUBreg/mem, reg/mem/imm SBBreg/mem, reg/mem/immCMPreg/mem, reg/mem/immDECreg/memNEGreg/mem 对标志位的影响: SUB、SBB、CMP、NEG:按一般规则影响CF、OF、SF和ZF。CF表示借位。 DEC:不影响CF,其它同SUB。 说明:2个操作数必须类型匹配,且不能同时是内存操作数。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,3. 乘法(1)MUL(Unsigned Multiplic

18、ation):无符号乘法一般形式:MULsrc语法格式:MULreg8/mem8; AX = AL srcMULreg16/mem16; DX:AX = AX srcMULreg32/mem32: EDX:EAX = EAX src对标志位的影响:若8位8位、16位16位或32位32位的结果分别能由8、16或32位容纳(即结果的高一半为0),则CF = OF = 0,否则,CF = OF = 1;其余标志无定义。说明:由于2个n位数的乘积可能需要2n位,因此,若操作数是8位,则结果为16位;同样,16位操作数相乘结果为32位,32位数相乘结果为64位。,2019/10/23,80x86汇编语言

19、程序设计,3.3.2 算术指令,(2)IMUL(Integer Multiplication):带符号乘法一般形式:IMULsrc语法格式:IMULreg8/mem8; AX = AL src。执行带符号乘法,下同。IMULreg16/mem16; DX:AX = AX srcIMULreg32/mem32: EDX:EAX = EAX src对标志位的影响:若结果的高一半为低一半的符号扩展,则CF = OF = 0,否则,CF = OF = 1;其余标志无定义。说明:由于2个n位数的乘积可能需要2n位,因此,若操作数是8位,则结果为16位;同样,16位操作数相乘结果为32位,32位数相乘结果

20、为64位。 【例】对于同一个二进制数,采用 MUL与IMUL执行的结果可能不同。设AL = 0FFH,BL = 1,分别执行下列指令,会得出不同结果。mulbl; ax = 0ffh(255)imulbl; ax = 0ffffh(-1),2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,4. 除法一般形式:DIVsrc; 无符号数除法IDIV src; 带符号数除法语法格式:DIVreg/mem IDIVreg/mem功能描述: src是8位:AXsrc,结果商在AL、余数在AH。 src是16位:DX:AXsrc,结果商在AX、余数在DX。 src是32位:EDX:E

21、AXsrc,结果商在EAX、余数在EDX。对标志位的影响:无定义。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,5.十进制调整指令 (1)压缩BCD码调整指令语法格式:DAA; 调整AL中的和为压缩BCD码DAS; 调整AL中的差为压缩BCD码功能描述: DAA:通常先执行ADD/ADC指令,将2个压缩BCD码相加,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。 DAS:通常先执行SUB/SBB指令,将2个压缩BCD码相减,结果存放在AL中。然后使用该指令将AL调整为压缩BCD码格式。对标志位的影响:OF不确定;CF反映压缩BCD码相加/相减的进位/

22、借位状态;按一般规则影响SF和ZF。说明:若使用DAA/DAS指令,则参加加法/减法运算的操作数应该是压缩BCD码。如果将任意2个二进制数相加/减,然后调整,将得不到正确结果。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,DAA的调整算法如下:if ( AL低4位 9 或 AF = 1) thenAL = AL + 6; AF = 1 ;endifif ( AL高4位 9 或 CF = 1 ) then AL = AL + 60H; CF = 1; endif,DAS的调整算法如下:if ( AL低4位 9 或 AF = 1 ) then AL = AL 6; AF

23、 = 1;endifif ( AL高4位 9 或 CF = 1 ) then AL = AL - 60h; CF = 1;endif,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,(2)非压缩BCD码调整指令语法格式:AAA ; 调整AL中的和为非压缩BCD码; 调整后,AL高4位 = 0,AH = AH + 产生的CFAAS; 调整AL中的差为非压缩BCD码; 调整后,AL高4位 = 0,AH = AH - 产生的CFAAM ; AH = AX div 10,AL = AX mod 10AAD ; AL = AH 10 + AL,AH = 0功能描述: AAA:通常

24、先执行ADD/ADC指令,以AL为目的操作数,将2个非压缩BCD码(高4位无关)相加。然后使用AAA将AL调整为非压缩BCD码格式,且高4位 = 0,同时将调整产生的进位加到AH中。 AAS:通常先执行SUB/SBB指令,以AL为目的操作数,将2个非压缩BCD码(高4位无关)相减。然后使用AAS将AL调整为非压缩BCD码格式,且高4位 = 0,同时将调整产生的借位从AH中减去。 AAM与AAD:略。对标志位的影响: AAA与AAS:CF反映非压缩BCD码加/减的进位/借位;OF、SF和ZF不确定。,2019/10/23,80x86汇编语言程序设计,3.3.2 算术指令,AAA的调整算法如下:i

25、f ( AL低4位 9 或 AF = 1 ) then AL = AL + 6; AH = AH + 1; AF = 1; CF = 1; else AF = 0; CF = 0; endifAL = AL AND 0FH ; AL高4位清0,AAS的调整算法如下:if ( AL低4位 9 或 AF = 1) then AL = AL 6; AH = AH 1; AF = 1; CF = 1; else AF = 0; CF = 0; endifAL = AL AND 0FH ; AL高4位清0,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,1. 逻辑指令一般形式:

26、ANDdest, src; dest = dest and srcORdest, src; dest = dest or srcXORdest, src; dest = dest xor srcNOTdest; dest = not destTESTdest, src; dest and src,执行AND操作但不存储结果到dest语法格式: AND reg/mem, reg/mem/imm OR reg/mem, reg/mem/imm XOR reg/mem, reg/mem/imm NOT reg/mem TEST reg/mem, reg/mem/imm对标志位的影响: NOT:无。

27、其它指令:CF = OF = 0,按一般规则影响SF和ZF。,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,1. 移位指令移位指令包括: SHL(Shift Left):逻辑左移 SAL(Shift Arithmetic Left):算术左移 SHR (Shift Right):逻辑右移 SAR(Shift Arithmetic Right):算术右移其中,SHL与SAL完全相同,只是同一指令的不同助记符而已。一般形式:SHLdest, count; dest左移。其中,count为移位次数(下同) SALdest, count; 同SHL SHR dest, co

28、unt; dest逻辑右移 SAR dest, count; dest算术右移语法格式: SHLreg/mem, 1/CL SHLreg/mem, imm8; 286新增 SAL、SHR与SAR格式同SHL,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,功能描述: SHL/SAL:左移。最高位移出到CF,最低位移入0。 SAR:算术右移。最低位移入CF,最高位不变。 SHR:逻辑右移。最低位移入CF,最高位移入0。对标志位的影响: 若移位后符号位发生了变化,则OF = 1,否则OF = 0;CF为最后移入位;按一般规则影响ZF与SF。然而,若移位次数为0,则不影响标

29、志位;若移位次数 1,则OF无定义。【例】设AX的值为一个2字节非压缩BCD码,将其转换为1字节压缩BCD码存入AL。movcl, 4shlah, cl; ah低4位移到高4位 andal, 0fh ; al高4位清0 or al, ah,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,2.循环移位循环移位指令包括: ROL(Rotate Left):循环左移 ROR(Rotate Right):循环右移 RCL(Rotate through Carry Left):带进位循环左移 RCR(Rotate through Carry Right):带进位循环右移一般形式

30、: ROL dest, count; dest循环左移。其中,count为移位次数(下同) ROR dest, count; dest循环右移 RCLdest, count; dest带CF循环左移 RCRdest, count; dest带CF循环右移语法格式: ROLreg/mem, 1/CLROLreg/mem, imm8 ; 286新增 ROR、RCL、RCR格式同ROL,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,功能描述: ROL:循环左移。最高位移出到CF,并同时移入最低位。 RCL:带进位循环左移。最高位移出到CF,原CF移入最低位。 ROR:循环

31、右移。最低位移出到CF,并同时移入最高位。 RCR:带进位循环右移。最低位移出到CF,原CF移入最高位。对标志位的影响: 若移位后符号位发生了变化,则OF = 1,否则OF = 0;CF为最后移入位;不影响ZF与SF。然而,若移位次数为0,则不影响标志位;若移位次数 1,则OF无定义。【例】将DX:AX中的32位数左移1位。shlax, 1rcldx, 1,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,3. 位测试指令位测试指令包括; BT(Bit Test):位测试 BTS(Bit Test and Set):位测试并置位 BTR(Bit Test and Res

32、et):位测试并复位 BTC(Bit Test and Complement):位测试并取反)这些指令均为386新增指令。一般形式:BTdest, index; CF = dest的第index位,dest不变BTSdest, index; CF = dest的第index位,dest的第index位 = 1BTRdest, index; CF = dest的第index位,dest的第index位 = 0BTCdest, index; CF = dest的第index位,dest的第index位取反,2019/10/23,80x86汇编语言程序设计,3.3.3 位操作指令,语法格式: BTr

33、eg16/mem16, reg16/imm8 BTreg32/mem32, reg32/imm8 BTR、BTS、BTC格式同BT对标志位的影响:影响CF;其余标志无定义。【例】位测试。bteax, 12; CF = eax的第12位btseax, 12; CF = eax的第12位,eax的第12位 = 1btreax, 12; CF = eax的第12位,eax的第12位 = 0btceax, 12; CF = eax的第12位,eax的第12位取反,2019/10/23,80x86汇编语言程序设计,3.3.4 控制转移指令,1. JMP(Jump):无条件转移 一般形式:JMPtarge

34、t; 转移到target指定的目标地址处 根据转移的距离,JMP指令可分为下列两类: 段内转移:在同一代码段内进行,又称近(Near)转移,只要修改IP的值即可实现。 段间转移:可在不同代码段之间进行,又称远(Far)转移,需要同时修改CS和IP的值。 根据目标地址的指定方式,JMP指令又可分为直接转移和间接转移。 所谓直接转移,是指转移的目标地址直接出现在指令中,在程序执行前就已确定。 所谓间接转移,指转移的目标地址是寄存器或内存操作数的值,只有执行到该条指令时才能确定。 因此,JMP指令共有下列4种转移方式: 段内直接转移(Intrasegment/Direct Jump) 段间直接转移(

35、Intersegment/Direct Jump) 段内间接转移(Intrasegment/Indirect Jump) 段间间接转移(Intersegment/Indirect Jump) 在汇编语言程序中,通常使用标号(Label)来指定直接转移的目标地址。,2019/10/23,80x86汇编语言程序设计,3.3.4 控制转移指令,语法格式:JMP label; 若label与该指令位于同一代码段:IP = label的偏移地址;; 若label与该指令不在同一代码段:CS:IP = label的分段地址JMP reg16/mem16; IP = reg16 / mem16JMP mem

36、32; CS = mem32+2,IP = mem32功能描述:JMP label ; 段内/段间直接转移 ; 目标地址:标号label处JMPreg16/mem16 ; 段内间接转移 ; 目标地址:同一代码段,偏移地址 = reg16 / mem16JMPmem32 ; 段间间接转移 ; 目标地址:段地址= mem32高字,偏移地址= mem32低字对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.4 控制转移指令,2. 条件转移指令为简化描述,用Jcc表示所有条件转移指令的助记符。一般形式:Jcc label; 若条件成立,则IP = label的偏移地址。其

37、中,label是标号功能描述:若条件成立,则转移到目标地址label;否则,CPU忽略该条件转移,继续执行下一条指令。对标志位的影响:无。Jcc指令包括下列3类:(1)测试单个标志位的Jcc指令。(2)用于带符号数比较的Jcc指令。常用在CMP指令之后,以判断带符号数的大小。(3)用于无符号数比较的Jcc指令。常用在CMP指令之后,以判断无符号数的大小。,2019/10/23,80x86汇编语言程序设计,3.3.4 控制转移指令,3. JCXZ/JECXZ(Jump if CX/ECX is Zero) 语法格式:JCXZlabel; 若CX = 0,则转移到labelJECXZlabel;

38、若ECX = 0,则转移到label;386新增对标志位的影响:无说明: label相对位移量必须在-128 127之间,所有80x86 CPU都一样。,2019/10/23,80x86汇编语言程序设计,3.3.4 控制转移指令,4. 循环指令循环指令包括: LOOP LOOPE/LOOPZ(Loop while Equal/Zero) LOOPNE/LOOPNZ(Loop while Not Equal/Not Zero)LOOPZ与LOOPE、LOOPNZ与LOOPNE完全等价,只是同一指令的不同助记符。语法格式:LOOPlabel; CX = CX 1,若CX0,则转移到label LO

39、OPZ/LOOPElabel; CX = CX 1,若CX0且ZF=1,则转移到labelLOOPNZ/LOOPNElabel; CX = CX 1,若CX0且ZF=0,则转移到label对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.4 控制转移指令,5. 中断指令INT 本章只简单引入软件中断调用指令INT。详细介绍参见第8章。 语法格式:INTn; 调用中断n的中断服务程序。n 为中断号,取值0 255。 对标志位的影响:不影响CF、OF、SF、ZF。 MS DOS使用中断号21H作为系统调用,为程序员提供了上百种系统服务功能,对这些功能的调用步骤如下:

40、(1)由AH给出功能号。 (2)根据相应功能的要求,设置入口参数。 (3)INT 21H。 (4)分析和使用出口参数。 其中,最常用的是功能号4CH,用来实现程序退出、并返回DOS。使用方法如下: movah, 4ch int 21h,2019/10/23,80x86汇编语言程序设计,3.3.5 标志处理指令,标志处理指令包括CLC(Clear Carry Flag,CF清0)、STC(Set Carry Flag,CF置1)、CMC(Complement Carry Flag,CF取反)、CLD(Clear Direction Flag,DF清0)、STD(Set Direction Fla

41、g,DF置1)、CLI(Clear Interrupt Flag,关中断)和STI(Set Interrupt Flag,开中断)。 语法格式:CLC; CF = 0STC; CF = 1CMC; CF = NOT CFCLD; DF = 0STD; DF = 1CLI; IF = 0STI; IF = 1 对标志位的影响:只影响指定标志。 注意,在程序中应慎重使用CLI指令,错误的使用会导致系统无法正常工作。,2019/10/23,80x86汇编语言程序设计,3.3.6 处理器控制指令,1NOP(No Operation):无操作语法格式:NOP功能描述:NOP指令不做任何事情,只占用1个字

42、节,耗费1个指令执行周期。说明: 程序员经常使用NOP作为占位符(Place Holder),以预留内存空间。当然,可以使用其它指令实现类似功能,如XCHG AX, AX 指令。事实上,NOP与XCHG AX, AX 的机器码完全一样,都是90H。对标志位的影响:无。,2019/10/23,80x86汇编语言程序设计,3.3.6 处理器控制指令,2HLT(Halt):暂停语法格式:HLT功能描述: 使CPU进入暂停状态,这时CPU不执行任何操作,直到系统复位或发生外部中断为止。中断使CPU继续执行HLT后的下一条指令。说明: HLT不能用来终止程序。通常,应用程序不使用该指令。对标志位的影响:

43、无。,2019/10/23,80x86汇编语言程序设计,3.4 容易犯的错误,1操作数类型不匹配例如,将BL的值送AX。错误方法:movax, bl; 类型不匹配正确方法:(1)作为无符号数。moval, blmovah, 0(2)作为带符号数。moval, blcbw,2019/10/23,80x86汇编语言程序设计,3.4 容易犯的错误,2. 凭空构造指令例如:(1)实现AX = AL * 5。错误方法:mul5; MUL的操作数不能是立即数(2)将内存单元(段地址在DS,偏移地址在AX)的一个字节送BL。错误方法:movbl, ax; 内存操作数不能用AX正确方法:movsi, axmovbl, si,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > pptx模板 > 校园应用

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com