欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    第11章80x86汇编语言程序设计课件.ppt

    • 资源ID:1824955       资源大小:786KB        全文页数:183页
    • 资源格式: PPT        下载积分:16金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要16金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    第11章80x86汇编语言程序设计课件.ppt

    13:02,1,第11章 80 x86汇编语言程序设计,13:02,2,有效地址(effective address EA) 操作数在段的偏移地址寻址方式 产生有效地址的方法,80 x86的寻址方式有:1、立即寻址2、寄存器寻址3、直接寻址4、寄存器间接寻址5、寄存器相对寻址,6、基址变址寻址7、基址变址相对寻址8、比例变址寻址9、基址比例变址寻址10、相对基址比例变址寻址,310均是与存储器有关的寻址方式,其中,810仅适用于80386及其后继机型,,11.1 80 x86的寻址方式,13:02,3,1、立即寻址 操作数以常量形式直接放在指令中,紧跟在操作码之后 机器码存放形式如下: 代码段 代码段 OP 操作码 OP 操作码 D8 操作数 低位 D16 操作数 高位 D16,立即寻址示例 MOV AH, -40 ; -40AH MOV AX, 34D8H ; 34HAH, D8HAL MOV AX, -40 ; 0FFD8H(-40)AX MOV EAX, 12345678H ;12345678HEAX,我们首先讨论两种与存储器无关的寻址方式:,13:02,4,2、寄存器寻址 操作数存放在某个寄存器中,指令指定寄存器号 指令 寄存器 寄存器号 操作数,寄存器号,操作数,寄存器寻址示例 MOV AH, BL ;(BL)-AH MOV DS, AX ;(AX)-DS MOV SI, AX ;(AX)-SI MOV ECX, EDX ;(EDX)ECX,说明:立即和寄存器寻址方式不需访问存储器即可 得到操作数,速度快,13:02,5,有效地址(EA)的4种组成成分:,位移量(displacement) 存放在指令中的8位、16位或32位的数,是一个地址,有效地址的计算: EA=基址 +(变址*比例因子)+ 位移量,比例因子(scale factor) 其值可为1,2,4或8,386及其后继机型新增加的,变址(index) 存放在变址寄存器中的内容,用于访问数组的某个元素,基址(base) 存放在基址寄存器中的内容,用于指向数组的首地址,下面我们来讨论余下的几种与存储器有关的寻址方式,先介绍几个概念:,13:02,6,16/32位寻址时有效地址四种成分的组成 四种成分 16位寻址 32位寻址 位移量 0, 8, 16位 0, 8, 32位基址寄存器 BX, BP 任何32位通用寄存器(包括ESP)变址寄存器 SI, DI 除ESP以外的32位通用寄存器 比例因子 无 1, 2, 4, 8,13:02,7,访存类型 所用段及寄存器 缺省选择规则 指令 代码段 CS 用于取指 堆栈 堆栈段 SS 所有的堆栈的进栈和出栈 任何用ESP或EBP作为基址 寄存器的访存 目的串 附加数据段 ES 串处理指令的目的串局部数据 数据段 DS 除相对于堆栈以及串处理的 目的串以外的所有数据访问,默认段选择规则,13:02,8,不允许使用段超越前缀的情况:,(1)串操作指令的目的串必须用ES段(2)PUSH指令的目的和POP指令的源必须用SS段(3)程序的指令必须存放在CS段,访问非默认段数据的方法段超越,数据的存放比较灵活,除了放在默认的DS段,还可以存放在别的段,此时访问他们需要使用段超越前缀,可用的段超越前缀有CS:, DS:, ES:, SS:, FS:, GS:。,段超越举例:MOV AX, 10H ;DS段10H处的一个字的数据赋给AX寄存器MOV AX, ES:10H; ES段10H处的一个字的数据赋给AX寄存器,13:02,9,3、直接寻址 操作数地址的偏移量(有效地址)在指令中,物理地址=指定段的段基址*16+偏移量 系统默认,操作数在数据段,段基地址,EA,操作数,+,指令,存储器,MOV AX, 2000H ; 立即寻址MOV AX, 2000H ; 直接寻址,13:02,10,直接寻址示例1 MOV AX, 1000H 物理地址 设(DS)=10A0H 10A00H 代码段 + 1000H OP 11A00H 00H 10H 数据段 11A00H 30H 50H,50H,30H,AX,(本章中图示存储器地址从上到下递增),低地址,13:02,11,直接寻址示例2MOV BL, ES:0100H 物理地址 设(ES)=3000H 30000H (DS)=2000H + 0100H 30100H 30100H 4B 00 BL,4B,在汇编语言指令中,可以用符号地址代替数值地址如:MOV AX, BUFF或 MOV AX, BUFF其中BUFF为存放数据单元的符号地址。,13:02,12,4、寄存器间接寻址 操作数在存储器中,操作数地址的偏移量在寄存器中,基址或变址寄存器,EA,操作数,+,存储器,指令,寄存器,段基地址,寄存器间接寻址示例 MOV AL, BX MOV AX, CS:SI MOV ECX, EDX MOV AH, BP,13:02,13,MOV AH, BPMOV BX, SIMOV CX, SI设 (SS)=1000H, (DS)=2000H , (BP)=0B10H, (SI)=032AH 物理地址 物理地址 10000H 20000H + 0B10H + 032AH 10B10H 2032AH 40H 00H 3EH 46H,40H,AH,10B10H,2032AH,463EH,BX,2032BH,10B11H,SI,032AH,032AH,CX,13:02,14,5、寄存器相对寻址(直接变址寻址) 操作数的有效地址是基址(或变址)寄存器的内容加上指令中指定的位移量,基址或变址寄存器位移量,地址,+,+,操作数,指 令,寄存器,段基地址,存储器,EA,可用于数组元素的访问,13:02,15,寄存器相对寻址示例 MOV AX, 3000HSI (或SI+3000H) MOV AX, COUNTSI ; COUNT是符号地址 (或 MOV AX,COUNT+SI) 若(DS)=3000H, (SI)=2000H,COUNT=3000H 30000H 2000H + 3000H 35000H,1234H,35000H 34H 12H,AX,13:02,16,6、基址变址寻址 操作数的有效地址是一个基址寄存器和一个变址寄存器的内容之和,基址寄存器变址寄存器,变址值,基址值,+,+,操作数,指 令,变址寄存器,基址寄存器,段基地址,存储器,EA,13:02,17,基址变址寻址示例 MOV AX, BX+DI MOV AX, BXDI,若 (DS)=2100H, (BX)=0158H, (DI)=10A5H,物理地址 21000H 0158H+ 10A5H 221FDH,221FDH 34H 12H,1234H,AX,13:02,18,7、基址变址相对寻址 操作数的有效地址是一个基址寄存器的内容、一个变址寄存器的内容及位移量之和,基址寄存器变址寄存器位移量,变址值,基址值,+,+,操作数,指 令,变址寄存器,基址寄存器,段基地址,存储器,EA,13:02,19,相对基址变址寻址示例 MOV AX, MASKBX+SI;MASK是符号地址 若 (DS)=3000H, (BX)=2000H, (SI)=1000H, MASK=0250H 物理地址 30000H 2000H 1000H + 0250H 33250H 33250H 20H 43H,4320H,AX,13:02,20,8、比例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子及位移量之和,变址寄存器 比例因子位移量,下标,*,+,+,操作数,存储器,段基地址,变址寄存器,变址值,指 令,EA,13:02,21,比例变址寻址示例 MOV EAX, COUNTESI*4,元素0,12000H,元素1,元素2,元素3,+1+2+3+4,+12,EAX,存储器,EA=ESI*4COUNT设(ESI)=3,(DS)=1000HCOUNT=2000H,13:02,22,9、基址比例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子加基址寄存器的内容之和,基址寄存器变址寄存器比例因子,下标,基址值,*,+,+,操作数,指 令,变址寄存器,基址寄存器,变址值,段基地址,存储器,EA,基址比例变址寻址示例 MOV ECX, EBX+ESI*8,13:02,23,10、相对基址比例变址寻址 操作数的有效地址是变址寄存器的内容乘以指令中指定的比例因子加基址寄存器的内容、再加位移量之和,基址寄存器变址寄存器比例因子位移量,下标,基址值,*,+,+,操作数,指 令,变址寄存器,基址寄存器,变址值,段基地址,存储器,EA,相对基址比例变址寻址示例 MOV EAX, TABLEEBX+EDI*4,13:02,24,11.2 80 x86的指令系统,数据传送指令算术运算指令逻辑运算与移位指令串操作指令控制转移指令处理器控制指令,80 x86指令的一般汇编语言格式:标号:指令助记符目的操作数,源操作数;注释 其中, 表示可选项;,13:02,25,11.2.1数据传送指令,通用数据传送指令地址传送指令标志寄存器传送指令 输入输出指令类型转换指令,13:02,26,PUSHA/PUSHAD (push all registers) 所有寄存器进栈POPA/POPAD (pop all registers) 所有寄存器出栈,1、通用数据传送指令,MOV(move) 传送MOVSX(move with sigh-extend) 带符号扩展传送MOVZX(move with zero-extend) 带零扩展传送,PUSH(push onto the stack) 进栈POP(pop from the stack) 出栈,XCHG(exchange) 交换XLAT(translate) 换码,13:02,27,MOV 传送指令格式:MOV DST, SRC操作:DST-(SRC) 即把源操作数的内容送入目的操作数说明:1)可以进行8位、16位或32位数据的传送 2)SRC可为立即数、寄存器、存储器操作数 3)DST可为寄存器、存储器操作数 4)该指令不影响任何状态标志位,存储器,段寄存器CS DS SS ES,立即数,通用寄存器AX BX CX DXBP SP SI DI,13:02,28,MOV指令示例1,MOV EAX, EBX+ECX*4 ;存储器操作数MOV AX, ARRAYSI ;传送到寄存器,MOV AX, 0B00H ;立即数传送到寄存器MOV CL, 10000000B,MOV VALUE, 100H ;立即数传送到存储单元MOV ES:BX, 4BH,MOV BX, CX ;寄存器内容传送到存储器MOV BPDIBUFF, AX,MOV AL, BL ;寄存器之间传送MOV BP, SI,13:02,29,MOV指令示例2 MOV AX, ARRAYSI设(DS)=3000H, (SI)=2000H, ARRAY=8000H 物理地址 30000H 2000H + 8000H 3A000H 3A000H 45H 0BH,0B45H,AX,13:02,30,MOV指令注意事项:,(1)两个操作数长度必须一致 MOV AL, BX ;不合法例外:源是16进制立即数,小于目的操作数时,高位按0扩展,源是10进制立即数,小于目的操作数时,高位按符号位扩展 MOV AX, 0D8H 执行后,(AX)=00D8H MOV AX, -40 执行后,(AX)=FFD8H,(2)不允许用立即数为段寄存器赋值 例:MOV ES, 10A0H ;不合法,13:02,31,(3)不允许两个操作数均是存储器操作数 MOV X, Y ;不合法 可以通过一个寄存器传送: MOV AX, Y MOV X, AX,(4)不允许两个操作数均为段寄存器 MOV ES, DS ;不合法,(5)不允许CS、IP和立即数做目标操作数 MOV CS, AX ;不合法 MOV 100H, AX ;不合法 MOV IP, BX ;不合法,13:02,32,MOVSX 带符号扩展传送指令格式:MOVSX DST, SRC操作:DST-符号扩展(SRC),MOVZX 带零扩展传送指令格式:MOVSX DST, SRC操作:DST-零扩展(SRC),说明: 1) 源操作数是8位或16位寄存器或存储器的内容 2) 目的操作数必须是16位或32位寄存器,13:02,33,MOVSX指令示例 MOVSX EAX, CL 设(CL)=0ABH, 执行后 (EAX)=0FFFFFFABH 负号扩展 若(CL)=57H, 执行后 (EAX)=00000057H 正号扩展,MOVZX指令示例 MOVZX EAX, DATA 设(DATA)=87ADH,执行后 (EAX)=000087ADH 0扩展,13:02,34,PUSH 压栈指令格式:PUSH SRC操作: 16位指令: SP-(SP)-2 (SP)+1,(SP)-(SRC) 32位指令: ESP(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC),说明:1) 源操作数可以是寄存器或存储器操作数 2) 必须以字或双字为单位操作 3) 32位指令允许SRC是16位或32位立即数,也容许是32位寄存器和存储器操作数,举例:PUSH AX PUSH DATBXSI PUSH 1234H PUSH 87654321H PUSH EAX,13:02,35,压栈指令示例 PUSH AX 执行前 执行后 AX AX 25H 524FEH 31H 524FFH SP 52500H SP 52500H,3125H,3125H,低地址,低地址,进栈方向,13:02,36,POP 出栈指令格式:POP DST操作: 16位指令: DST-(SP)+1,(SP) SP-(SP)+2 32位指令: DST(ESP)+3,(ESP)+2,(ESP)+1,(ESP) (ESP)(ESP)+4,举例:POP AX POP DATBXSI POP DS POP ECX,13:02,37,出栈指令示例 POP BX 执行前 执行后 BX BX 75C1H 低地址 低地址 SP 6Bh 51000H 6Bh 51000H 48h 1H 48h 1H 9Ah 2H SP 9Ah 2H 28h 3H 28h 3H,48h 6Bh,出栈方向,13:02,38,PUSHA/PUSHAD 所有寄存器进栈格式:PUSHA PUSHAD,PUSHAD: (386及其后继机型) 32位通用寄存器依次进栈,次序为:EAX,ECX, EDX,EBX,指令执行前的ESP,EBP,ESI,EDI 指令执行后 ESP(ESP)-32 仍指向栈顶,PUSHA: (286及其后继机型) 16位通用寄存器依次进栈,次序为: AX,CX , DX,BX,指令执行前的SP,BP,SI,DI 指令执行后 SP(SP)-16 仍指向栈顶,操作:,13:02,39,PUSHAD指令示例,(SDI) -32(ESI) -28(EBP) -24(ESP)原 -20(EBX) -16(EDX) -12(ECX) -8(EAX) -4 0,(ESP)原,(ESP),执行前,执行后,13:02,40,POPA/POPAD 所有寄存器出栈格式:POPA POPAD,POPAD: (386及其后继机型) 32位通用寄存器依次出栈,次序为:EDI,ESI, EBP,ESP,EBX,EDX,ECX , EAX 指令执行后 ESP(ESP) +32 仍指向栈顶,POPA: (286及其后继机型) 16位通用寄存器依次出栈,次序为: DI,SI,BP,SP,BX,DX,CX , AX 指令执行后 SP(SP) +16 仍指向栈顶,操作:,13:02,41,XCHG 交换指令格式:XCHG OPR1, OPR2操作:(OPR1) (OPR2),说明: 1)操作数不允许为段寄存器 2)两个操作数长度必须相同 3)本指令不影响状态标志位,如: XCHG EAX, EBX ;寄存器之间交换 XCHG BX, BP+DI ;寄存器与存储器之间交换 XCHG SI, DX,13:02,42,交换指令示例 XCHG DX, DATABP设(SS)=5000H, (BP)=0400H, DATA=1800H 物理地址=5000H*16+0400H+1800H=51C00H 执行前 执行后 DX DX 37CDH 51C00H 42H 51C00H 1 6DH 1,CDH37H,6D42H,13:02,43,XLAT查表指令(换码指令)格式:XLAT TABLE 或 XLAT操作:AL-(BX)+(AL) 或 AL(EBX)+(AL) 将AL中的当前内容转换为表中某一种代码。执行前一定要将表的首址(TABLE)赋给BX(或EBX)寄存器,将代码在表中距首址的偏移放在AL寄存器中。XLAT指令示例 TABLE 30H LEA BX, TABLE +1 31H ;表首址给BX +2 32H MOV AL, 4 +3 33H ;待转换内容到AL +4 34H XLAT +5 35H +6 36H +7 37H,34H,AL,13:02,44,LDS (load DS with pointer) 指针送寄存器和DS LES (load ES with pointer) 指针送寄存器和ES LFS (load FS with pointer) 指针送寄存器和FS LGS (load GS with pointer) 指针送寄存器和GS LSS (load SS with pointer) 指针送寄存器和SS,2、地址传送指令,LEA (load effective address) 有效地址送寄存器,13:02,45,LEA指令示例 LEA SI, BX LEA DI, BUFFER 设(DS)=2000H, (BX)=1234H ; 将变量BUFFER的 执行后 ; 地址送到DI,而 SI ;不是将BUFFER变 21234H 78H ; 量的值送DI 5 56H,1234H,1234H,BX,LEA 装载有效地址指令格式: LEA DST, SRC操作:DST-SRC的有效地址EA说明:SRC必须是存储器操作数,而DST则必须是一个16位或32位的通用寄存器(AX.DI.),13:02,46,LDS 装载数据段指针指令 格式:LDS DST, SRC 操作:DST(SRC) DS(SRC+2)或 DS(SRC+4),LES 、LFS、LGS、LSS 格式:同LDS,说明: 1) 源操作数必须是存储器操作数 2) 目的操作数必须是寄存器 3) 完成一个逻辑地址的传送,该逻辑地址须用伪指令预先定义在当前数据段中,13:02,47,7659H,2000H,H 45HH D6HH 00HH 50H,D645H,5000H,DS,DI,DI,DS,LDS指令示例 LDS DI, BX设(DS)=2000H, (BX)=1000H,执行前,执行后,再比如:LDS BX, BUFFSI LDS DI, BUFF,13:02,48,LEA与LDS的区别LEA SI, BUFFLDS DI, BUFF,BUFF(21000H) 45H +1 D6H +2 00H +3 50H,设(DS)=2000HEABUFF=1000H执行后:SI=1000HDI=D645HDS=5000H,思考: LDS DI, BX是合法指令吗?,13:02,49,LAHF(load AH with flags) 标志送AH SAHF(store AH into flags) AH送标志寄存器,3、标志寄存器传送指令,PUSHF/PUSHFD(push the flags or eflags) 标志进栈POPF/POPFD(pop the flags or eflags) 标志出栈,13:02,50,LAHF 标志寄存器送AH指令格式:LAHF 操作:AH-FLAGS 7-0 即将标志寄存器的最低8位送AH中,SAHF 送标志寄存器指令格式:SAHF操作:FLAGS 7-0-(AH) 即将AH寄存器内容送FLAGS低8位,说明:1) 无操作数 2) FLAGS中含若干标志位,但LAHF指令本身不影响标志位,13:02,51,PUSHF/PUSHFD 标志进栈指令格式:PUSHF PUSHFD操作:PUSHF:SP-(SP)-2 (SP)+1,(SP)-(FLAGS) PUSHFD: (ESP)(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP) (EFLAGS AND 0FCFFFFH) (清除VM和RF位),说明:无操作数,13:02,52,POPF/POPFD 标志出栈指令格式:POPF POPFD操作:POPF:FLAGS-(SP)+1,(SP) SP-(SP)+2POPFD: EFLAGS(ESP)+3,(ESP)+2,(ESP)+1,(ESP) ESP(ESP)+4,13:02,53,4、输入输出指令,IN(input) 输入 OUT(output) 输出,13:02,54,IN 输入指令 (从接口电路的端口输入数据),说明:用Port指明8位端口地址时,地址范围为00H-FFH 以DX间接给出端口地址时,最大地址为0FFFFH,操作: AL/AX/EAX-(Port) 从外设读入字节或字或双字数据 AL/AX/EAX-(DX) 以DX内容为端口地址,读入数据,格式2:IN AL, DX (字节) IN AX, DX(字) IN EAX, DX (双字),格式1:IN AL, Port(字节) (Port是0-FFH的立即数) IN AX, Port(字) (Port是0-FFH的立即数) IN EAX, Port(双字) (Port是0-FFH的立即数),13:02,55,OUT 输出指令 (向接口电路的端口输出数据)格式1:OUT Port, AL (字节) OUT Port, AX(字) OUT Port, EAX(双字)格式2:OUT DX, AL (字节) OUT DX, AX(字) OUT DX, EAX(双字)操作: (Port)-(AL)/(AX)/(EAX) 传送数据到Port端口 (DX)-(AL)/(AX)/(EAX) 传送数据到DX指出的端口说明:用Port指明8位端口地址时,地址范围为00H-FFH 以DX间接给出端口地址时,最大地址为0FFFFH,13:02,56,IN指令示例 IN AL, 20H ;从端口20H读入字节数据-AL IN AX, 48H ;从端口48H读入字数据-AX MOV DX, 3FCH IN EAX, DX ;从端口03FCH读入双字数-EAX,OUT指令示例 OUT 32H, AX ;传送字数据到32H端口 MOV DX,400H MOV AL, 86H OUT DX, AL ;传送字节数据到DX指出的端口,13:02,57,CBW(convert byte to word) 字节转换为字CWD/CWDE(convert word to double word) 字转换为双字CDQ(convert double to quad) 双字转换为4字BSWAP(byte swap) 字节交换,5、类型转换指令,13:02,58,CBW 字节转换为字格式:CBW 操作:扩展AL中的符号至AH中, 将8位数扩展成等效的16位数,CWD/CWDE 字转换为双字格式:CWD操作:扩展AX中的符号至DX中,将16位数扩展成 等效的32位数格式:CWDE操作:AX的内容符号扩展到EAX,说明: 用于在符号数除之前,形成双倍长度的被除数,13:02,59,CDQ 双字转换为4字格式:CDQ操作:EAX的内容符号扩展到EDX,形成EDX:EAX 中的4字,BSWAP 字节交换格式:BSWAP r32操作:使32位寄存器的字节次序变反 (1、4字节交换,2、3字节交换),BSWAP指令示例 BSWAP EAX 执行前 (EAX)=11223344H 执行后 (EAX)=44332211H,13:02,60,数据传送指令小结1、数据传送指令不影响标志位(除SAHF)2、除XCHG指令外,都是从源到目的的单向传送3、注意MOV指令与 LEA指令的区别 例 MOV SI, BX LEA SI, BX 78H 21234H 78H 21234H 56H 5H 56H 5H BX,5678H,1234H,1234H,1234H,BX,BX,SI,SI,13:02,61,4、堆栈的存取在16位指令中必须以字为单位, 在32位指令中必须以双字为单位,5、8086 不允许PUSH指令使用立即数寻址方式 如:PUSH 12 ;8086中不合法 但286及其后继机型中允许,6、POP 指令不允许使用立即数寻址方式, 不允许使用CS寄存器 例: POP 12 ;不合法 POP CS ;不合法,13:02,62,7、段寄存器只能在MOV、PUSH、POP 指令中作为操作数出现 例:MOV ES, AX PUSH CS POP DS 但下列指令不合法: MOV CS, reg POP CS,8、指令有多种格式,一般都遵循以下规则:双操作数指令中不允许两个操作数均为存储器操作数单操作数指令不允许立即寻址方式目的操作数不允许使用立即寻址方式,13:02,63,加法指令 ADD ADC INC XADD,除法指令 DIV IDIV,乘法指令 MUL IMUL,减法指令 SUB SBB DEC NEG CMP CMPXCHG CMPXCHG8B,11.2.2 算术运算指令,13:02,64,算术运算指令可对4种类型操作数运算:,1、无符号二进数 字节可表示范围:0-255 字可表示范围:0-65535,2、有符号二进数 字节可表示范围:-128-+127 字可表示范围:-32768-+32767,3、非压缩十进数 一个字节存放一位十进数的BCD码, 高4位为0000。 例:十进数57表示为: 00000101 00000111 (0507H),4、压缩十进数 一个字节存放两位十进数的 BCD码 例:十进数57表示为: 01010111 (57H),13:02,65,以8位数加法为例讨论溢出1、无符号数,有符号数都不溢出 无符号数 有符号数 04H 4 4 +0BH + 11 + 11 0FH 15 15 CF=0 OF=02、无符号数溢出,有符号数不溢出 无符号数 有符号数 07H 7 7 +FBH +251 +(-5) 1 02H 258 +2 (255) CF=1 OF=0,13:02,66,3、有符号数溢出,无符号数不溢出 无符号数 有符号数 09H 9 9 +7CH +124 +124 85H 133 133 (127) CF=0 OF=14、无符号数,有符号数都溢出 无符号数 有符号数 87H 135 -121 +F5H +245 +( -11) 1 7CH 380 -132 (255) (-128) CF=1 OF=1,结论:OF表示有符号数的溢出 CF表示无符号数的溢出(进位),13:02,67,ADD 常规加指令格式:ADD DST, SRC操作:DST-(DST)+(SRC),指令构成方式:ADD reg,imme ;寄存器与立即数相加ADD reg,reg ;寄存器之间ADD reg,mem ;寄存器加存储器操作数ADD mem,imme ;存储器加立即数ADD mem,reg ;存储器操作数加寄存器 说明:运行结果对CF、SF、OF、PF、ZF、AF都会影响,13:02,68,ADD指令示例1 ADD DX, BX 设(DX)=4652H, (BX)=0F0F0H,4652H+ F0F0H1 3742H,0100 0110 0101 0010+ 1111 0000 1111 00001 0011 0111 0100 0010,进位,进位,执行后 (DX)=3742H ZF=0 结果不为0 SF=0 结果为正 CF=1 有进位 OF=0 不溢出,13:02,69,ADD指令示例2 ADD WORD PTRBX, 9F76H 设(DS)=2000H, (BX)=1000H 执行前: 21000 88H A988H A9H + 9F76H 1 48FEH 执行后: 21000 FEH CF=1 有进位 48H OF=1 溢出 ZF=0 结果不为0 SF=0 结果为正,进位,13:02,70,ADC 带进位加指令格式:ADC DST, SRC操作:DST-(DST)+(SRC)+(CF)说明:该指令除了多一个进位标志外,同ADD指令。 常用于多字节运算,INC 增1指令格式:INC DST操作:DST-(DST)+1说明: 1)DST可以是寄存器或存储器操作数 2)DST不允许是立即数 3)运行结果对SF、OF、PF、ZF、AF都会影响,但不影响CF,13:02,71,ADC指令示例双字加法 设目的操作数存放在DX和AX中,DX存放高位字 源操作数存放在BX和CX中,BX存放高位字 CF ADC ADD,DX,AX,BX,CX,DX,AX,+,指令序列为: ADD AX, CX ;低位加 ADC DX, BX ;高位加,13:02,72,执行前(DX)=0418H, (AX)=0F365H (BX)=1005H, (CX)=0E024H 0418H DX 0F365H AX 1005H BX + 0E024H CX + 1 CF 141EH DX 1D389H AX CF=1,13:02,73,INC指令示例,LEA BX, ARRAYMOV AL, BX INC BX,ARRAY a1 +1 a2 +2 a3 +3 a4,MOV BX, 0MOV AL, ARRAYBX INC BX,8088中,执行INC BYTE PTRBX指令(指令已在指令队列中)需要 个总线周期。,2,13:02,74,XADD 交换并相加指令格式: XADD DST, SRC操作:TEMP(SRC)+(DST) SRC(DST) DST(TEMP)说明:1)仅用于486及其后继机型, 2)源操作数只能是寄存器,XADD指令示例 XADD BL, DL 如执行前 (BL)=12H, (DL)=02H 则执行后 (BL)=14H, (DL)=12H,13:02,75,SUB 常规减指令格式:SUB DST, SRC操作:DST-(DST)-(SRC),指令构成如下: SUB reg, imme ;寄存器减立即数 SUB reg, reg ;寄存器之间相减 SUB reg, mem ;寄存器减存储器操作数 SUB mem, imme ;存储器操作数减立即数 SUB mem, reg ;存储器操作数减寄存器说明:运行结果对CF、SF、OF、PF、ZF、AF都会影响,13:02,76,SUB指令示例 SUB BX, CX 执行前: (BX)=9543H (CX)=28A7H 9543H - 28A7H 6C9CH,执行后: (BX)=6C9CH CF=0 OF=1 ZF=0 SF=0,13:02,77,SBB带进位减指令格式:SBB DST, SRC操作:DST-(DST)-(SRC)-(CF)说明:该指令除了多一个进位标志外,同SUB指令。 常用于多字节运算SBB指令示例双字减法 SUB AX, CX ;低16位减 SBB DX, BX ;高16位减 7456H AX 0012H DX - 9428H CX 0010H BX 1 E11EH - 1H CF 0001H,CF=1,13:02,78,DEC 减1指令格式:DEC DST操作:DST-(DST)-1说明:用法同INC指令,NEG 求补指令格式:NEG DST操作:DST - -(DST) 说明:1)-(DST)表示操作数按位求反后末位加1。 2)执行时,用零减去操作数,13:02,79,NEG指令示例1 NEG DX 执行前: (DX)=6780H 0000 - 6780 1 9880 执行后: (DX)=9880H CF=1,NEG指令示例2 NEG AL ;AL求补 ADD AL, 100 ;(AL)+100-AL 实现的功能为: 100-(AL),借位,13:02,80,CMP 比较指令格式 :CMP DST, SRC操作:(DST)-(SRC)说明:,1、两个操作数相减,但结果不回送,2、影响标志位的值,下一指令常是条件转移指令,3、必须区分无符号数比较与有符号数比较 如 比较 11111111B 与 00000000B 无符号数比较: 255 0 有符号数比较: -1 0,4、比较两数是否相等,根据标志位ZF判断 若相等,则ZF=1;否则ZF=0,13:02,81,比较两数的大小 CMP DST, SRC1、无符号数比较 DSTSRC DSTSRCDST=80H SRC=58H DST=58H SRC=80H 80H 58H -58H -80H 28H D8H CF=0 够减 CF=1 不够减,结论:用标志位CF判断无符号数的大小 CF=0,则 DST SRC CF=1,则 DST SRC,13:02,82,2、有符号数比较(1)DST0, SRC0 (必不溢出,OF=0) DST=5AH, SRC=46H DST=46H, SRC=5AH 5AH 46H - 46H - 5AH 14H ECH SF=0, DSTSRC SF=1, DST0, SRCSRC) DST=10H SRC=95H DST=62H SRC=95H 10H 62H - 95H - 95H 7BH CDH SF=0, OF=0 SF=1, OF=1,13:02,83,(3)DST0 (必有DSTSRC SF=1, DSTSRC,结论:用标志位SF和OF判断有符号数的大小 SF、OF值相同,则 DSTSRC SF、OF值不同,则 DSTSRC,13:02,84,CMP指令示例1 CMP AL, BL 令 (AL)= -64 (BL)=10 - 64 - 10 - 74 OF=0 SF=1 结论: (DST)(SRC),CMP指令示例2 CMP CL, 100H 令 (CL)= -100 (DS:100)= -110 -100 - (-110) 10 OF=0 SF=0 结论: (DST)(SRC),13:02,85,CMPXCHG 比较并交换指令格式:CMPXCHG DST, SRC操作:累加器AC与DST比较 如 (AC)=(DST) 则 ZF1,DST(SRC) 否则 ZF0,AC(DST)说明:1) 只用于486及其后继机型 2) 累加器可为AL、AX或EAX寄存器 3) SRC只能用寄存器,DST可用寄存器或存储器寻址方式,13:02,86,CMPXCHG指令示例 CMPXCHG CX, DX,(2)若执行前(AX)=2500H, (CX)=2300H, (DX)=2400H 则执行后将 CX 复制到AX: (AX)=2300H, ZF=0,(1)若 执行前(AX)=2300H,(CX)=2300H, (DX)=2400H 则 执行后 将 DX 复制到 CX: (CX)=2400H, ZF=1,13:02,87,CMPXCHG8B 比较并交换8字节指令格式:CMPXCHG8B DST操作:EDX, EAX与DST比较 如 (EDX, EAX)=(DST) 则 ZF1,DST(ECX, EBX) 否则 ZF0,EDX, EAX(DST)说明:1) 只用于Pentium及其后继机型 2) DST是64位存储器操作数,13:02,88,MUL 无符号数乘指令 格式: MUL SRCIMUL 有符号数乘指令 格式: IMUL SRC操作: 字节数乘, AX-(AL)(SRC)byte 字数据乘, DX:AX-(AX)(SRC)wor

    注意事项

    本文(第11章80x86汇编语言程序设计课件.ppt)为本站会员(小飞机)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开