80486微处理器的指令系统_第1页
80486微处理器的指令系统_第2页
80486微处理器的指令系统_第3页
80486微处理器的指令系统_第4页
80486微处理器的指令系统_第5页
已阅读5页,还剩37页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、第1页 电气工程学院电气工程学院 3.2 80486微处理器的指令系统微处理器的指令系统 一般性地介绍各类指令一般性地介绍各类指令 实验中实验中要用到的指令要用到的指令 重点介绍:重点介绍: 3.2.1 数据传送指令数据传送指令 *使用频率最最重要、最基本的一类指令使用频率最最重要、最基本的一类指令 *寻址方式应用得最多的一类指令寻址方式应用得最多的一类指令 *除除POPF指令之外,均不影响标志位指令之外,均不影响标志位 (1 1)通用数据传送指令:)通用数据传送指令: 1) 基本传送指令(基本传送指令(MOV) 格式:格式:MOV 目标操作数,源操作数目标操作数,源操作数 例:例:MOVMO

2、V BYTE PTR BXBYTE PTR BX,55H 55H ;55H55H送给送给BXBX间址的字节型间址的字节型 MOV BX MOV BX,55H 55H ;0055H0055H送给送给BXBX间址的字型间址的字型 BX默认默认DS段段 默认字型操作数默认字型操作数 DS BX 第2页 电气工程学院电气工程学院 FIRST SECOND AL 注意:注意:*1 源操作数可以是源操作数可以是 8、16、32。源、目的操作数必须。源、目的操作数必须匹配匹配 *2 不能向段寄存器写入立即数,对段寄存器的初始化应借用不能向段寄存器写入立即数,对段寄存器的初始化应借用 寄存器过度,如:寄存器过

3、度,如: MOV AX,DATA ;DATA是数据段的段名(符号地址),是数据段的段名(符号地址), ;由;由系统分配给系统分配给DATA段一个具体的段基址段一个具体的段基址 MOV DS,AX;段基址送入;段基址送入DS *3 没有任意两个存储单元之间的数据传送没有任意两个存储单元之间的数据传送 MOV AL,FIRST MOV SECOND,AL 非非 法法 检验指令是否正确的唯一标准是看指令系统是否包含该指令检验指令是否正确的唯一标准是看指令系统是否包含该指令 第3页 电气工程学院电气工程学院 存存 储储 器器 通用寄存器通用寄存器 EAX,EBX,ECX,EDX, ESP,ESI,ED

4、I,EBP 立立 即即 数数 段寄存器段寄存器 SS,DS,ES,FS,GS CS MOV指令允许的传送关系指令允许的传送关系 2) 符号扩展符号扩展 MOVSX sign extension 功能:功能:P56 格式:格式: MOVSX OP1, OP2 reg:register 寄存器操作数;寄存器操作数; men:memory 存储器操作数存储器操作数 操作后的操作后的 结果总是结果总是 存放在寄存放在寄 存器中存器中 Reg16 reg8 Reg16 mem8 Reg32 reg8 Reg32 mem8 Reg32 reg16 Reg32 mem16 *因为是扩展,因为是扩展,OP2的

5、位数总是小于的位数总是小于OP1 第4页 电气工程学院电气工程学院 *扩展的是符号位,所以最高位保持不变。例:扩展的是符号位,所以最高位保持不变。例: 7FH 007FH 0B 90H FF90H .1B 3)零扩展)零扩展 MOVZX zero extension 功能:功能:P57 格式:格式: MOVSX OP1, OP2 Reg16 reg8 Reg16 mem8 Reg32 reg8 Reg32 mem8 Reg32 reg16 Reg32 mem16 *零扩展,在数据前面扩展零扩展,在数据前面扩展0,例:,例: 7FH 007FH 90H 0090H 设:设: AL=80H BL=

6、68H CX=1234H DH=98H MOVSX AX,AL AX=FF80H MOVSX SI, BL SI=0068H 第5页 电气工程学院电气工程学院 MOVSX EDI,CX EDI=00001234H MOVSX BX, DH BX=FF98H MOVZX BX,DH BX=0098H MOVSX和和MOVZX这两条指令常被用于作除法时对被除数位数的扩展这两条指令常被用于作除法时对被除数位数的扩展。 4)交换指令)交换指令 XCHG (exchange) 格式:格式: XCHG OP1,OP2 reg reg mem reg reg mem MOV XCHG 目的目的 源源 5)有

7、效地址传送指令)有效地址传送指令 EA传送指令传送指令 装入有效地址装入有效地址LEA (Load Effective Address) 功能:将内存单元的有效地址(而不是该单元的内容)传送给寄存器功能:将内存单元的有效地址(而不是该单元的内容)传送给寄存器 格式:格式:LEA REG,OP 例例1: LEA BX,BUF ;把;把BUF单元的单元的有效地址有效地址送送BX 例例2: MOV AX,DS:3000H 第6页 电气工程学院电气工程学院 操作码操作码 00 30 AH AL 设设 DS=5000H MOV AX,DS:3000H LEA BX,DS:3000H LEA BX,BUF

8、 与指令等效与指令等效 BX=3000H 50000H 53000H 53001H 代码段代码段 数据段数据段 MOV BX,OFFSET BUF ;把;把BUF单元的单元的有效地址有效地址送送BX (OFFSET是汇编语言提供的运算符是汇编语言提供的运算符/算子,在汇编源程序时,完成有效地址计算,算子,在汇编源程序时,完成有效地址计算, 执行该指令时完成地址赋值)执行该指令时完成地址赋值) 例:例:LEA ECX,EDX 4*ESI DOLLAR 设:设:EDX=30H,ESI=32H,DOLLAR=7580H 计算有效地址:计算有效地址: EA=30H+4*32H+7580H=7678H

9、执行完该指令后,有效地址执行完该指令后,有效地址7678H送入送入ECX 第7页 电气工程学院电气工程学院 指针传送指令指针传送指令DS、ES、FS、GS、SS的的装入装入指令指令 格式:格式: LDS REG,OP LES REG,OP LFS REG,OP LGS. REG,OP LSS REG,OP 段寄存器段寄存器 隐含的目的寄存器隐含的目的寄存器指定通用寄存器指定通用寄存器 功能:把功能:把OP所在单元的内容的高所在单元的内容的高16位送隐含的目的(段)寄存器位送隐含的目的(段)寄存器 低位送指定通用寄存器低位送指定通用寄存器 例:例:SEGPT DD 12345678H ;DD伪指

10、令,定义双字。伪指令,定义双字。 ;该伪指令执行后,内存;该伪指令执行后,内存 LDS SI,SEGPT 指令执行后指令执行后 DS=1234H SI=5678H. SEGPT+0 SEGPT+1 SEGPT+2 SEGPT+3 78 56 34 12 第8页 电气工程学院电气工程学院 DF伪指令,长字定伪指令,长字定 义(义(6字节)字节) 例如:例如:设数据段有 设数据段有 XYZ1 DF1234567890ABH XYZ2 DD56781234H 如此时如此时DS已指向数据段:已指向数据段: LESEBX,XYZ1 ;ES=1234H,EBX=567890ABH LDSSI,XYZ2 ;

11、DS=5678H,SI=1234H ABAB 9090 : 3434 1212 34 12 78 56 XYZ1 XYZ2 6)查表转换指令)查表转换指令 XLAT 格式:格式: XLAT 无操作数(无操作数(TRANSLATE ) X 功能:功能: 完成一个字节的查表转换。完成一个字节的查表转换。 说明:取出说明:取出DS:BX+AL单元中的一个字节送单元中的一个字节送AL; 或取出或取出DS:EBX+AL 单元中的一个字节送单元中的一个字节送AL。 本指令的操作数是隐含的本指令的操作数是隐含的 执行该指令前的准备工作:执行该指令前的准备工作: 1)在数据段建立一张表;)在数据段建立一张表;

12、 2)该表的首地址存放在)该表的首地址存放在BX(或(或EBX)中,)中,AL存放表内偏移地址存放表内偏移地址 第9页 电气工程学院电气工程学院 在后面的接口实验中,有一个驱动在后面的接口实验中,有一个驱动8段数码显示器的操作实验。段数码显示器的操作实验。 可以显示可以显示0F等等 16符号以及部分字母符号以及部分字母 . 如果给出如果给出3,则,则 从表中首址从表中首址+3处处 取出相应字形码取出相应字形码 B0H; : 如果是如果是F则从表则从表 中首址中首址+F处取出处取出 相应字形码相应字形码8EH 字形码字形码 C0H F9H A4H B0H : : 8EH : BX =TABLE

13、AL=3 0 1 2 3 : : F : +0 +1 +2 +3 : : +F : 求任意给出一个求任意给出一个16进制数,均可转换为进制数,均可转换为8段字型码,以便在显示器上显示。段字型码,以便在显示器上显示。 *把把16进制数转化为字形码,才可能正确显示数码进制数转化为字形码,才可能正确显示数码 *用查表完成数码和字形码之间的转换用查表完成数码和字形码之间的转换 *首先在内存中建立一个字型码表,表的首地址送首先在内存中建立一个字型码表,表的首地址送BX; 待转换数字作为表内偏移地址,送待转换数字作为表内偏移地址,送AL;执行;执行XLAT;执行完毕,;执行完毕,AL字形码。字形码。 第1

14、0页 电气工程学院电气工程学院 各种需要通过查表方式完成码制转换的操作,均可用各种需要通过查表方式完成码制转换的操作,均可用XLAT指令指令 很方便地完成。很方便地完成。 例:设从端口例:设从端口35H输入一位输入一位16进制数进制数3H,要求把它转换为字形码,要求把它转换为字形码, 并输出给该端口。并输出给该端口。 MOV BX,TABLE ;DS段内偏移地址段内偏移地址TABLE送入送入BX IN AL,35H ;从端口;从端口35H读入读入3H送入送入AL XLAT ;从;从DS:BX+AL单元取字形码送单元取字形码送AL ;即:从;即:从DS:TABLE+3取取B0H送送AL OUT

15、35H,AL ;把;把B0H送送35H端口端口 又例:利用查表转换功能实现一位十六进制数与又例:利用查表转换功能实现一位十六进制数与ASCIIASCII码的转换。码的转换。 DATADATA SEGMENT SEGMENT TABTAB DB 0123456789ABCDEF DB 0123456789ABCDEF ;建立;建立SACIISACII码表(码表(30H.46H30H.46H) NUMNUM DB DB ?(如?(如9 9) ;定义;定义0 0F F中的任一数中的任一数 DATA ENDSDATA ENDS 代码段设置如下指令,可查出与代码段设置如下指令,可查出与NUM单元中的数相

16、对应的单元中的数相对应的ASCII编码:编码: MOV AXMOV AX,DATA DATA ;取数据段的段基址;取数据段的段基址 MOV DSMOV DS,AX AX ;装填段基址;装填段基址 MOV BXMOV BX,OFFSET TAB OFFSET TAB ;取;取TABTAB的段内偏移地址(表的首地址)的段内偏移地址(表的首地址) MOV ALMOV AL,NUM NUM ;取表内偏移地址;取表内偏移地址 XLAT XLAT ;完成转换,转换结果;完成转换,转换结果AL=39HAL=39H 第11页 电气工程学院电气工程学院 30H 31H 32H : 39H : 46H : 0 1

17、 2 : 9 : F : +0 +1 +2 : +9 : +F : BX =TAB AL=9 DS 7)字节交换指令)字节交换指令 BSWAP (Byte SWAP) 格式:格式: BSWAP reg32 功能:把功能:把32位通用寄存器的双字以字节为单位,按规定次序交换位通用寄存器的双字以字节为单位,按规定次序交换 例例 MOV EBX,77886655H BSWAP EBX 结果:结果:EBX=55668877 8)标志寄存器传送指令)标志寄存器传送指令LAHF/SAHF 格式:格式:LAHF 或或 SAHF 把把EFLAGS(P35 图图2.6 标志寄存器)的低字节送标志寄存器)的低字节

18、送AH 把把AH 的内容送的内容送EFLAGS 的低字节的低字节 第12页 电气工程学院电气工程学院 (2)堆栈操作指令)堆栈操作指令 1)压栈指令)压栈指令 PUSH 源源OP ;把源;把源OP的内容压入当前栈顶的内容压入当前栈顶 功能:功能:P59 2)弹栈指令弹栈指令 POP 目目标标OP;把当前栈顶的内容送入目把当前栈顶的内容送入目标标OP 功能:功能:P59 例例 SS=0200H ,SP=0012H, AX=1234H,CX=5678H 执行以下执行以下3条指令后,堆栈区的变化?条指令后,堆栈区的变化? PUSH AX PUSH CX POP BX 注意:注意:“LIFO”和和“只

19、只 对当前栈顶进行操作对当前栈顶进行操作” 78 56 34 12 56 78 执行执行POP BX BX 执行执行PUSH CX 后的新栈顶后的新栈顶 SP : 78 56 34 12 0200 0012 0200SS SS段首址段首址 02000H 0200EH 0200FH 02010H 02011H 02012H SP(初始栈顶)(初始栈顶) 执行执行PUSH AX 后的新栈顶后的新栈顶 SP 执行执行POP BX 后的新栈顶后的新栈顶 SP 第13页 电气工程学院电气工程学院 3)16位标志寄存器压栈位标志寄存器压栈/弹栈指令弹栈指令PUSHF/POPF 格式:格式:PUSHF PO

20、PF 4)32位标志寄存器压栈位标志寄存器压栈/弹栈指令弹栈指令PUSHFD/POPFD 格式:格式:PUSHFD POPFD 5)全部通用寄存器内容压栈)全部通用寄存器内容压栈/弹栈指令弹栈指令 格式:格式:PUSHA ;所有;所有16位通用寄存器压栈,位通用寄存器压栈, ;顺序:;顺序:AX,CX,DX,BX,SP,BP,SI,DI 格式:格式:PUSHAD ;所有;所有32位通用寄存器压栈,位通用寄存器压栈, 顺序:顺序:EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI POPA ;顺序与;顺序与PUSHA相反相反 POPAD ;顺序与;顺序与PUSHAD相反相反 例例 P

21、USHA 设设 AX=11H BX=22H CX=33H DX=44H SI=55H DI=66H SP=70H BP=88H 执行后(顺序:执行后(顺序:AX,CX,DX,BX,SP,BP,SI,DI) SP保存的是操作前的值。(有一个中间寄存器保存保存的是操作前的值。(有一个中间寄存器保存SP之原始值之原始值0070) 第14页 电气工程学院电气工程学院 8FH AL CPU 注意区别:端口的地址注意区别:端口的地址 端口的数据端口的数据 (3)I/O指令指令 IN和和OUT 必须熟练掌握这两类指令必须熟练掌握这两类指令 ! 1)直接寻址的)直接寻址的I/O指令(端口地址在指令(端口地址在

22、00FFH之间)之间) IN AL,PORT ;PORT端口内容输入到端口内容输入到AL IN AX,PORT ;PORT和和PORT+1端口内容输入到端口内容输入到AX OUT PORT,AL ;AL的内容输出到地址为的内容输出到地址为PORT的端口的端口 OUT PORT,AX ;AX输出到输出到PORT和和PORT+1两端口两端口 例:设:例:设: PORT=8FH (8FH)=65H 执行执行 IN AL,8FH 地址为地址为 8FH端口端口 端口内数据端口内数据 65H 65H AB DB 第15页 电气工程学院电气工程学院 2)DX间址的间址的I/O指令(端口地址指令(端口地址FF

23、H) IN AL,DX ;从;从DX指向指向的端口读入一个字节到的端口读入一个字节到AL OUT DX,AL ;把;把AL的内容输出到的内容输出到DX指向指向的端口的端口 注意:间接寻址,注意:间接寻址,规定规定DX作为间址寄存器,存放端口地址作为间址寄存器,存放端口地址 例:设某端口地址为例:设某端口地址为310H,(,(310H)=88H MOV DX,310H ;把端口地址送入;把端口地址送入DX IN AL,DX ;从;从310H口读入一个字节数据到口读入一个字节数据到AL DX AL 地址为地址为 310H端口端口 端口内数据端口内数据 88H 88H 310H AB DB 第16页

24、 电气工程学院电气工程学院 例:例: MOV AL,05H MOV DX,209H OUT DX,AL DX AL 地址为地址为 209H端口端口 端口内数据端口内数据 05H 05H 209H AB DB 数据传送指令的说明数据传送指令的说明 P56P56 源操作数可以是源操作数可以是8 8位、位、1616位或位或3232位的立即数、寄存器、段寄存器或存储器操作数,目位的立即数、寄存器、段寄存器或存储器操作数,目 标操作数是与源操作数标操作数是与源操作数等长等长的寄存器、段寄存器(的寄存器、段寄存器(CSCS除外)或存储器操作数。除外)或存储器操作数。 源操作数和目标操作数不能同时为存储器操

25、作数。源操作数和目标操作数不能同时为存储器操作数。 如:如:MOV BPMOV BP,SISI是非法指令。是非法指令。 源操作数和目标操作数不能同在段寄存器中,如:源操作数和目标操作数不能同在段寄存器中,如:MOV DSMOV DS,ESES是非法指令。是非法指令。 第17页 电气工程学院电气工程学院 立即数不能作为目标操作数。如立即数不能作为目标操作数。如MOV 1234HMOV 1234H,AXAX是非法指令。是非法指令。 不能将立即数直接传送到段寄存器,如:不能将立即数直接传送到段寄存器,如:MOV SSMOV SS,1000H1000H是非法指令。是非法指令。 当目标操作数为非直接寻址

26、的存储器操作数时,如源操作数是单字节的立即数,当目标操作数为非直接寻址的存储器操作数时,如源操作数是单字节的立即数, 则应用则应用PTRPTR运算符说明目标操作数的属性,否则将被默认为字型操作数。运算符说明目标操作数的属性,否则将被默认为字型操作数。 322 算术运算指令算术运算指令 完成加、减、乘、除运算。完成加、减、乘、除运算。 指令的含义不难理解,指令的含义不难理解, 但要但要注意注意对标志位的影响。对标志位的影响。 1)基本四则运算)基本四则运算 (1)ADD / SUB ADD OP1,OP2 ;OP1 OP1 OP2 SUB . OP1,OP2 ;OP1 OP1 OP2 例:例:

27、ADD AL,BL 设:设: AL=17H BL=09H CF=1 执行后:执行后: AL=20H BL=09H 必须掌握的必须掌握的6 个标志位个标志位 标志寄存器中的标志位:标志寄存器中的标志位: CF=0 SF=0 ZF=0 AF=1 OF=0 PF=0 无进位无进位 最高位是最高位是0 1的个数为奇的个数为奇 有半进位有半进位 无溢出无溢出 结果不为结果不为0 第18页 电气工程学院电气工程学院 (2)ADC / SBB 带进位的加法带进位的加法 / 带借位的减法带借位的减法 ADD OP1,OP2 ;OP1 OP1 OP2CF SUB . OP1,OP2 ;OP1 OP1 OPCF

28、*用于多字节的加法用于多字节的加法 18H+09H=21H 21H+01H=22H 例:例: ADC DL,BL 设:设:DL=18H BL=09H CF=1 执行后:执行后:DL=22H BL=09H CF=0 SF=0 ZF=0 OF=0 PF=1 说明:说明: 1)上述)上述4条指令,目标操作数(条指令,目标操作数(OP1)可以是)可以是8/16/32位的寄存器位的寄存器/存储器存储器 (寄存器操作数(寄存器操作数/存储器操作数);源操作数(存储器操作数);源操作数(OP2)是与目的操作数)是与目的操作数 等长的立即数等长的立即数 / 寄存器寄存器 / 存储器。存储器。 2)如果源操作数

29、是单字节或双字节,而目的是间址、基址、变址、变)如果源操作数是单字节或双字节,而目的是间址、基址、变址、变+基寻址基寻址 的内存操作数,则必须用的内存操作数,则必须用PTR运算符说明目的操作数是字节型或双字型运算符说明目的操作数是字节型或双字型 PTR: 属性修改运算符属性修改运算符 ADD BX,12H ;OP1是基址寻址,必须是基址寻址,必须PTR加以说明加以说明 ADD BYTE PTR BX,12H *BYTE PTR说明说明BX所指向的是一个字节的存储单元。匹配所指向的是一个字节的存储单元。匹配 第19页 电气工程学院电气工程学院 SUB SI+2,1234H ;OP1是变址寻址,必

30、须是变址寻址,必须PTR加以说明加以说明 SUB WORD PTR SI+2,1234H *WORD PTR说明说明SI+2所指向的是两个字节的存储单元。匹配所指向的是两个字节的存储单元。匹配 3)对标志位的影响)对标志位的影响 影响:影响:OF,SF,ZF,AF,PF,CF (P73) 要求熟悉这要求熟悉这6个标志位的含义个标志位的含义 (3)INC / DEC 加加1 / 减减1指令指令 格式:格式: INC . OP1 (INCrement) DEC OP1 (DECrement) *只有一个操作数只有一个操作数OP1。它可以是。它可以是8/16/32位,不可以是立即数位,不可以是立即数

31、 *此类指令此类指令不影响不影响CF标志位,通过下面例子来说明含义:标志位,通过下面例子来说明含义: 立即数在立即数在CS段,段, 在运行中一般不在运行中一般不 能改动能改动 无论操作是否产无论操作是否产 生进位,生进位,CF始始 终保持原值终保持原值 设设 AX=0FFFFH, CF=1 执行执行 INC AX 结果结果 AX=0,CF=0(而不是(而不是1) 设设 CX=1234H, CF=1 执行执行 INC CX 结果结果 CX=1235H,CF=1(而不是(而不是0) 第20页 电气工程学院电气工程学院 例:通过端口例:通过端口300H,输出数据区中的,输出数据区中的256个字节个字

32、节 DX 地址为地址为 300H端口端口 端口数据缓冲区端口数据缓冲区 : : : : 300H SI 256 字节字节 AL AB DB BUFFER DS 主主 机机 对应的程序段:对应的程序段: ORG 1000H ;从数据段偏移地址为;从数据段偏移地址为1000H开始开始 BUFFER DB 12,34,. ; 建立建立256个字节的数据区个字节的数据区 MOV CX, 256 ; 将要传送将要传送256个字节个字节 ;CX作为计数器作为计数器 MOV SI,OFFSET BUFFER ;取数据区偏移地址送取数据区偏移地址送SI ;SI即为指向数据区的指针即为指向数据区的指针 第21页

33、 电气工程学院电气工程学院 MOV DX,300H ;口地址送;口地址送DX NEXT: MOV AL,SI ;从;从SI所指向的数据所指向的数据 ; 单元取一个字节送单元取一个字节送AL OUT DX, AL ; 该字节送端口该字节送端口300H INC SI ;指向下一个数据单元;指向下一个数据单元 LOOP NEXT ; 循环。每循环一次,循环。每循环一次,CX-1 ;当当CX=0时,循环继续;时,循环继续; . ;当;当CX=0时,循环停止时,循环停止 *时序配合问题;时序配合问题; *数值运算符(算子)数值运算符(算子)OFFSET 功能:计算变量名或标号名的偏移地址。功能:计算变量

34、名或标号名的偏移地址。 在上例中,就是把数据段的偏移地址在上例中,就是把数据段的偏移地址1000H送到送到SI 又例:完成两个多字节无符号数的相加又例:完成两个多字节无符号数的相加 74326545784322 H + 98786765432322H 74 32 65 45 78 43 22 H + 98 78 67 65 43 23 22 H 可以分为可以分为7个字节相加,必须考虑进位,个字节相加,必须考虑进位, 用用ADC指令指令 OP1 DB 22H,43H,78H,45H,65H,32H,74H OP2 DB 22H,23H,43H,65H,67H,78H,98H SUM. DB 8

35、DUP(?)(?) 第22页 电气工程学院电气工程学院 . LEA SI, OP1 ;取取OP1地址偏移量送地址偏移量送SI MOV CX, 7 ;将要进行将要进行7次加法运算次加法运算 XOR . BL, BL .;清清CF和和BL 七次加七次加 法未完法未完 AGAIN:.MOV AL, SI ;取一个加数取一个加数 ADC . AL, SI+7 ;完成两个字节带进位相加完成两个字节带进位相加 MOV SI+0EH, AL .;存部分和存部分和 INC SI ;指向下一个存放加数的单元指向下一个存放加数的单元 ;取进位位到取进位位到BL MOV SI+0EH, BL .;存总进位存总进位

36、. LOOP AGAIN ;计数器计数器CX-1,不为,不为0,转,转AGAIN ADC BL, 0 . ;CX=0,七次加法完成。,七次加法完成。 * 最高字节相加最高字节相加 74H+98H AL=6C CF=1 在这里,它是在这里,它是1百万亿以上。百万亿以上。 因为很多指令都要影响因为很多指令都要影响CF标志,也许执行完下一条指令就使标志,也许执行完下一条指令就使CF变为变为0了。所以,了。所以, 应当把它存入内存中,形成一个应当把它存入内存中,形成一个完整的和完整的和。 请大家注意,我们第三次实验(循环)中就有一个内容与本例非常相似。请大家注意,我们第三次实验(循环)中就有一个内容与

37、本例非常相似。 第23页 电气工程学院电气工程学院 22 43 78 45 65 32 74 OP1+6 22 23 43 65 67 78 98 OP1+D 44 01 SI+E SUM 总进位总进位 SI+7 OP2 OP1+0 SI ()交换加法指令()交换加法指令 XADD 格式:格式: XADD OP1,OP2 功能:(功能:(OP1) 缓存器;(缓存器;(OP1)+(OP2) (OP1);); 缓存器(原缓存器(原OP1) (OP2) *OP1,OP2均不能为立即数均不能为立即数 例:例:MOV BL,12H MOV BH,34H XADD BH,BL 执行后:执行后:BH=46H

38、 BL=34H (34H从从BH交换到交换到BL) ()整数变反指令()整数变反指令 NEG 格式:格式: NEG OP1 ;0-OP1 OP1 功能功能 把正数变为负数,把负数变为正数,但其绝对值不变。把正数变为负数,把负数变为正数,但其绝对值不变。 例外:以例外:以8位为例,位为例,80H在执行完在执行完NEG指令后,仍为指令后,仍为80H 第24页 电气工程学院电气工程学院 ()比较指令()比较指令 CMP 格式:格式:CMP OP1,OP2 ;OP1-OP2 比较实际上是相减,设比较实际上是相减,设 OP1=A=41H(ASCII) OP2=B=42H(ASCII) 41H-42H,

39、结果不为结果不为0,此时,此时0标志位标志位 ZF=0,表示二者不相等;,表示二者不相等; 如果如果OP2也是也是A,则,则41H-41H=0,此时,此时0标志位标志位 ZF=1,表明二者相等。,表明二者相等。 减法与比较的区别是:减法要把差送到第一操作数存放;减法与比较的区别是:减法要把差送到第一操作数存放; 而比较没有这一操作,不保存差。而比较没有这一操作,不保存差。 ()比较交换指令()比较交换指令 CMPXCHG 格式:格式: CMPXCHG OP1,OP2 显然应该有两个功能:比较和交换。显然应该有两个功能:比较和交换。 比较:不是比较:不是OP1与与OP2比较,而是比较,而是OP1

40、 与与AL / AX / EAX比较。比较。 交换:根据交换:根据0标志标志ZF确定如何交换确定如何交换 若若 ZF=1,(二者相等),(二者相等) 则则 OP1 OP2 若若 ZF=0,(二者不等),(二者不等) 则则 AL / AX / EAX OP1 积积()()无符号乘法指令无符号乘法指令 MUL 格式:格式: MUL OP1 功能:功能: AL / AX / EAX OP1 AX / DX:AX / EDX:EAX 第25页 电气工程学院电气工程学院 例:例: MUL SI ;AX SI DX:AX 例:例: MOV AL,128 MOV BL,8 MUL BL ;AL * BL(1

41、28*8) AX 执行后:执行后: AX=80H 8 =10000000B 1000B =10000000000B=0400H (9)带符号数乘法)带符号数乘法 IMUL 有三种形式有三种形式 (第一种用得最多)(第一种用得最多) 1) IMUL OP 1 ;与;与MUL一样一样 2) IMUL OP1,OP2 ; *OP1,OP2均为均为16/32,OP2可以为立即数可以为立即数 *OP1 OP2 OP1 结果超过结果超过16/32,高位自动丢失并给出标志:,高位自动丢失并给出标志:CF=1和和OF=1 3) IMUL OP1,OP2,OP3 *OP2 OP3 OP1 *OP3必为立即数必为

42、立即数 (10)除法指令)除法指令 DIV / IDIV 格式:格式: DIV OP1 IDIV OP1 AX DX:AX EDX:EAX OP1 商:商: AL / AX / EAX 余数:余数:AH / DX / EDX 结果结果 第26页 电气工程学院电气工程学院 (11)符号扩展指令)符号扩展指令 格式:格式:CBW 把把AL中的符号位扩展到中的符号位扩展到AH中,把字节扩展为字中,把字节扩展为字 Change Byte into Word AL AX CWD 把把AX中的符号位扩展到中的符号位扩展到DX中,把字扩展为双字中,把字扩展为双字 Change Word into Doubl

43、e word AX DX:AX CWDE 把把AX中的符号位扩展到中的符号位扩展到EAX中的高中的高16位,位, 把字扩展为双字把字扩展为双字 Change Word into Double word in EAX AX EAX CDQ 把把EAX中的符号位扩展到中的符号位扩展到EDX,把双字扩展为四字,把双字扩展为四字 Change Double word into Quart word 说明:说明: CBW将将AL中的中的8位带符号数带符号扩展为位带符号数带符号扩展为16位位AX中。中。 CWD将将AX中的中的16位带符号数带符号扩展为位带符号数带符号扩展为32位位DX:AX中。中。 CW

44、DE将将AX中的中的16位带符号数带符号扩展为位带符号数带符号扩展为32位位EAX中。中。 CDQ将将EAX中的中的32位带符号数带符号扩展为位带符号数带符号扩展为64位位EDX:EAX中中。 第27页 电气工程学院电气工程学院 (12)十进制调整指令)十进制调整指令 两个两个BCD码相加,并不能保证结果是正确的十进制数,原因是:计算机码相加,并不能保证结果是正确的十进制数,原因是:计算机 只能只能“逢二进一逢二进一”或或“逢十六进一逢十六进一”。 先通过实例看一下为什么需要十进制调整先通过实例看一下为什么需要十进制调整 45+19 98+98 0100 0101 + 0001 1001 01

45、01 1110 非法非法BCD + 0000 0110 0110 0100 06调整调整 调整后的调整后的BCD 1001 1000 + 1001 1000 CF=1 0011 0000 + 0110 0110 1001 0110 结果:结果:1 1001 0110 196D 66调整调整 有半进位,低有半进位,低4位加位加6 有进位,高有进位,高4位加位加6 先简单了解调整法则:先简单了解调整法则: 非法非法BCD,加,加6; 有半进位,低有半进位,低4位加位加6; 有进位,高有进位,高4位加位加6。 第28页 电气工程学院电气工程学院 为便于理解和记忆这些指令,给出比较完整的表诉为便于理解

46、和记忆这些指令,给出比较完整的表诉 由于时间的关系,先介绍由于时间的关系,先介绍 DAA 1)组合十进制数加法调整指令)组合十进制数加法调整指令 DAA 格式:格式: DAA 功能:针对功能:针对AL寄存器中的两个组合十进制数(压缩寄存器中的两个组合十进制数(压缩BGD码)之和码)之和 进行调整,以得到正确的十进制数进行调整,以得到正确的十进制数 例例1: 把两个十进制数相加(把两个十进制数相加(DAA应用)应用) 3579 + 2468 BCD1 BCD1+1 BCD2 BCD2+1 BCD3 BCD3+1 79 35 68 24 47 60 相应程序相应程序 MOV AL,BCD1 ;取低

47、字节取低字节BCD(79) ADD . AL,BCD2 ;低字节低字节BCD相加(相加(79+68) DAA ;十进制调整十进制调整 MOV BCD3, AL ;存部分和(存部分和(47) (CF=1) MOV AL,BCD1+1 ;取高字节取高字节BCD(35) ADC . AL,BCD2+1 ;高字节高字节BCD相加(相加(35+241) DAA ;十进制调整十进制调整 MOV BCD3+1, AL ;存部分和存部分和 (60) 第29页 电气工程学院电气工程学院 本例正好没有总进位,如果有,还要处理总进位,前面已经讲过本例正好没有总进位,如果有,还要处理总进位,前面已经讲过。 关于关于B

48、CD数在指令中的表示方法:数在指令中的表示方法: 在文献中:在文献中: BCD数数 (0011 0010)BCD =32D 在指令中在指令中 二进制数二进制数 B 十进制数十进制数 D 或不加标识或不加标识 十六进制数十六进制数 H BCD ? 把把BCD数数 (0011 0010)BCD 送入送入AL MOV AL,32D ;在计算机中必然把;在计算机中必然把32D变为变为20H ;按;按 0010 0000形式存放形式存放 MOV AL,32H ;在计算机中按;在计算机中按 0011 0010 存放存放 在指令中的在指令中的BCD数应当加数应当加H 在运算后,用相应的调整指令在运算后,用相

49、应的调整指令 以下(到以下(到3.2.3之前)暂时不看之前)暂时不看 第30页 电气工程学院电气工程学院 2)未组合十进制数减法调整指令)未组合十进制数减法调整指令 AAS 格式:格式: AAS ;unpacked Adjust a BCD in the AL for Subtraction 功能:在功能:在SUB/SBB之后,对之后,对AL中两个未组合中两个未组合BCD的差进行修正的差进行修正 结果:被减数结果:被减数减数,执行减数,执行AAS后,后,C=1,AH-1,AL中的修正值解释为模中的修正值解释为模10的补数的补数 被减数被减数减数,执行减数,执行AAS后,后,C=0,AH不变,不

50、变,AL不修正不修正 例:例: 两个两个ASCII码相减的调整程序段(码相减的调整程序段(AAS应用)应用) 5-7 MOV AL,5 ;MOV AL,35H SUB AL,7 ; SUB AL,37H。相减后,。相减后,AF=1,AL=FE AAS ;CF=1,AL=08H(-2的的10的补码)的补码) 计算机中,减法是用加法完成的计算机中,减法是用加法完成的 37原 原=00110111 -37补补=11001001 66原 原=01100110 -66补补=10011010 0011 0101 (35) +1100 1001 (-37) 1111 1110 均为非法均为非法BCD,进行,

51、进行66调整调整 + 1001 1010 (-66) 1001 1000 CF=1 本来,按照计算结果,本来,按照计算结果,AL=98,98是在模为是在模为100时,时,-2的的10的补码,但在设计时的补码,但在设计时 考虑到是对一位考虑到是对一位BCD数相减,所以,把数相减,所以,把98的的10位位“9”去掉,在去掉,在AL中只保留中只保留08, 第31页 电气工程学院电气工程学院 3)未组合十进制数乘法调整指令)未组合十进制数乘法调整指令 AAM 格式:格式: AAM . ;unpacked Adjust a BCD in the AX for Multiply 功能:对功能:对AX中两个

52、未组合中两个未组合BCD的积进行修正。的积进行修正。 修正后,修正后,AH存放十位,存放十位,AL存放个位存放个位 例例3 实现非组合实现非组合BCD数相乘的程序段(数相乘的程序段(AAM的应用)的应用) 完成完成 6 8 MOV AL,06 MOV BL,08 MUL BL ;AX (AL)(BL)68 AAM ;调整后,(;调整后,(AH)=04 (AL)=08 (AX)=0408 (by the way) 1,2,3,4,5,6,7,8,9,10 我们基本上习惯了我们基本上习惯了2的补码运算,现在来看一下的补码运算,现在来看一下10的补码运算的补码运算 4 - 2 4+(-2) 4+8=

53、12 去掉模去掉模10, 12-10=2 1 - 2 1+(-2) 1+8=9 去掉模去掉模10, 9-10=-1 后面我们将不再细看过程了,只介绍调整结果的含义后面我们将不再细看过程了,只介绍调整结果的含义 于是于是8被解释为在模为被解释为在模为10时,时,-2的的10的补码的补码 第32页 电气工程学院电气工程学院 4)未组合十进制数除法调整指令)未组合十进制数除法调整指令 AAD 格式:格式:AAD . ;unpacked Adjust a BCD in the AX for Division 功能:用在除法指令功能:用在除法指令DIV之前,把被除数(之前,把被除数(AX中的未组合中的未

54、组合BCD)调整为二进制数,)调整为二进制数, 然后执行然后执行DIV,AL内容是以二进制形式存放的商;内容是以二进制形式存放的商;AH是以二进制形式存放的余数。是以二进制形式存放的余数。 若商若商9,即为十进制数;大于,即为十进制数;大于10,需作用,需作用AAM处理。处理。 例例4 实现非组合实现非组合BCD数相除的程序段(数相除的程序段(AAD的应用)的应用) 完成完成175 MOV AX,0107H ;被除数以非组合;被除数以非组合BCD形式送形式送AX MOV BL,05 ;除数送;除数送BL AAD ;调整被除数为;调整被除数为 AX=0011H(17D) DIV BL ;商(;商

55、(AL)=03,余数(,余数(AH)=02 第33页 电气工程学院电气工程学院 3.2.3 逻辑运算与移位指令逻辑运算与移位指令 (1)逻辑运算指令)逻辑运算指令 1)与、或、异或)与、或、异或 格式:格式:AND OP1,OP2 (与)(与) OR OP1,OP2 (或)(或) XOR .OP1,OP2 (异或)(异或) 功能:用于屏蔽、组合、置功能:用于屏蔽、组合、置1、置、置0、取反、取反 例例 MOV AL,8 ;8的的ASCII码:码:38H AND .AL,0FH ; 屏蔽高屏蔽高4位,原样保留低位,原样保留低4位位 0011 1000 AND. 0000 1111 0000 10

56、00 MOV AL, 8 ; OR AL,30H ;OR组合成组合成ASCII码:码:38 0000 1000 OR. 0011 0000 0011 1000 第34页 电气工程学院电气工程学院 MOV CL, 0F0H XOR . .AL,CL ;对对AL的高的高4位取反,低位取反,低4位不变位不变 设设AL=10100101B=A5H 1010 0101 XOR. 1111 0000 0101 0101 55H 取反取反 不变不变 又例又例: *要求屏蔽要求屏蔽0、1两位,可用两位,可用AND指令,选用常数指令,选用常数0FCH MOVAL,0BFH ANDAL,0FCH ;结果;结果AL

57、=0BCH 前导前导0,标明是,标明是 16进制数进制数 1011 1111 AND. 1111 1100 1011 1100 0BCH 第35页 电气工程学院电气工程学院 2)测试指令)测试指令 TEST 格式:格式: TEST OP1,OP2 ;与;与AND指令类似,指令类似, ; 但结果不存入但结果不存入OP1 功能:通常该指令后面跟条件转移指令,用来测试目的操作数的某一位或几功能:通常该指令后面跟条件转移指令,用来测试目的操作数的某一位或几 位的状态,测试结果作为转移的条件。位的状态,测试结果作为转移的条件。 例:如果例:如果AL的的D5为为1,则跳转到,则跳转到NEXT1; BUF单

58、元的单元的D1D4全为全为0,则转到,则转到NEXT2。 TEST AL,20H JNZ NEXT1 ;若若AL中的中的D5位位=1,转,转NEXT1 AL xxXxxxxx AL xxXxxxxx TEST 00100000 TEST 00100000 00?00000 00?00000 把判断把判断D5是否为是否为1变为判变为判 断操作结果是否为断操作结果是否为0: 结果为结果为0, D5=0; 结果不为结果不为0,D5=1 NEXT1: TEST BUF,00011110B JZ NEXT2 ;BUF单元的单元的D4D1为为0,转,转 BUF xxx0000 xxxx0000 x D4D

59、1任有一个为任有一个为1 TEST 0001111000011110 结果非结果非0;只有;只有4个都个都 是是0,结果才是,结果才是0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 D7 D6 D5 D4 D3 D2 D1 D0 AL BUF 第36页 电气工程学院电气工程学院 3)逻辑非指令)逻辑非指令 NOT 格式:格式: NOT OP1 功能:功能: 各位取反各位取反 不影响标志位不影响标志位 (2)移位指令)移位指令 1)算术)算术 / 逻辑左移指令逻辑左移指令 SAL / SHL SA

60、L: Shift Arithmetic Left SHL: SHift logical Left 此类指令的含义通常用示意图表达此类指令的含义通常用示意图表达 格式:格式:SAL / SHL OP1,OP2 ;算术左移;算术左移 / 逻辑左移逻辑左移 被移位对象被移位对象 移位次数移位次数 CF MSB OP1 LSB 0 SAL (SHL) MSB Most Significant Bit LSB Least Significant Bit 第37页 电气工程学院电气工程学院 例:把例:把AX中的无符号数乘中的无符号数乘8 MOV AX,12H ;(12H18D) MOV CL,3 SAL

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论