[计算机软件及应用]第3章 80X86的指令系统ppt课件_第1页
[计算机软件及应用]第3章 80X86的指令系统ppt课件_第2页
[计算机软件及应用]第3章 80X86的指令系统ppt课件_第3页
[计算机软件及应用]第3章 80X86的指令系统ppt课件_第4页
[计算机软件及应用]第3章 80X86的指令系统ppt课件_第5页
已阅读5页,还剩91页未读 继续免费阅读

下载本文档

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

文档简介

1、3.1 80 x86的寻址方式的寻址方式3.2程序占有的空间和执行时间程序占有的空间和执行时间3.3 80 x86的指令系统的指令系统第三章第三章 80X86的指令系统的指令系统 计算机中的指令由操作码字段和操作数字段两部分组成.操作码字段指示计算机所要执行的操作,而操作数字段那么指出在指令执行操作的过程中所需求的操作数.指令的普通格式:操作码操作数操作数字段可以是一个,两个或三个,多数指令为两个.操作码与操作数之间用空格隔开,多个操作数之间用“,隔开。单操作数指令就是一地址指令, 如:INC AX双操作数指令就是二地址指令, 如:MOV AX,1000H 3.1.1 操作数的寻址方式操作数的

2、寻址方式 寻址方式寻址方式 是用来确定操作数地址从而找到操作数是用来确定操作数地址从而找到操作数立刻寻址方式立刻寻址方式(immediate addressing)存放器寻址方式存放器寻址方式(register addressing)直接寻址方式直接寻址方式(direct addressing)存放器间接寻址方式存放器间接寻址方式(register indirect addressing)存放器相对寻址方式存放器相对寻址方式(register relative addressing)基址变址寻址方式基址变址寻址方式(based indexed addressing)相对基址变址寻址方式相对基址

3、变址寻址方式(relative based indexed addressing)3.1 80 x86的寻址方的寻址方式式1.立刻寻址立刻寻址 immediate addressing例如:例如:MOV AX,3064H ;十六进制数;十六进制数3064H送入送入AX。低地址AHAHALALAXAX高地址代码段代码段CS3 06 4操作数直接存放在指令中,紧跟在操作码之后,它作为指令一部分存放在代码段里的,这种操作数称为立刻数,立刻数可以是8位的或16位的(二进制代码为B86430H)操作码B8操作数3064HB 86 43 0指令执行结果:(AX)=3064H2.存放器寻址存放器寻址 reg

4、ister addressing 操作数存放在指令规定的存放器中操作数存放在指令规定的存放器中,对于对于16位操作数,存放器可以是位操作数,存放器可以是AX,BX,CX,DX,SI,DI,SP或或BP;而对而对8位操作数位操作数,存放器可以是存放器可以是AH,AL,BH, BL,CH,CL,DH或或DL。X X X X3 0 6 4AXAXBXBX例如: MOV AX,BX3 0 6 4代码段代码段CS低地址高地址操作码8 9D 8指令执行结果:(AX)=3064H 立刻数寻址和存放器寻址,操作数放在代码段CS中但更多的情况操作数放在除代码段以外的存储区中,经过不同的寻址方式求得操作数的地址,

5、从而获得操作数.操作数的物理地址(physics address,PA)由段基地址和偏移地址确定.在实地址方式下段地址由段存放器提供,那么如何获得偏移地址呢? 偏移地址又称为有效地址(effective address,EA),可以由以下几种成分组成。 位移量 (displacement)是存放在指令中的一个8位或16位的数,但它不是立刻数,而是地址。 基址 (base)是存放在基址存放器中的内容。它是有效地址中的基址部分。 变址 (index)是存放在变址存放器中的内容。 有效地址EA =基址+变址+位移量16位寻址时有效地址的组成位寻址时有效地址的组成默许段的选择规那么默许段的选择规那么组

6、成成分组成成分16位寻址位寻址位移量位移量 0,8,16位位基址存放器基址存放器 BX,BP变址存放器变址存放器 SI,DI访问类型访问类型 所用段及段存放器所用段及段存放器缺省选择规那缺省选择规那么么 指指 令令代码段代码段 CS存放器存放器用于取指用于取指 堆堆 栈栈 堆栈段堆栈段 SS存放器存放器 一切的堆栈的进栈和出栈一切的堆栈的进栈和出栈 部分数据部分数据 数据段数据段 DS存放器存放器 除相对于堆栈以及串处置指令除相对于堆栈以及串处置指令 的目的串以外的一切数据访问的目的串以外的一切数据访问 目的串目的串 附加数据段附加数据段 ES存放器存放器 串处置指令的目的串串处置指令的目的串

7、3. 直接寻址直接寻址 direct addressing 将数据段有效地址将数据段有效地址EA=2000H字单元内容送入字单元内容送入AX。3000H3000H50HAX DS DS 3000 H2000H2000H操作码操作码00H00H20H20H50H50H32000H32000H例如:例如:MOV AX, 2000H32000H32000HAHAL0操作数的有效地址只包含位移量一种成分操作数的有效地址只包含位移量一种成分30H30H代码段CS数据段DS存储器32001H32001H30000H2000H指令执行结果:EA=2000HPA=16d*(DS)+EA =30000H+200

8、0H =32000H(AX)=(32000H)=3050H4.存放器间接寻址存放器间接寻址(register indirect addressing例如:例如:MOV AX,BX ;BX内容为有效地址内容为有效地址EA(偏移量偏移量)操作数的有效地址在某个存放器中,而操作数在存储器中.16位寻址可用的存放器是BP,BX,SI,DI.运用BP时,默许段存放器是SS,其他存放器默许段存放器为DS.2000H2000HA0AX 2000 H1000H1000H操作码操作码07H07HA0HA0H21000H21000H21000H21000HAHAL050H50代码段CS数据段DS存储器21001H

9、21001H20000H1000H1000H1000HDSBX指令执行结果:(AX)=(21000H)=50A0HEA= (BX)PA= 16d(DS)+EA = 20000H+1000H = 21000H例如:例如:MOV AX,BP ;BP内容为有效地址内容为有效地址EA(偏移量偏移量)5000H5000HABAX 5000 H1000H1000H操作码操作码操作码操作码00H00HAB HAB H51000H51000H51000H51000HAHAL056H56代码段CS堆栈段SS存储器51001H51001H50000H1000H1000H1000HSSBP指令执行结果:(AX)=(

10、51000H)=56ABHEA=(BP)EA=(BP)PA=16dPA=16d(SS)+EA(SS)+EA =50000H+1000H =50000H+1000H =51000H =51000H5. 存放器相对寻址方式存放器相对寻址方式 register relative addressing操作数的有效地址为基址存放器或变址存放器的内容和指令中指定的位移量之和.操作数在存储器中例如:MOV AX,COUNTSI;count 为16位位移量的符号地址3000H3000H34AX 3000 H2000H2000H操作码操作码操作码操作码00H34H35000H35000H3000H3000HAH

11、AL012H12代码段CS数据段DS存储器35001H35001H30000H5000H2000H2000H指令执行结果:(AX)=(35000H )=1234HDSSICount=3000H35000H35000H30H位移量countMOV AX,COUNT+SIEA=(SI)+CountPA=16d(DS)+EA =30000H+5000H =35000H6.基址变址寻址方式基址变址寻址方式 操作数的有效地址是一个基址存放器和一个变址存放器的内容之和例:MOV AX,BXDI ;或写成 MOV AX,BX+DI2100H2100H34AX 0158H10A5H10A5H操作码操作码操作码

12、操作码34H221FDH221FDHEA= 11FDHEA= 11FDHAHAL012H12代码段CS数据段DS存储器221FEH221FEH21000H11FDH0158H0158H指令执行结果:(AX)=(221FDH )=1234H2100 H2100 HDSBX10A5H10A5HDI11FD H11FD H PA=221FD H PA=221FD HEA=(BX)+(DI)EA=(BX)+(DI) =11FDH =11FDHPA=16dPA=16d(DS)+EA(DS)+EA =21000H+11FDH =21000H+11FDH =221FDH =221FDH7. 相对基址变址寻址

13、相对基址变址寻址 relative based indexed addressing操作数的有效地址是一个基址存放器与一个变址存放器的内容和指令中指定的位移量之和.EA由三部分组成.例:MOV AX,MASKBXSI;MASK 为16位位移量的符号地址3000H3000H34AX 3000 H1000H1000H操作码操作码操作码操作码00H34H33250H33250H2000H2000HAHAL012H12代码段CS数据段DS存储器33251H33251H30000H3250H1000H1000H指令执行结果:(AX)=1234HDSSIMASK=0250H0250H0250H30H位移量

14、count2000H2000HBXPA=PA=33250H33250HPA=16dPA=16d(DS)+EA(DS)+EAEA= (BX)+(SI)+MASKEA= (BX)+(SI)+MASK3.1.2 与转移地址有关的寻址方式与转移地址有关的寻址方式 1. 段内直接寻址段内直接寻址(intrasegment direct addressing) 2. 段内间接方式段内间接方式 (intrasegment indirect addressing) 3. 段间直接寻址段间直接寻址(intersegment direct addressing) 4. 段间间接方式段间间接方式(intersegm

15、ent indirect addressing) 这种寻址方式用来确定转移指定及这种寻址方式用来确定转移指定及CALL指令的转向地址指令的转向地址1.段内直接寻址段内直接寻址intrasegment direct addressing 位移量位移量当前当前IPIP值值EAEA 转向的有效地址是当前IP存放器的内容和指令中的8位或16位位移量之和.在同一个代码段在同一个代码段CS中中,只修正只修正IP,用指令构成的用指令构成的EA替代新的替代新的IP值值.它用于条件转移指令时它用于条件转移指令时,位移量只位移量只允许允许8位位;用于无条件转移指令时用于无条件转移指令时,位移量可为位移量可为8位位

16、(称短跳转称短跳转short),位移量可为位移量可为16位位(称近跳转称近跳转near).指令的汇编言语格式表示为指令的汇编言语格式表示为:JMP NEAR PTR PROGIAJMP SHORT QUEST其中其中PROGIA 和和QUEST 为符号地址为符号地址.;NEAR PTR PROGIA 16位位移量位位移量; SHORT QUEST 8位位移量位位移量2.段内间接寻址段内间接寻址intrasegment indirect addressing 转向的有效地址是一个存放器或是一个存储单元的内容转向的有效地址是一个存放器或是一个存储单元的内容.该该内容内容 作为作为EA用来取代新的用

17、来取代新的IP的值的值. JMP BX; CS不变不变,(IP)=(BX) JMP WORD PTRBP+TABLE设设(DS)=2000H,(BX)=1256H,(SI)=528FH,TABLE=20A1H(232F7H)=3280H,(264E5H)=2450H例例1:JMP BX;(IP)=1256H例例2:JMP TABLEBX16d(DS)+(BX)+TABLE=20000+1256+20A1=20000+1256+20A1 =232F7(IP)=(232F7H)=3280H例例3:JMP BXSI16d(DS)+(BX)+(SI)=20000 +1256+528F=264E5(IP

18、)=(264E5H)=2450H3.段间直接寻址段间直接寻址intersegment direct addressing 指令中直接提供了转向段地址和偏移地址指令中直接提供了转向段地址和偏移地址,只需只需用指令中指定的偏移地址取代用指令中指定的偏移地址取代IP,用指令中指定的用指令中指定的段地址取代段地址取代CS. 指令格式:指令格式: JMP FAR PTR nextroutintnextroutint 为转向的符号地址,为转向的符号地址,FAR PTR 是求段是求段地址和偏移地址的操作符,指令执行结果是:用地址和偏移地址的操作符,指令执行结果是:用nextroutint所在段的段地址取代所

19、在段的段地址取代CS,nextroutint所所在段的偏移地址取代在段的偏移地址取代IP4.段间间接寻址段间间接寻址intersegment indirect addressing 用存储器中两个相继字的内容取代用存储器中两个相继字的内容取代IP, CS. 指令格式:指令格式: JMP DWORD PTRinters+BX把数据段偏移地址为把数据段偏移地址为Inters+(BX)的双字单元中的的双字单元中的内容取代当前的内容取代当前的IP, CS3.2程序占有的空间和执行时间程序占有的空间和执行时间 用汇编言语编写的程序经过汇编程序翻译成机器指令才干被计算机识别执行,不同的汇编指令翻译成机器指

20、令后所占的字节数不一样,16位格式指令长度在17B ,因此程序总会占有一定的存储空间。 机器执行指令,访问存储器需求一定的时间,执行一条指令的快慢与机器的主频和体系构造有很大的关系。3.3 80 x86的指令系统的指令系统80 x86的指令系统可分为以下6组数据传送指令数据传送指令算术指令算术指令逻辑指令逻辑指令串处置指令串处置指令控制转移指令控制转移指令处置机控制指令处置机控制指令3.3.1数据传送指令数据传送指令MOV (move)传送MOVSX (move with sign-extend)带符号扩展传送MOVZX (move with zero-extend)带零扩展传送PUSH (p

21、ush onto the stack)进栈POP (pop from the stack)出栈PUSHA (push all registers )一切存放器进栈POPA (pop all registers )一切存放器出栈XCHG (exchange)交换1. MOV 传送指令格式: MOV DST,SRC ;destination source执行操作:DST SRC MOV mem/reg1,mem/reg2MOV reg,dataMOV ac,memMOV mem,acMOV segreg,mem/regMOV mem/reg,segregMOV mem/reg,datadatame

22、mregds,es sscs立刻数不能送立刻数不能送segreg, 两个两个mem之间不之间不能直接传送能直接传送,立刻数不能作立刻数不能作DST,CS也也不能作不能作DST 传送填充指令是把位数短的源操作数传送给位数长的目的操作数。 指令格式如下: MOVSX/MOVZX Reg/Mem, Reg/Mem/Imm 指令的主要功能和限制与MOV指令类似,不同之处是:在传送时,对目的操作数的高位进展填充。 2. MOVSX/MOVZX3. XCHG 交换指令格式:XCHG OPR1,OPR2操作: (OPR1) (OPR2)两个操作数opr1,opr2必需有一个为通用存放器,指令允许字节操作或字

23、操作.例: XCHG BX,BP+SI设(DS)=2000H,(SS)=2F00H,(BP)=0200H,(SI)=0046HBXBX 2F00 H0200 H0200 H操作码操作码操作码操作码54 H54 H2F246H2F246H0046 H0046 H0 4 1 H6 F 3 06 F 3 0代码段CS堆栈段SS存储器2F247H2F247H2F000H246H指令执行结果:(BX)=4154H(2F246H)=6F30H2F246 H2F246 HTEMP6 F 3 06 F 3 04 1 5 44 1 5 43 0 H3 0 H6 F H6 F H指令执行前:(BX)=6F30H(

24、2F246H)=4154H4.地址传送指令地址传送指令LEA(load effective address) 有效地址送存放器有效地址送存放器LDS(load DS with pointer) 指针送存放器和指针送存放器和DSLES(load ES with pointer) 指针送存放器和指针送存放器和ESLSS(load ES with pointer) 指针送存放器和指针送存放器和SS(1)LEA 有效地址送存放器有效地址送存放器格式格式: LEA REG,SRC执行操作执行操作: (REG) SRC把源操作数的有效地址把源操作数的有效地址送到指定的存放器送到指定的存放器例例1: LEA

25、 BX,BX+SI+0F62H设指令执行前设指令执行前 (BX)=0400H,(SI)=003CH指令执行后指令执行后 (BX)=0400H+003CH+0F62H =EH留意与留意与 MOV BX,BX+SI+0F62H 的区别的区别 3 0 3 0 3 1 3 1 3 2 3 2 3 3 3 3 3 4 3 4 3 5 3 5 (DS) (DS)BLOCKBLOCKF0000HF0000HF0F40HF0F40H例例2: LEA BX,BLOCK指令是把符号地址指令是把符号地址block 的偏移地址送入的偏移地址送入bx它与指令它与指令mov bx,offset block 功能完全一样功

26、能完全一样指令执行的结果:指令执行的结果:BX=0F40H指令中指令中SRC可运用除立刻数和存放器可运用除立刻数和存放器外的任一种存储器寻址方式外的任一种存储器寻址方式(2)LDS,LES,LSS 指针送存放器和段存放器指针送存放器和段存放器格式格式: LDS REG,SRC 执行操作执行操作: (REG) (SRC)执行操作执行操作: (DS) (SRC+2)SRC只能用存储器寻只能用存储器寻址方式址方式例例1:LES DI,BX设设(DS)=B000H,(BX)=080AH(0B080AH)=05AEH(0B080CH)=4000H(DI) (BX)(ES) (BX)+2) . . . .

27、 A E A E 0 5 0 5 0 0 0 0 4 0 4 0 (DS) (DS)B0000HB0000HB080AHB080AH (BX) (BX)指令执行后指令执行后,(DI)=05AEH (ES)=4000HLES,LSS 的格式及用法的格式及用法与与LDS根本一样根本一样5. 堆栈操作指令堆栈操作指令低地址低地址高地址高地址SSSS段基地址段基地址SPSPSP-1SP-2SP-2SPSP栈顶栈顶SPSP栈顶栈顶SPSP栈顶栈顶堆栈是一个“后进先出的存储区,其段基地址存放在SS存放器中,它只需一个入口,SP存放器任何时候都指向当前的栈顶。堆栈段堆栈段进栈操作 PUSH SRC 例 PU

28、SH AX AX AH AL2 1 0 72 10 7进栈方向SP=1000H 1000H1000H0FFFH0FFFH0FFEH0FFEH出栈操作 POP DSC 例 POP BX SP=0FFEH 低地址低地址高地址高地址SSSS段基地址段基地址SPSPSP+1SP+1SP+2SP+2SPSP栈顶栈顶SPSP栈顶栈顶SPSP栈顶栈顶堆栈段堆栈段BX BH BL0 72 1出栈方向0FFEH0FFEH0FFFH0FFFH1000H1000H0 70 72 12 1堆栈的存取在堆栈的存取在16位指令中必需是以字为单位位指令中必需是以字为单位不允许字节堆栈不允许字节堆栈PUSH regPUSH

29、memPUSH dataPUSH segregPOP regPOP memPOP segreg ;CS除外除外LAHF(load AH with flags) 标志送AHSAHF(store AH in flags) AH送标志存放器PUSHF(push the flags ) 标志进栈POPF(pop the flags ) 标志出栈(1) LAHF 标志送AH指令格式: LAHF执行操作: (AH) FLAGS的低字节4 3 2 1 09 8 7 6 5 14 13 12 11 10PF CFZF AFOF DF IF TF SF(2) SAHF AH送标志指令格式: SAHF执行操作:

30、FLAGS的低字节 (AH) 6.标志存放器传送指令标志存放器传送指令(3) PUSHF 标志进栈指令格式: PUSHF4 3 2 1 09 8 7 6 515 14 13 12 11 10PF CFZF AFOF DF IF TF SF执行操作: (SP) (SP)-2 (SP)+1,(SP) (FLAGS)低字节低字节高字节高字节低地址低地址高地址高地址SSSS段基地址段基地址SPSPSP-1SP-1SP-2SP-2SPSP栈顶栈顶SPSP栈顶栈顶SPSP栈顶栈顶堆栈段堆栈段高字节高字节进栈方向2000H2000H1FFFH1FFFH1FFEH1FFEH低字节低字节(3) POPF 标志出

31、栈指令格式: POPF4 3 2 1 09 8 7 6 515 14 13 12 11 10PF CFZF AFOF DF IF TF SF操作: (FLAGS) (SP)+1,(SP) (SP) (SP)+2低字节低字节高字节高字节低地址低地址高地址高地址SSSS段基地址段基地址SPSPSP+1SP+1SP+2SP+2SPSP栈顶栈顶SPSP栈顶栈顶SPSP栈顶栈顶堆栈段堆栈段低字节低字节高字节高字节出栈方向1FFEH1FFEH1FFFH1FFFH2000H2000H7. 累加器公用传送指令累加器公用传送指令IN(input)OUT (output)XLAT(translate)这组指令只限

32、于运用累加器这组指令只限于运用累加器AL,AX,EAX传送信息传送信息IN 输入指令输入指令格式:格式:IN AL,PORT IN AX,PORT IN AL,DX IN AX,DXPort 是端口号是端口号(00-FF),当端口号当端口号超越超越255时时,应将运用应将运用DX当当I/O端口数据为端口数据为8位时位时,用用AL,当当I/O端口数据为端口数据为16位时位时,用用AX.例例1:IN AX,28H MOV data_word,AX;把把28H端口的端口的16位数据送入位数据送入AX; data_word 为字单元为字单元例例2:MOV DX,100H IN AL,DX MOV da

33、ta_byte,AL;端口号超越端口号超越255,先将端口号先将端口号100H;送入送入DX,再将端口中再将端口中8位数据送位数据送AL; data_byte 为字节单元为字节单元格式:格式:OUT PORT ,AL OUT PORT ,AX OUT DX, AL OUT DX,AXPort 是端口号是端口号(00-FF)当端口号当端口号超越超越255时时,应将运用应将运用DX当当I/O端口数据为端口数据为8位时位时,用用AL,当当I/O端口数据为端口数据为16位时位时,用用AX.例例1: MOV AL,64H OUT 5,AL;把数据把数据64H送入从送入从5号端口送出号端口送出例例2:MO

34、V DX,3FCH MOV AX,0FF56H OUT DX,AX; 端口号超越端口号超越255,先将端口号先将端口号3FCH;送入送入DX, 将将16位数据送位数据送0FF56H送送; AX,再经,再经AX送出端口送出端口2OUT 输出指令输出指令3XLAT换码指令换码指令格式:XLAT把一种代码转换为另一种代码把一种代码转换为另一种代码,例把数字例把数字09转转换成相应的换成相应的ASCII码码,方法是先建立一个字节方法是先建立一个字节表表,表格的首地址先存入表格的首地址先存入BX,需求转换的代码需求转换的代码应该是相对表格首地址的位移量的提早存入应该是相对表格首地址的位移量的提早存入AL

35、,表格的内容那么是所要换取的代码表格的内容那么是所要换取的代码, XLAT执行后执行后,转换后的代码就在转换后的代码就在AL中中.例: 求取数字6的ASCII码,设(BX)=0040H,(AL)=06,(DS)=F000H 3 0 3 0 3 1 3 1 3 2 3 2 3 3 3 3 3 4 3 4 3 5 3 5 3 6 3 6 3 7 3 7 3 8 3 8 3 9 3 9 (DS) (DS) (BX) (BX)F0000HF0000HF0040HF0040H (AL)=06H (AL)=06H F0046H F0046HXLAT (AL) (0F0046H)指令执行结果:将AL中的数字

36、6换为6的ASCII码36H存放在AL中执行的操作是: (BX)+(AL)8. 类型转换指令类型转换指令CBW(convert byte to word ) 字节转换为字CWD(convert word to double word ) 字转换为双字(1) CBW 字节转换为字指令格式: CBW ; 执行的操作: AL的内容符号扩展到AH,构成AX中的字.0?AH AL000000000?AX.1?111111111?(2) CWD 字转换为双字指令格式: CWD ;执行的操作: AX的内容符号扩展到DX,构成DX,AX中的双字.0? AX0?AXDX00000000000000001? AX

37、1?AXDX1111111111111111数据定义及存储器分配伪操作数据定义及存储器分配伪操作P127,128伪操作伪操作:是在汇编程序对源程序是在汇编程序对源程序汇编期间由汇编程序处置的操作汇编期间由汇编程序处置的操作,如定义数据如定义数据,分配存储区指示程分配存储区指示程序终了等序终了等.格式: Variable Mnemonic Operand, ,Operand;CommentsVariable 语句前的标号,用符号地址表示,其后不能加冒号Comments 语句前的注释,用来阐明伪操作的功能Mnemonic 伪操作的助记符,即阐明数据类型,常用以下几种:DB 用来定义字节,其后的每个

38、操作数都占有一个字节(8位)DW 用来定义字,其后的每个操作数都占有一个字(16位,低位字节在第一个地址中,高位字节在第二个地址中.) DD 用来定义双字,其后的每个操作数都占有两个字(32位)DF 用来定义6字节字,其后的每个操作数都占有 6B(48位)DQ 用来定义4字,其后的每个操作数都占有4个字 (64位)DT 用来定义10字字,其后的每个操作数都占有10B举例:例1:操作数可以是常数或表达式mybyte db 10,4,10hmyword dw 100,100h,-5mydw dd 3*20,0fffdhmybyte0A10d?00H?01H?02H?03H?04H?05H?06H?

39、07H?08H?09H?0AH?0BH?0CH?0DH?0EH?0FH?10H?11H04104d10hmyword6400100d0001100hFBFF-5dmydw3C00000060dFDFF00000fffdh符号地址符号地址存储存储单元单元物理物理地址地址举例:例2:操作数字符串 ch1 db abcdch2 dw ab,cdch3 db 0abh,?ch161a?00H?01H?02H?03H?04H?05H?06H?07H?08H?09H?0AH?0BH?0CH?0DH?0EH?0FH?10H?11H6263bcch26261ab6463cdch3AB 0ABH-_符号地址符号

40、地址存储存储单元单元物理物理地址地址64d?1.指出以下指令的错误指出以下指令的错误:(1) mov ah,bx ;(2) mov bx,si ;(3) mov ax,sidi(4) mov mydatbxsi,es:ax(5) mov byte ptrbx,1000(6) mov bx,offset mydatsi ;(7) mov cs,ax(8) mov ds,ip2.写出首地址为写出首地址为BLOCK的字数组的第的字数组的第6个字送个字送DX的指令,要求用以下几种寻址方式:的指令,要求用以下几种寻址方式:1存放器间接寻址存放器间接寻址2存放器相对寻址存放器相对寻址3基址变址寻址基址变址

41、寻址(1) LEA BX,BLOCK ADD BX,6*2 MOV DX,BX (2) LEA BX,BLOCK MOV DX, 6*2BX (3) LEA BX,BLOCK MOV SI, 6*2 MOV DX,BXSI3.3.2算术指令算术指令 算术指令包括二进制运算指令和十进制运算指令1. 加法指令ADD (add) 加法 ADC (add with carry) 带进位加法INC (increment) 加1(1)ADD 加法指令格式: ADD DST,SRC执行操作: (DST) (DST)+(SRC)(2)ADC 带进位加法指令格式: ADC DST,SRC执行操作: (DST)

42、(DST)+(SRC)+CF(3) INC 加1指令格式:INC OPR执行操作:(OPR) (OPR)+1它们都即可作字和字节它们都即可作字和字节运算运算,除除INC不影响不影响CF标志外标志外,它们都影响条件它们都影响条件标志标志条件标志最主要的是条件标志最主要的是指指CF,ZF,SF,OF 执行加法指令时执行加法指令时,CF是根据最高有效位能否有向高位的进位设是根据最高有效位能否有向高位的进位设置的置的,有进位时有进位时CF=1,无进位时无进位时,CF=0 OF位那么是根据操作数的符号及其变化情况来设置的位那么是根据操作数的符号及其变化情况来设置的:假设假设两个操作数的符号一样两个操作数

43、的符号一样,而结果的符号与之相反时而结果的符号与之相反时,OF=1,否那么否那么OF=0 OF是用来表示带符号数的溢出是用来表示带符号数的溢出 CF是用来表示无符号数的溢出是用来表示无符号数的溢出 以以8位数来阐明溢出的情况位数来阐明溢出的情况,8位二进制数可表示的十进制数的位二进制数可表示的十进制数的范围是范围是:无符号数为无符号数为0255,带符号数为带符号数为-128+127 1) 无符号数和带符号数都无溢出无符号数和带符号数都无溢出二进制加法二进制加法看作无符号数看作无符号数看作带符号数看作带符号数0000 01004+4 + 0000 1011 + 11 + (+11) + 0000

44、 1111 + 15 +15 CF=0 OF=0 2) 无符号数溢出无符号数溢出二进制加法二进制加法看作无符号数看作无符号数看作带符号数看作带符号数0000 0111 7+7 0000 0010 258 + 2 1 CF=1 OF=0 + 1111 1011 + 251 + (- 5) 3) 带符号数溢出带符号数溢出二进制加法二进制加法看作无符号数看作无符号数看作带符号数看作带符号数0000 10019 +9 1000 0101 133 +133 CF=0 OF=1 + 0111 1100 + 124 + (+124)4) 带符号数和无符号数都有溢出带符号数和无符号数都有溢出二进制加法二进制加

45、法看作无符号数看作无符号数看作带符号数看作带符号数1000 0111 -121 + 1111 0101 + 245 + (-11) 0111 1100 380 -132 1 CF=1 OF=1现为现为2,结果错结果错现为现为-123,两两个正数相加个正数相加结果为负数结果为负数,错错现为现为124结果错结果错现为现为+124,两个负数两个负数相加结果相加结果为正数为正数错错 ADC及及INC对条件码的设置方法与对条件码的设置方法与ADD指令一样,指令一样,但但INC指令不影响指令不影响CF位标志位标志例例1: ADD DX,0F0F0H设指令执行前设指令执行前(DX)=4652H0100 01

46、10 0101 0010+ 1111 0000 1111 0000 0011 0111 0100 0010 1指令执行后指令执行后,(DX)=3742H,ZF=0,SF=0,CF=1,OF=0例例2:将将DX,AX组成的双字与组成的双字与BX,CX组成的双字相加组成的双字相加,设设(DX)=0002H,(AX)=0F365H,(BX)=0005H,(CX)=0E024H ADD AX,CX ADC DX,BX ;执行后执行后,(AX)=0D389H, CF=1,SF=1,ZF=0,OF=0 ;执行后执行后,(DX)=0008H, CF=0,SF=0,ZF=0,OF=0SUB (subtract

47、) 减法 SBB (subtract with borrow) 带借位减法DEC (decrement) 减1NEG (negate)求补CMP (compare)比较(1)SUB 减法指令格式: SUB DST,SRC执行操作: (DST) (DST)-(SRC)(2)SBB 带借位减法指令格式: SBB DST,SRC执行操作: (DST) (DST)-(SRC)-CF(3) DEC 减1指令格式:DEC OPR执行操作:(OPR) (OPR)-12. 减法指令减法指令(4)NEG 求补指令格式: NEG OPR执行操作: (OPR) -(OPR) ;按位取反加1(5) CMP 比较指令格

48、式:CMP OPR1,OPR2执行操作: (OPR1)- (OPR2);该指令与该指令与SUB指令一样执行指令一样执行减法操作减法操作,但它不保管结果但它不保管结果,只只是根据结果设置条件标志是根据结果设置条件标志,作作后续指令判别根据后续指令判别根据例例1:SUB SI+14H,0H设指令执行前设指令执行前: (DS)=3000H,(SI)=0040H(30054H)=4336H0100 0011 0011 0110- 0000 0001 0011 0110 0100 0010 0000 0000 1指令执行后指令执行后(DS)=3000H,(SI)=0040H(30054H)=4200HZ

49、F=0,SF=0,CF=0,OF=00100 0011 0011 0110+ 1111 1110 1100 1010 减法的减法的CF值反映无符号数运算中的借位情况值反映无符号数运算中的借位情况,当作无符当作无符号数运算时号数运算时,假设减数假设减数被减数被减数,此时有借位那么此时有借位那么CF=1,否否那么那么CF=0.或者也可以简单地用二进制减法运算或者也可以简单地用二进制减法运算(补码加补码加法运算法运算)中最高位的进位情况来判别中最高位的进位情况来判别:有进位时有进位时CF=0,无进无进位时位时CF=1.减法的减法的OF位阐明带符号数的溢出位阐明带符号数的溢出,其设置方法为其设置方法为

50、:假设两假设两个数的符号相反个数的符号相反,而结果的符号与减数一样那么而结果的符号与减数一样那么OF=1,否否那么那么OF=0例例2:SUB DH,BP+4执行前执行前: (DH)=41H,(SS)=0000H(BP)=00E4H,(000E8H)=5AH0100 0001- 0101 1010 1110 0111 指令执行后指令执行后(DH)=0E7HZF=0,SF=1,CF=1,OF=00100 0001+ 1010 0110例例3:设设X,Y,Z均为双精度数均为双精度数,它们分别存放在地址为它们分别存放在地址为X,X+2; Y,Y+2; Z,Z+2的存储单元中的存储单元中,存放时高位字在

51、高地址存放时高位字在高地址,低位低位字在低地址中字在低地址中.用指令实现用指令实现:w x+y+24-z符号地址符号地址存储存储单元单元X*x*X+2Y#y#Y+2WW+2zZ -Z+2-解解:mov ax,x; mov dx,x+2; add ax,y; adc dx,y+2; dx,ax x add ax,24; dx,ax x+y adc dx,0; dx,ax x+y+24 sub ax,z; sbb dx,z+2; dx,ax x+y+24-24 mov w,ax mov w+2,dx3.乘法指令乘法指令MUL (unsigned multiple ) 无符号数乘法 IMUL (si

52、gned multiple ) 带符号数乘法 (1) MUL 无符号数乘法 格式: MUL SRC执行操作:字节操作:(AX) (AL)*(SRC) 字操作:(DX,AX) (AX)*(SRC)(2) IMUL 带符号数乘法 格式: IMUL SRC执行操作:与MUL一样,但必需是带符号数.在乘法指令在乘法指令,目的操作数必需是累加器目的操作数必需是累加器,字节运算为字节运算为AL,字运算为字运算为AX.两个两个8位数相乘得到的位数相乘得到的16位积存放在位积存放在AX中中,两个两个16位数相乘得位数相乘得到的到的32位积位积,存放在存放在DX,AX中中,其中其中DX存放高位字存放高位字,AX

53、存放低位字存放低位字指令中的源操作数可以运用除立刻数以外的任何一种寻址方式指令中的源操作数可以运用除立刻数以外的任何一种寻址方式.是字节运算还是字运算由源操作数确定是字节运算还是字运算由源操作数确定.例例1: 计算计算12*30 mov al,12 ;0CH mov bl,30 ;1EH mul bl 执行结果执行结果:(AX)=0168H=360字节乘法字节乘法,第二和第三条指令不第二和第三条指令不能简单地写为能简单地写为MUL 30例例2:如如(AL)=0B4H,(BL)=11H,求执行指求执行指令令IMUL BL和和MUL BL后的乘积值后的乘积值.(AL)=0B4H为无符号数为无符号数

54、180,带符号数带符号数 -76(BL)=11H为无符号数为无符号数17,带符号数带符号数 +17那么那么IMUL BL 的结果为的结果为: (AX)=0FAF4H=-1292 CF=OF=1那么那么MUL BL 的结果为的结果为: (AX)=0BF4H= 3060 CF=OF=1DIV (unsigned divide ) 无符号数除法 I DIV (signed divide ) 带符号数除法 (1) DIV 无符号数除法 格式: DIV SRC4.除法指令除法指令执行操作执行操作:16位被除数在位被除数在AX中中,8位除数为源操作数位除数为源操作数SRC,结结果的果的8位商在位商在AL,

55、8位余数在位余数在AH中中. (AL) (AX)/(SRC)的商的商 (AH) (AX)/(SRC)的余数的余数字节操作字节操作字操作字操作32位被除数在位被除数在DX,AX中中,16位除数为源操作数位除数为源操作数SRC,结果的结果的16位商在位商在AX,16位余数在位余数在DX中中. (AX) (DX,AX)/(SRC)的商的商 (DX) (DX,AX)/(SRC)的余数的余数(2) IDIV 带符号数除法 格式: IDIV SRC执行的操作:与与DIV一样一样,但操作数必需是带符号数但操作数必需是带符号数,商和余商和余数也都是带符号数数也都是带符号数,且余数的符号与被除数的符号一样且余数

56、的符号与被除数的符号一样例例3:求求4400除以除以36 mov ax,4400 mov bl,36 div bl 执行结果执行结果:(AL)= 7AH 商商 (AH)= 08H 余数余数例例4:设设X,Y,Z,均为均为16位带符号数位带符号数, 分别存放在分别存放在X,Y,Z,V单单元元,计算计算(V-(X*Y+Z-540)/X,要求计算结果的商存入要求计算结果的商存入V+2,余余数存入数存入V+4单元中单元中解解:mov ax,x; imul y; mov cx,ax; mov bx,dx; dx,ax x*y mov ax,z; store product in BX,CX cwd ;

57、dx,ax z sign_extended add cx,ax; adc bx,dx; bx,cx x*y+z sub cx,540 sbb bx,0符号地址符号地址存储存储单元单元X*x*YZ*y*VzV+2 -V+4-v bx,cx x*y+z-540 mov ax,v cwd dx,ax v sign_extended sub ax,cx sbb dx,bx dx,ax v-( x*y+z-540) idiv x ;商商 in AX,余数余数in DXmov v+2,axmov v+4,dx5.十进制调整指令十进制调整指令(1)紧缩紧缩BCD码调整指令码调整指令DAA (decimal

58、adjust for addition) 加法的十进制调加法的十进制调整整DAS (decimal adjust for subtraction) 减法的十进制减法的十进制调整调整(2)非紧缩非紧缩BCD码调整指令码调整指令AAA (ASCII adjust for addition) 加法的加法的ASCII码码调整调整AAS (ASCII adjust for subtraction) 减法的减法的ASCII码码调整调整AAM (ASCII adjust for multiplication) 乘法的乘法的ASCII码码调整调整AAD (ASCII adjust for division)

59、除法的除法的ASCII码码调整调整3.3.3 逻辑指令逻辑指令1.逻辑运算指令逻辑运算指令AND (and) 逻辑逻辑与与OR (or) 逻辑逻辑或或NOT (not) 逻辑逻辑非非XOR (exclusive or) 异或异或TEST (test) 测试测试(1)AND 逻辑与指令逻辑与指令格式格式: AND DST,SRC操作:操作: (DST) (DST) (SRC)(2)OR 逻辑或指令逻辑或指令格式格式: OR DST,SRC操作:操作: (DST) (DST) (SRC)(3)NOT 逻辑非指令逻辑非指令格式格式: NOT OPR操作:操作: (OPR) (OPR)(4)XOR 异

60、或指令异或指令格式格式: XOR DST,SRC操作:操作: (DST) (DST) (SRC)(5)TEST 测试指令测试指令格式格式: TEST OPR1,OPR2操作:操作: (OPR1) (OPR2)两个操作数相与的结果不保管两个操作数相与的结果不保管,只影响只影响条件标志条件标志例例1: mov al,0BFHandal,0F0H执行结果执行结果:(AL)=0B0H和和1与不变与不变,和和0与清零与清零,即屏蔽即屏蔽例例2: mov al, 00001001B or al, 01100000B执行结果执行结果: (AL)= 01101001B和和0或不变或不变,和和1或置或置1例例3

温馨提示

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

评论

0/150

提交评论