第4章指令系统汇编语言_第1页
第4章指令系统汇编语言_第2页
第4章指令系统汇编语言_第3页
第4章指令系统汇编语言_第4页
第4章指令系统汇编语言_第5页
已阅读5页,还剩87页未读 继续免费阅读

下载本文档

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

文档简介

1、2021年12月7日星期二1【本章提要本章提要】 本章重点讲述本章重点讲述IA-32IA-32系列系列CPUCPU的常用指令,和支持的常用指令,和支持EM64TEM64T技技术的高级术的高级Pentium4Pentium4以及以及CoreCore系列系列CPUCPU的的Intel64Intel64指令系统。指令系统。 【学习目标学习目标】熟练掌握汇编语言各种指令的功能和操作数在内存的存放规熟练掌握汇编语言各种指令的功能和操作数在内存的存放规律律掌握各种指令对操作数和寻址方式的特殊要求,明确不同指掌握各种指令对操作数和寻址方式的特殊要求,明确不同指令对标志寄存器的具体影响等方面令对标志寄存器的具

2、体影响等方面熟悉熟悉CPUCPU内部各寄存器的使用规则及其在指令执行过程中的隐内部各寄存器的使用规则及其在指令执行过程中的隐含约定含约定汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章22021年12月7日星期二80X86指令集指令集8086指令集指令集Pentium X指令集指令集Core2指令集指令集汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章32021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章42021年12月7日星期二符符 号号意意 义义OPRDOPRD,OPRDNOPRDN操作数操作数, , 第第N N个操作数如个

3、操作数如OPRD1OPRD1、OPRD2OPRD2、OPRD3OPRD3等等DESTDEST,SRCSRC目的操作数目的操作数, , 源操作数源操作数REG8REG88 8位通用寄存器位通用寄存器AH/AL/BH/BL/CH/CL/DH/DL/SIL/DIL/SPL/BPLAH/AL/BH/BL/CH/CL/DH/DL/SIL/DIL/SPL/BPL以及以及R8LR15LR8LR15LREG16REG161616位通用寄存器位通用寄存器AX/BX/CX/DX/SI/DI/BP/SPAX/BX/CX/DX/SI/DI/BP/SP以及以及R8WR15WR8WR15WREG32REG323232位通

4、用寄存器位通用寄存器EAX/EBX/ECX/EDX/ESI/EDI/EBP/ESPEAX/EBX/ECX/EDX/ESI/EDI/EBP/ESP以及以及R8DR15DR8DR15DREG64REG646464位通用寄存器位通用寄存器RAX/RBX/RCX/RDX/RSI/RDI/RBP/RSPRAX/RBX/RCX/RDX/RSI/RDI/RBP/RSP以及以及R8R15R8R15REGREGREG8/REGL6/REG32/REG64REG8/REGL6/REG32/REG64SEGSEG段寄存器段寄存器DS/CS/SS/ES/FS/GSDS/CS/SS/ES/FS/GSMEM8/MEM16

5、/MEM32/MEMEM8/MEM16/MEM32/MEM64M648 8位位/16/16位位/32/32位位/64/64位内存操作数位内存操作数MEMMEMMEM8/MEM16/MEM32/MEM64MEM8/MEM16/MEM32/MEM64IMM8/IMM16/IMM32/IMIMM8/IMM16/IMM32/IMM64M648 8位位/16/16位位/32/32位位/64/64位立即数位立即数IMMIMMIMM8/IMM16/IMM32/IMM64IMM8/IMM16/IMM32/IMM64汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章52021年12月7日星期二1.

6、通用数据传送通用数据传送2. 堆栈操作堆栈操作3. 地址传送地址传送4. 标志位传送标志位传送5. I/O数据传送数据传送传送类指令执行后对标志位都没有影响(除传送类指令执行后对标志位都没有影响(除SAHF、 POPF和和POPFD外)。外)。4.2.1 通用数据传送指令通用数据传送指令 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章62021年12月7日星期二o 指令格式:指令格式:MOV OPRD1,OPRD2o 功能:将源操作数传送给目标操作数功能:将源操作数传送给目标操作数【例例】 MOV AL,BH ;通用寄存器之间传送字节数据;通用寄存器之间传送字节数据 MOV D

7、S,AX ;通用寄存器与段寄存器(;通用寄存器与段寄存器(CS不能是目标)之间传送数据不能是目标)之间传送数据 MOV EAX,12345678H ;立即数传送到通用寄存器;立即数传送到通用寄存器 MOV RAX,BUFFER ;通用寄存器与存储器之间;通用寄存器与存储器之间64位数据传送位数据传送 MOV DATBP+DI,ES ;段寄存器与存储器之间传送数据;段寄存器与存储器之间传送数据汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章72021年12月7日星期二段寄存器段寄存器DS /CS/SS/ES/FS/GSDS /CS/SS/ES/FS/GS通用寄存器通用寄存器8 8位

8、、位、1616位、位、3232位、位、6464位位存储器存储器立即数立即数8 8位、位、1616位、位、3232位、位、6464位位汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章82021年12月7日星期二o指令格式:指令格式:XCHG OPRD1,OPRD2o功能:将功能:将OPRD1与与OPRD2进行交换。进行交换。二者都是源操作数也都是二者都是源操作数也都是目的操作数目的操作数。操作数可以是寄存器或内存数变量。操作数可以是寄存器或内存数变量。【例例】 MOVEAX,12345678H ;EAX12345678H MOVEBX,56781234H ;EBX56781234H

9、 XCHGEAX,EBX ; 交换后,交换后,EAX56781234H, EBX12345678H XCHG R8,100 ;R8寄存器内容与内存寄存器内容与内存100号地址号地址 中的中的64位数据交换位数据交换 注意:注意: 不能在两个存储单元之间直接交换数据;不能在两个存储单元之间直接交换数据; 段寄存器和立即数不能作为操作数。段寄存器和立即数不能作为操作数。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章92021年12月7日星期二o指令格式:指令格式:XLAT o功能:完成一个字节的查表转换,将数据段中偏移地址为功能:完成一个字节的查表转换,将数据段中偏移地址为BX/e

10、bx/RBX与与AL寄存器之和的存储单元的内容送入寄存器之和的存储单元的内容送入AL寄存寄存器,即:器,即:BX+ALAL。例:若例:若(BX)=0100H,(AL)=05H,执行执行XLAT指令指令后后,(AL)=2CH。注意:注意:由于由于AL只有只有8位位,所以表的长度不能超过所以表的长度不能超过256字节。字节。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章102021年12月7日星期二字节字节3 字节字节2 字节字节1 字节字节0汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章112021年12月7日星期二(1)PUSH/POP 堆栈是内存的一个数据区,

11、是按照先进后出原则组织的一段内存区堆栈是内存的一个数据区,是按照先进后出原则组织的一段内存区域,段寄存器域,段寄存器SS指向段基址,堆栈指针指向段基址,堆栈指针SP始终指向堆栈的顶部。始终指向堆栈的顶部。 PUSH REG16/REG32/REG64/MEM16/MEM32/MEM64 POP REG16/REG32/REG64/MEM16/MEM32/MEM64汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章122021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章132021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指

12、导第第4章章142021年12月7日星期二386新增指令新增指令 o PUSHAD指令将所有扩展通用寄存器的内指令将所有扩展通用寄存器的内容压入堆栈,压入的顺序是:容压入堆栈,压入的顺序是:EAX、ECX、EDX、EBX、ESP、EBP、ESI、EDI;o POPAD弹出的顺序与弹出的顺序与PUSHAD压入的相压入的相反(弹出到反(弹出到ESP的值被丢弃)。的值被丢弃)。注意:注意:在在6464位模式下,入栈和出栈指令的操作位模式下,入栈和出栈指令的操作数只能是数只能是1616位或位或6464位,不支持位,不支持3232位操作数位操作数。 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第

13、第4章章152021年12月7日星期二(1)有效地址传送指令)有效地址传送指令LEAo指令格式:指令格式:LEA REG16/REG32/REG64,MEM 功能:将源操作数在当前段内的有效地址(即地址偏移量)传送至目标操功能:将源操作数在当前段内的有效地址(即地址偏移量)传送至目标操作数。作数。区别区别:MOV指令传送操作数的内容,而指令传送操作数的内容,而LEA传送的是操作数的地址。传送的是操作数的地址。MOV DI,LISTS ;将变量;将变量LISTS的内容传送至的内容传送至DI,DI=1234HLEA DX,LISTS ;将变量;将变量LISTS的偏移地址传送至的偏移地址传送至DX,

14、DX=2000HLEA AX,3000H ;将;将3000H单元的偏移地址传送至单元的偏移地址传送至AX,AX=3000HLEA ESI,LISTS ;将变量;将变量LISTS的的32位偏移地址传送至位偏移地址传送至ESI, ESI=00002000HLEA RDX,LISTS ;将变量;将变量LISTS的的64位有效地址传送至位有效地址传送至RDXLEA EDX,RAX ;将;将RAX的的64位地址的低位地址的低32位(即位(即EAX的值)的值) 传送至传送至EDXLEA SI,RAX ;将;将RAX的的64位地址的低位地址的低16位(即位(即AX的值)传送至的值)传送至SI汇编语言程序设计

15、及上机指导汇编语言程序设计及上机指导第第4章章162021年12月7日星期二o指令格式:指令格式:LDSREG16/REG32,MEM LESREG16/REG32,MEMo指令功能:都是将由源操作数偏移地址决定的双字(或三字)单元中的第一指令功能:都是将由源操作数偏移地址决定的双字(或三字)单元中的第一个(或前两个)字的内容送入指令指定的个(或前两个)字的内容送入指令指定的16位(或位(或32位)通用寄存器,第位)通用寄存器,第二个(或第三个)字的内容传送给段寄存器二个(或第三个)字的内容传送给段寄存器DS或或ES,这两个段寄存器是隐,这两个段寄存器是隐含的目的操作数。含的目的操作数。TAB

16、1 DF 123456789ABCH ;定义;定义TAB1为为6个字节数据个字节数据TAB2 DD 56781234H ;定义;定义TAB2为为4个字节数据个字节数据LDS BX,TAB1 ;将;将9ABCHBX,5678HDSLES SI,TAB2 ;将;将1234HSI,5678HESLES EAX,TAB1 ;将;将56789ABCHEAX,1234HES只适用于只适用于16位或位或32位地址模式,在位地址模式,在64位地址下不能使用位地址下不能使用 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章172021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上

17、机指导第第4章章182021年12月7日星期二(1)标志寄存器读写指令)标志寄存器读写指令LAHF/SAHFo 指令指令LAHF用于将标志寄存器的低字节(含用于将标志寄存器的低字节(含SF、ZF、AF、PF和和CF)读出后传送到)读出后传送到AH寄存器。寄存器。 不影响标志位不影响标志位o 指令指令SAHF与与LAHF的操作相反,它把寄存器的操作相反,它把寄存器AH中的内容写入中的内容写入标志寄存器的低字节,取代某些标志位(标志寄存器的低字节,取代某些标志位(SF、ZF、AF、PF和和CF)的原来状态。)的原来状态。 指指 令令 书书 写写 格格 式式指指 令令 功功 能能LAHFLAHFSA

18、HFSAHFPUSHFPUSHFPOPFPOPFPUSHFDPUSHFDPOPFDPOPFD将将FLAGFLAG低字节装入低字节装入AHAH寄存器寄存器将将AHAH内容装入内容装入FlagFlag低字节低字节将将FLAGFLAG内容压入堆栈内容压入堆栈从堆栈弹出从堆栈弹出FlagFlag内容内容将将EFLAGEFLAG内容压入堆栈内容压入堆栈(386(386新增新增) )从堆栈弹出从堆栈弹出3232位到位到EFLAG(386EFLAG(386新增新增) ) 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章192021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上

19、机指导第第4章章202021年12月7日星期二(1)简单输入输出指令)简单输入输出指令IN/OUT指令格式:指令格式:IN AL/AX,IMM8/DX OUT IMM8/DX,AL/AX 指令功能:专门用于在指令功能:专门用于在AL或或AX寄存器与寄存器与I/O端口之间传送数据端口之间传送数据 例:例:IN AX,30H ;从端口;从端口30H输入输入16位数到位数到AXMOV DX,300HIN AL,DX ;从端口;从端口300H输入输入8位数到位数到ALOUT 60H,AL ;将;将8位数从位数从AL输出到端口输出到端口60HOUT DX,AX ;将;将16位数从位数从AX输出到输出到D

20、X指定的端口指定的端口在在80386以后的以后的32位位CPU中,还可以通过中,还可以通过EAX对对I/O端口进行双字数据操作。端口进行双字数据操作。在在64位系统中,使用方法和位系统中,使用方法和16位位/32位方式下相同。位方式下相同。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章212021年12月7日星期二INSB :从:从DX指定的端口输入一个指定的端口输入一个字节字节到到ES:DI指定的指定的 内存单元中去。内存单元中去。INSW:从:从DX指定的端口输入一个指定的端口输入一个字字到到ES:DI指定的内指定的内 存单元中去。存单元中去。 INSD:从:从DX指定的端

21、口输入指定的端口输入双字双字到到ES:DI指定的内存指定的内存 单元中去。单元中去。n 若方向标志若方向标志DF=0,则,则DI中的地址自动中的地址自动+1(输入字节输入字节)或或+2(输入字输入字) 或或+4(输入双字输入双字);n 若方向标志若方向标志DF=1,则,则DI中的地址自动中的地址自动-1(输入字节输入字节)或或 -2(输入字输入字) 或或-4(输入双字输入双字)。n 在在64位方式下目标地址偏移量由位方式下目标地址偏移量由EDI或或RDI指明,指令功指明,指令功能和用法不变能和用法不变 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章222021年12月7日星期二

22、汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章232021年12月7日星期二除扩展指令外,指令的执行除扩展指令外,指令的执行结果都影响状态标志位结果都影响状态标志位 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章242021年12月7日星期二(1)加减法指令)加减法指令ADD/SUBp指令格式:指令格式: ADD reg / mem,reg/ mem/ imm SUB reg / mem,reg/ mem/ imm p功能:功能: ADD完成两个操作数的加运算,结果送入第一个操作数;完成两个操作数的加运算,结果送入第一个操作数; SUB完成第一个操作数减去第二个

23、操作数,差送回到第一个操作数。完成第一个操作数减去第二个操作数,差送回到第一个操作数。 0110010110100000+)1011011110011110 10001110100111110结果非零:结果非零:ZF=0无进位:无进位: AF=0低低8位为偶数个位为偶数个1:PF=0最高位有进位:最高位有进位:CF=1最高位为最高位为0:SF=0OF=最高位进位最高位进位1次高位进位次高位进位1,则,则OF=0【例例】 设设AX65A0H,BX=B79EH,指令,指令ADD BX,AX的执行情况如下:的执行情况如下:BX=1D3EH,CF=1,SF=0,OF=0,AF=0,PF=0,ZF=0。

24、汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章252021年12月7日星期二o指令格式:指令格式:ADCOPRD1,OPRD2 SBBOPRD1,OPRD2o指令功能:常用于长度为两个字或两个字以上的操作数的运算,指令功能:常用于长度为两个字或两个字以上的操作数的运算,加法操作时在最低位加上进位位加法操作时在最低位加上进位位CF,或减法操作时减去借位位,或减法操作时减去借位位CF。例如:如果有一个例如:如果有一个64位数据已存放在位数据已存放在EAX(高高32位位)和和EBX(低低32位位)中中,现要加上一个常数现要加上一个常数123456789ABCDEF0H,这时可用下面这

25、时可用下面两条指令实现:两条指令实现: ADD EBX, 9ABCDEF0H ADC EAX, 12345678H汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章262021年12月7日星期二o指令格式:指令格式: INC MEM/ REG DEC MEM/ REGo功能:是单操作数指令,完成对指定的操作数加功能:是单操作数指令,完成对指定的操作数加1/减减1(1是隐含是隐含的),然后返回此操作数。的),然后返回此操作数。注意注意:指令执行的结果影响标志位:指令执行的结果影响标志位AF、OF、PF、SF和和ZF,而不影,而不影响进位标志响进位标志CF。 例:例:INC CX ;C

26、X寄存器中的内容加寄存器中的内容加1 DEC WORD PTR EAX;把;把EAX指向的字存储单元内容减指向的字存储单元内容减1在在64位方式下,大多数位方式下,大多数INC/DEC指令都是可以使用的。但是单字节指令都是可以使用的。但是单字节编码的编码的INC/DEC指令因为与指令因为与16个个REX前缀代码相同,所以不能前缀代码相同,所以不能使用。使用。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章272021年12月7日星期二n若操作数不是若操作数不是0,则总是使,则总是使CF=1,否则置,否则置0;n若在字节操作时对若在字节操作时对-128、或在字操作时对、或在字操作时

27、对-32768求补、或在求补、或在32位操作时对位操作时对-232求补则操作数没变化,但溢出标志求补则操作数没变化,但溢出标志OF=1。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章282021年12月7日星期二1)如果是两个无符号数比较,可根据)如果是两个无符号数比较,可根据CF来判断:来判断:o 若若CF1,则,则OPRD1OPRD2。2)如果是两个有符号数比较,要根据)如果是两个有符号数比较,要根据SF和和OF来判断:来判断:若若SF OF0,则,则OPRD1OPRD2;o 若若SF OF1,则,则OPRD1OPRD2。3)不管操作数有无符号)不管操作数有无符号,若若ZF

28、1则两者相等则两者相等,否则不等否则不等.汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章292021年12月7日星期二n 如果相等则如果相等则ZF=1,并将源操作数送入目标操作数;,并将源操作数送入目标操作数;n 否则否则ZF=0,并将,并将REG /MEM送到相应的累加器。送到相应的累加器。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章302021年12月7日星期二n 若相等,则置若相等,则置ZF=1,并将,并将ECX:EBX的值传送的值传送到到MEM64指定的内存地址;指定的内存地址;n 否则,置否则,置ZF=0,将,将MEM64的的8字节内容传送到字节内容

29、传送到EDX:EAX。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章312021年12月7日星期二(1)乘法指令)乘法指令MUL/IMUL指令格式:指令格式:MUL REG/MEM IMUL REG/MEM 功能:分别用于实现无符号数的乘法和有符号数的乘法运算。功能:分别用于实现无符号数的乘法和有符号数的乘法运算。 它们都只有一个源操作数,可以是寄存器或存储器,它们都只有一个源操作数,可以是寄存器或存储器, 而目标操作数隐含规定在累加器中。而目标操作数隐含规定在累加器中。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章322021年12月7日星期二(32位乘积位乘

30、积)(16位乘积位乘积)(8位源操作数位源操作数)ALsrcAX字节乘法字节乘法AX(16位源操作数位源操作数)srcDX AX字乘法字乘法(64位乘积位乘积)(32位源操作数位源操作数)EAXsrcEDX EAX32位乘法位乘法(128位乘积位乘积)(64位源操作数位源操作数)RAXsrcRDX RAX64位乘法位乘法当乘积的高半部分(字节相乘时为当乘积的高半部分(字节相乘时为AH、字相乘时为、字相乘时为DX、双字相乘时为、双字相乘时为EDX、64位相乘时为位相乘时为RDX)不为)不为0,则标志,则标志CF=OF=1,表示在,表示在AH(或(或DX、EDX、RDX)中存有结果的有效数字;否则

31、)中存有结果的有效数字;否则CF=OF=0 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章332021年12月7日星期二商余数余数商32位被除数16位被除数AX8位ALAHDX AX16位AXDX余数商64位被除数EDX EAX32位EAXEDX余数商128位被除数RDX RAX64位RAXRDX若商超过存放它的寄存器的容量(分别为若商超过存放它的寄存器的容量(分别为8位、位、16位、位、32位或位或64位)则引位)则引起起0型中断(即除法出错中断),商和余数的值不能确定。型中断(即除法出错中断),商和余数的值不能确定。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4

32、章章342021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章352021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章362021年12月7日星期二1基本符号扩展指令基本符号扩展指令CBW/CWDE/CDQEp指令格式:指令格式:CBW CWDE CDQEp功能:操作数隐含规定在累加器中。功能:操作数隐含规定在累加器中。 CBW将将AL中的字节符号数的符号扩展到中的字节符号数的符号扩展到AX中;中; CWDE将将AX中的字有符号数的符号扩展到中的字有符号数的符号扩展到EAX中;中; CDQE将将EAX中的字有符号数的符号扩展

33、到中的字有符号数的符号扩展到RAX中,只能在中,只能在64位方式位方式下使用。扩展规则如下:下使用。扩展规则如下:若若AL80H,则,则AH0 若若AL80H,则,则AH0FFH若若AX8000H,则,则EAX高高16位位0 若若AX8000H,则,则EAX高高16位位0FFFFH若若EAX9或标志或标志AF=1,则,则nALAL6nAHAH1nAF1nCFAFnALAL&0FH 00000110 00010010 (AL&0FH9)00000110 00010010 (AL&0FH9) 00001111 (AL 00001111 (AL与与0FH)0FH) 00000

34、110 00000010 (62 00000110 00000010 (62的的BCDBCD码码) ) 00000010 00000111 (2700000010 00000111 (27的的BCDBCD码码) )+ 00000011 00000101 (35+ 00000011 00000101 (35的的BCDBCD码码) ) 00000101 00001100 (AL&0FH9)00000101 00001100 (AL&0FH9)+ 00000001+00000110 (AH+1,AL+6+ 00000001+00000110 (AH+1,AL+6调整调整) )汇编语言

35、程序设计及上机指导汇编语言程序设计及上机指导第第4章章402021年12月7日星期二若(若(AL&0FH)9或或AF=1,则,则o ALAL6o AF1若若AL9FH或或CF=1,则,则o ALAL60Ho CF1;【例例3.31】AL=65H(十进制数(十进制数65的的BCD码),码),BH=47H(十进制数(十进制数47的的BCD码),用下列指令可得到这两个数和的正确结果。码),用下列指令可得到这两个数和的正确结果。SUB AL,BH ;ALALBH (AL的值为的值为1EH)DAS ;将;将AL的内容调整为的内容调整为18H汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第

36、4章章412021年12月7日星期二nAHAL/0AH;AH AL被被0AH除的商除的商nALAL0AH;AL AL被被0AH除的余数除的余数nALAH0AH+ALnAH0汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章422021年12月7日星期二一逻辑运算指令一逻辑运算指令汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章432021年12月7日星期二nAND实现逻辑实现逻辑“与与”操作操作: 例:例: AND AL,0FH ;AL的高的高4位被屏蔽位被屏蔽,低低4位被析取位被析取nOR实现逻辑实现逻辑“或或”操作操作: 例:例: OR BX,0003H ;BX寄

37、存器的第寄存器的第0位和第位和第1位置位置1nXOR实现逻辑实现逻辑“异或异或”操作操作: 例:例: XOR EBX,00000001H ;改变改变BX寄存器第寄存器第0位的状态位的状态汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章442021年12月7日星期二主要用于测试某一操作数的主要用于测试某一操作数的一位或几位的状态。一位或几位的状态。TEST AL,01HJNZ THAT ;ZF0,则,则AL寄存器的第寄存器的第0位为位为1,转移到,转移到THATTHAT:汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章452021年12月7日星期二汇编语言程序设计及上

38、机指导汇编语言程序设计及上机指导第第4章章462021年12月7日星期二 -若移位计数值不为若移位计数值不为1,则,则OF状态不定。状态不定。SHL CF0SAL CF0ROL CFRCL CFSHRCF0SARCFRORCFRCRCF汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章47汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章48 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章492021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章502021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上

39、机指导第第4章章512021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章522021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章532021年12月7日星期二 若若CX=0,则退出,则退出REP操作;否则:操作;否则: CXCX1 执行执行REP后面的数据串指令后面的数据串指令 重复重复 若若CX=0或或ZF=0,则停止重复过程。,则停止重复过程。 若若CX=0或或ZF=1,停止重复过程。,停止重复过程。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章542021年12月7日星期二n MOVSB;字节串传送;

40、字节串传送n MOVSW;字串传送;字串传送n MOVSD ;双字串传送;双字串传送n MOVSQ ;4字串传送字串传送汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章552021年12月7日星期二LEASI,SOURCELEADI,DESTMOVCX,50;设置循环操作次数;设置循环操作次数100/2CLD;设置方向标志;设置方向标志DF0GO_ON:MOVSWDECCXJNZGO_ON 若采用重复前缀,则上述程序简化为:若采用重复前缀,则上述程序简化为:LEASI,SOURCELEADI,DESTMOVCX,50;设置循环操作次数;设置循环操作次数CLD;设置方向标志;设置方

41、向标志DF0REPMOVSW汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章562021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章572021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章582021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章592021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章602021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章612021年12月7日星期二例:将首地址为例:将

42、首地址为DS:SRC的的32位数据串中值为位数据串中值为87654321H的元素送的元素送到首地址为到首地址为ES:DST的内存区中。字符串长度为的内存区中。字符串长度为1000H字节。字节。 CLD ;DF=0,增量方向增量方向 LEA ESI,SRC ;字符串首地址送字符串首地址送DS:SI LEA EDI,ES:DST ;目标地址送目标地址送ES:DI MOV ECX,400H ;字符串长度字符串长度1000H/4=400HCONTINUE: LODSD ;取字符串的一个元素取字符串的一个元素 CMP EAX, 87654321H ;字符串元素为字符串元素为87654321H吗吗? JN

43、E NEXT ;不是不是,继续取下一个元素继续取下一个元素 STOSD ;是是,存入首地址为存入首地址为ES:DST的内存区中的内存区中NEXT: DEC ECX JNZ CONTINUE利用利用DEC和和JNZ指令控制串操作指令的重复执行次数。当指令控制串操作指令的重复执行次数。当(ECX)0时,程序重复循环,直至时,程序重复循环,直至(ECX)=0为止。为止。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章622021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章632021年12月7日星期二例:例: MOVBX,1000HJMPBX;程序将

44、转向;程序将转向1000H,即,即IP1000HJMPWORD PTR BX+20H设设DS2000H,21020H=34H,21021H=12H,则第二个,则第二个JMP将将程序转向程序转向1234H,即,即IP1234H。(4)段间直接转移)段间直接转移:JMPFAR PTR lable功能功能:无条件转移到指定段内的目标地址:无条件转移到指定段内的目标地址lable,是绝对转移指令。,是绝对转移指令。例:例: CODE1SEGMENTCODE2 SEGMENTJMPFAR PTR DEST DEST:CODE1 ENDS CODE2 ENDSo目标地址也可直接用数值表达式给出,这时可省略

45、目标地址也可直接用数值表达式给出,这时可省略FAR属性说明。属性说明。 JMP FAR PTR 2000H:0100H程序将转向段地址为程序将转向段地址为2000H,偏移地址为,偏移地址为0100H的单元的单元汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章642021年12月7日星期二(5)段间间接转移段间间接转移:JMPmem功能:功能:程序将转向由程序将转向由mem指定的双字指针中第一个字单元的内容指定的双字指针中第一个字单元的内容作为作为IP,第二个字单元的内容作为,第二个字单元的内容作为CS的目标地址。的目标地址。例:例: MOVSI,0100HJMPDWORD PTR

46、 SI把把DS:SI即即DS:0100H和和DS:0101H两单元的字送两单元的字送IP,而,而把把DS:0102H和和DS:0103H两单元的字送两单元的字送CS。程序转入由。程序转入由新的新的CS和新的和新的IP决定的目标地址。决定的目标地址。o在在32位保护模式下,段内转移的目标地址为位保护模式下,段内转移的目标地址为32位偏移地址,位偏移地址,段间转移的目标地址为段间转移的目标地址为48位虚拟地址(位虚拟地址(16位段选择符:位段选择符:32偏偏移地址)。移地址)。例:例: JMP EBX ;段内转移,;段内转移,EIP=EBX JMP FWORD PTR EBX ;段间转移,目标地址

47、为段间转移,目标地址为EBX指向的指向的48位虚拟地址,位虚拟地址, ;CS=其中的高其中的高16位,位,EIP=其中的低其中的低32位位汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章652021年12月7日星期二在在64位模式下,指令指针为位模式下,指令指针为RIP。JMP指令的执行分为相对转移和绝指令的执行分为相对转移和绝对转移两种情况:对转移两种情况:o若为相对转移,若为相对转移,则用则用RIP寄存器与机器码中的位移量字段相加的和寄存器与机器码中的位移量字段相加的和修改修改RIP值,此时位移量字段不能超过值,此时位移量字段不能超过32位,并将其符号扩展为位,并将其符号扩展

48、为64位再相加;位再相加;o若为绝对转移,若为绝对转移,则把机器码中指出的寄存器或内存单元的值直接填则把机器码中指出的寄存器或内存单元的值直接填入入RIP(若不足(若不足64位将进行位将进行0扩展),实现扩展),实现64位地址空间的转移。位地址空间的转移。【例例】 JMP 30000H ;若原来;若原来RIP=20000H,则将,则将RIP加加10000H, 实现实现相对转移相对转移 JMP R15 ;程序将转向;程序将转向R15指向的地址,即指向的地址,即RIPR15, 实现实现绝对转移绝对转移汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章662021年12月7日星期二汇编语

49、言程序设计及上机指导汇编语言程序设计及上机指导第第4章章672021年12月7日星期二例:比较无符号数例:比较无符号数FEH和和01H的大小,执行下面的指令后,将的大小,执行下面的指令后,将转移到转移到ABOVE处继续执行指令。处继续执行指令。 MOV AL,0FEH CMP AL,01H JA ABOVE ABOVE:汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章682021年12月7日星期二表表3.9中的最后四条指令检测的是中的最后四条指令检测的是SF、OF以及以及ZF标志,表示两个有符号标志,表示两个有符号数间的大小关系。数间的大小关系。例:例:比较有符号数比较有符号数F

50、EH和和01H的大小,下面的指令,将不转移到的大小,下面的指令,将不转移到greater,而是继续执行,而是继续执行JG下面的一条指令,因为有符号数下面的一条指令,因为有符号数0FEH01H。 MOV AL,0FEH CMP AL,01H JG GREATER汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章692021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章702021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章712021年12月7日星期二操作:操作:PUSH CS ;CS入栈入栈 PUSH IP ;I

51、P入栈入栈 (IP)偏移地址偏移地址 ;IP由指令中的偏移地址取代由指令中的偏移地址取代 (CS)段地址段地址 ;CS由指令中的段地址取代由指令中的段地址取代 其一:调用时不仅要保护偏移地址,而且要保护段地其一:调用时不仅要保护偏移地址,而且要保护段地 址,先址,先CS压栈,然后压栈,然后IP压栈;压栈; 其二:其二:CS和和IP的值不是用的值不是用CALL指令的下一条指令地址指令的下一条指令地址 加上位移量取代,而是直接将加上位移量取代,而是直接将DST的段地址和偏的段地址和偏 移地址送入移地址送入CS:IP,是一种绝对调用指令。,是一种绝对调用指令。例:例: CALL 1000H:0100

52、H CALL FAR PTR SUB_PROC 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章722021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章732021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章742021年12月7日星期二;主程序;主程序MOV AX,N1;子程序;子程序APUSH AX PROG_A PROC NEARMOV AX,N2 PUSH AX RET 4CALL PROG_APROC_A ENDPMOV SUM,AX汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章75

53、2021年12月7日星期二n若是段内调用,则将若是段内调用,则将EIP的值进栈;的值进栈;n若是段间调用,则先将若是段间调用,则先将CS的值零扩展为双字后再进栈,的值零扩展为双字后再进栈,然后将然后将EIP的值进栈,总共进栈的值进栈,总共进栈8个字节。个字节。n段内返回时弹出栈顶的段内返回时弹出栈顶的4个字节到个字节到EIP;n段间返回时先弹出栈顶的段间返回时先弹出栈顶的4个字节到个字节到EIP,然后再弹出,然后再弹出4个字节,其中的低个字节,其中的低16位进入到位进入到CS。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章762021年12月7日星期二n一种是可以通过一种是可以

54、通过32位位移量实现位位移量实现相对转移相对转移,完成调用,完成调用功能;功能;n另一种方法是通过指令给出的另一种方法是通过指令给出的64位存储器或寄存器内位存储器或寄存器内容修改容修改RIP,实现,实现绝对转移绝对转移而完成调用功能。而完成调用功能。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章772021年12月7日星期二nLOOPZ/LOOPE指令指令:使:使CX-1CX,若,若CX0且且ZF=1,则循环转移至目标标号;否则(则循环转移至目标标号;否则(CX=0或或ZF=0),顺序执),顺序执行行LOOPZ/LOOPE后面的指令。后面的指令。nLOOPNZ/LOOPNE同

55、同LOOPZ/LOOPE指令类似,只不指令类似,只不过转移条件是过转移条件是CX0且且ZF=0。nJCXZ指令指令不影响不影响CX的内容,此指令仅在的内容,此指令仅在CX0时,控制转时,控制转移到目标标号,否则顺序执行移到目标标号,否则顺序执行JCXZ的下一条指令。的下一条指令。 汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章782021年12月7日星期二例:检查当前数据段所在的例:检查当前数据段所在的64K字节内存是否能够正确地进行读写操作。可以字节内存是否能够正确地进行读写操作。可以先向每个字节写入数据先向每个字节写入数据10101010B,然后读出来进行比较。若正确则转,

56、然后读出来进行比较。若正确则转至目标标号至目标标号OK的程序段,否则进入出错处理程序段的程序段,否则进入出错处理程序段ERROR。程序如下:。程序如下:MOV CX,0000HMOV BX,0000HMOV AL,10101010BAGAIN:MOV BYTE PTR BX,ALINC BXCMP BYTE PRT BX-1,ALLOOPZ ALAINJCXZ OKERROR:;出错处理;出错处理OK:;读写正确;读写正确o当程序执行当程序执行JCXZ指令时,可能有两种情况:指令时,可能有两种情况: CX=0,这表示所有单元的读写都正确;这表示所有单元的读写都正确; CX0,但,但ZF=0,表

57、示检查到某一单元时,写入与读出不一致,表示检查到某一单元时,写入与读出不一致, 即出错。即出错。 于是于是JCXZ指令根据指令根据CX寄存器内容是否为寄存器内容是否为0(为(为0表示正确,不为表示正确,不为0表示出错)使表示出错)使程序发生分支,进入不同的程序段。程序发生分支,进入不同的程序段。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章792021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章802021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章812021年12月7日星期二汇编语言程序设计及上机指导汇

58、编语言程序设计及上机指导第第4章章822021年12月7日星期二作用是实现作用是实现CPU与外部事件的同步。与外部事件的同步。(1)处理器暂停指令)处理器暂停指令HLT 作用:使程序停止执行,处理器进入暂停状态。它不影响任何标志。作用:使程序停止执行,处理器进入暂停状态。它不影响任何标志。 只有当以下三种情况之一发生,才能使只有当以下三种情况之一发生,才能使CPU结束暂停状态:结束暂停状态:o在在CPU的的RESET线上有复位信号;线上有复位信号;o在在CPU的的NMI线上有请求;线上有请求;o在中断允许情况下(即标志在中断允许情况下(即标志IF=1),),CPU的的INTR线上有请求线上有请

59、求。所以,所以,HLT指令常在程序中用于等待中断。当因中断使指令常在程序中用于等待中断。当因中断使CPU脱离暂停而脱离暂停而去执行中断服务程序时,中断保护的断点去执行中断服务程序时,中断保护的断点CS:IP值应指向值应指向HLT指令指令的下一条指令。的下一条指令。汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章832021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章842021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章852021年12月7日星期二汇编语言程序设计及上机指导汇编语言程序设计及上机指导第第4章章862021年12月7日星期二1高级语言类指令有三条:高级语言类指令有三条:边界检测指令边界检测指令BOUND reg16/reg32,mem作用:检查一个值是否在指定的内存范围内,常用于确定一个有符号的下标作用:检查一个值是否在指定的内存范围内,常用于确定一个有符号的下标值,以便知道它是否在一个数组范围内,若不在值,以便知道它是否在一个数组范围内,若不在(即下标出界即下标出界),则产生,则产生INT 5异常中断。异常中断。 其中第一个操作数可以是一个其中第一个操作数可以是

温馨提示

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

评论

0/150

提交评论