书签 分享 收藏 举报 版权申诉 / 98
上传文档赚钱

类型80X86指令系统解析课件.ppt

  • 上传人(卖家):晟晟文业
  • 文档编号:4393150
  • 上传时间:2022-12-05
  • 格式:PPT
  • 页数:98
  • 大小:285.33KB
  • 【下载声明】
    1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
    2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
    3. 本页资料《80X86指令系统解析课件.ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
    4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
    5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
    配套讲稿:

    如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。

    特殊限制:

    部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。

    关 键  词:
    80 X86 指令系统 解析 课件
    资源描述:

    1、1第第3章章 80X86指令系统指令系统3.1 指令格式3.2 寻址方式3.3 数据传送指令3.4 算术运算指令3.5控制转移类指令3.6串操作指令3.7 逻辑运算指令23.1 指令格式指令格式 指令由操作码和操作数构成,操作码说明指令的功能,用指令助记符表示;操作数由各种不同的寻址方式提供。汇编语言的指令格式如下:指令助记符 操作数1,操作数2,操作数3;注释3 常见的指令格式举例:MOV AX,15H CMP AX,BX43.2 寻址方式寻址方式 在指令中,计算操作数或操作数存放位置的方法称为寻址方式 80 x86系统有七种基本的寻址方式:立即寻址方式、寄存器寻址方式、直接寻址方式、寄存器

    2、间接寻址方式、寄存器相对寻址方式、基址加变址寻址方式、相对基址加变址寻址方式等 53.2.1 立即寻址方式立即寻址方式 MOV AH,80H;指令执行后(AH)=80H ADD AX,1234H;假定指令执行前(AX)=0014H,则执行后(AX)=0014H+1234H=1248H MOV ECX,123456H;假定指令执行前(ECX)=A0014H,则执行后(ECX)=A0014H+123456H=1C346AH MOV B1,12H ;把立即数12H送到名称为B1的字节存储单元中 MOV W1,3456H;把立即数3456H送到名称为W1的字存储单元中63.2.2 寄存器寻址方式寄存器

    3、寻址方式 1 源操作数是寄存器寻址方式源操作数是寄存器寻址方式 2 目的操作数是寄存器寻址方式目的操作数是寄存器寻址方式 3 源和目的操作数都是寄存器寻址方式源和目的操作数都是寄存器寻址方式73.2.3 直接寻址方式直接寻址方式 操作数存放在数据段中,所以,其物理地址将由数据段寄存器DS和指令中给出的有效地址直接形成,但如果使用段超越前缀,那么,操作数可存放在其它段 8 例例3.2 假设有指令:MOV BX,1234H,在执行时,(DS)=2000H,内存单元21234H的值为5D2AH。问该指令执行后,BX的值是什么?解:根据直接寻址方式的寻址规则,把该指令的具体执行过程用图3.2来表示。从

    4、图3.2中,可看出执行该指令要分三步:9 1由于1234H是一个直接地址,它紧跟在指令的操作码之后,随取指令而被读出;2访问数据段的段寄存器是DS,所以,用DS的值和偏移量1234H相加,得存储单元的物理地址:21234H;3取单元21234H的值5D2AH,并按“高高低低”的原则存入寄存器BX中。所以,在执行该指令后,BX的值就为5D2AH。103.2.4 寄存器间接寻址方式寄存器间接寻址方式 操作数在存储器中,操作数的有效地址用SI、DI、BX和BP等四个寄存器之一来指定,称这种寻址方式为寄存器间接寻址方式。该寻址方式物理地址的计算方法如下:11 EA=(DI)/(SI)/(BP)/(BX

    5、)PA=(DS)*16+EA 寄存器间接寻址方式读取存储单元的原理如图3.3所示。在不使用段超越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为SS(即:堆栈段)。12 例例3.4 假设有指令:MOV BX,DI,在执行时,(DS)=1000H,(DI)=2345H,存储单元12345H的内容是4354H。问执行指令后,BX的值是什么?解:根据寄存器间接寻址方式的规则,在执行本例指令时,寄存器DI的值不是操作数,而是操作数的地址。13 该操作数的物理地址应由DS和DI的值形成,即:PA=(DS)*16+(

    6、DI)=1000H*16+2345H=12345H。所以,该指令的执行效果是:把从物理地址为12345H开始的一个字存储单元中的值传送给BX寄存器。其执行过程如右图3.4所示 143.2.5 寄存器相对寻址方式寄存器相对寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)或变址寄存器(SI、DI)的内容和指令中的8位/16位偏移量之和。其有效地址的计算公式如下式所示。EA=(BX/(BP)+位移量,PA=(DS)*16+EA 在不使用段跨越前缀的情况下,有下列规定:若有效地址用SI、DI和BX等之一来指定,则其缺省的段寄存器为DS;若有效地址用BP来指定,则其缺省的段寄存器为S

    7、S。15 例例3.5 假设指令:MOV BX,SI+100H,在执行它时,(DS)=1000H,(SI)=2345H,内存单元12445H的内容为39A8H,问该指令执行后,BX的值是什么?解:根据寄存器相对寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(SI)+100H=2345H+100H=2445H 该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2445H=12445H。所以,该指令的执行效果是:把从物理地址为12445H开始的一个字单元中的值传送给BX。其执行过程如图3.5所示 163.2.6 基址加变址寻址方式 操作数

    8、在存储器中,其有效地址是一个基址寄存器(BX、BP)和一个变址寄存器(SI、DI)的内容之和。其有效地址的计算公式如下式所示:EA=(BX)/(BP)+(SI)/(DI);PA=(DS)*16+EA 。在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则缺省的段寄存器为SS;否则,缺省的段寄存器为DS。17 例例3.6 假设指令:MOV BX,BX+SI,在执行时,(DS)=1000H,(BX)=2100H,(SI)=0011H,内存单元12111H的内容为1234H。问该指令执行后,BX的值是什么?解:根据基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(

    9、BX)+(SI)=2100H+0011H=2111H,该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=1000H*16+2111H=12111H。所以,该指令的执行效果是:把从物理地址为12111H开始的一个字单元中的值传送给BX寄存器,所以,执行后(BX)=1234H。183.2.7 相对基址加变址寻址方式相对基址加变址寻址方式 操作数在存储器中,其有效地址是一个基址寄存器(BX、BP)的值、一个变址寄存器(SI、DI)的值和指令中的8位/16位偏移量之和。其有效地址的计算公式如下式所示:EA=(BX)/(BP)+(SI)/(DI)+位移量,PA=(DS)*16+E

    10、A.在不使用段超越前缀的情况下,规定:如果有效地址中含有BP,则其缺省的段寄存器为SS;否则,其缺省的段寄存器为DS。19 例例3.7 假设指令:MOV AX,BX+SI+200H,在执行时,(DS)=3000H,(BX)=2100H,(SI)=0010H,内存单元32310H的内容为5678H。问该指令执行后,AX的值是什么?20 解:根据相对基址加变址寻址方式的规则,在执行本例指令时,源操作数的有效地址EA为:EA=(BX)+(SI)+200H=2100H+0010H+200H=2310H 该操作数的物理地址应由DS和EA的值形成,即:PA=(DS)*16+EA=3000H*16+2310

    11、H=32310H.所以,该指令的执行效果是:把从物理地址为32310H开始的一个字单元中的值传送给AX寄存器。执行后(AX)=5678H 213.3 数据传送指令(1)数据传送指令。(2)算术运算指令。(3)控制转移指令。(4)串操作指令。(5)逻辑运算指令。(6)输入输出指令。(7)处理器控制指令。(8)保护方式指令。223.3.1 通用数据传送指令通用数据传送指令 1.传送指令 格式:MOV DEST,SRC 功能:把一个字节,字或双字从源操作数SRC传送至目的操作数DEST。执行的操作:(DEST)(SRC)23 例例 3.9 CPU内部寄存器和存储器之间的数据传送。MOV BX,AX

    12、;间接寻址,把AX寄存器的内容传送到BX寄存器内容为地址的单元内(16位)MOV EAX,EBX+ESI;基址变址寻址(32位)MOV AL,BLOCK;BLOCK为变量名,直接寻址(8位)24 3.交换指令(1)格式:XCHG OPR1,OPR2 功能:交换操作数OPR1和OPR2的值,操作数数据类型为字节、字或双字。允许通用寄存器之间,通用寄存器和存储器之间交换数据,但不允许使用段寄存器。执行的操作:(OPR1)(OPR2)例例 3.15 交换指令的举例交换指令的举例 XCHG AX,BX ;通用寄存器之间交换数据(16位)XCHG ESI,EDI ;通用寄存器之间交换数据(32位)XCH

    13、G BX,BP+SI ;通用寄存器和存储单元之间交换数据(16位),253.3.2 堆栈操作指令堆栈操作指令 1.入栈指令 1)源操作数入栈 格式:PUSH SRC 功能:将源操作数压入堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器26 执行的操作:16位指令:(SP)(SP)-2 (SP)+1,(SP)(SRC)32位指令:(ESP)(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(SRC)27(2)寄存器入栈 格式:PUSHA PUSHAD 功能:PUSHA将16位通用寄存器压入堆栈,压栈顺序为AX,CX,DX,BX,SP,BP,S

    14、I,DI。指令执行后(SP)(SP)-16。PUSHAD将32位通用寄存器压入堆栈,压栈顺序为EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI。指令执行后(ESP)(ESP)-32。28指令执行前堆栈段指令执行前堆栈段指令执行后堆栈段指令执行后堆栈段低地址低地址低地址低地址 (SP)(SP)07072121(SP)(SP)进栈方向进栈方向高地址高地址(A X)=(A X)=2107H2107H图图3.10 PUSH AX 3.10 PUSH AX 指令的执行情况指令的执行情况29 2.出栈指令 1)弹出操作数 格式:POP DEST 功能:从栈顶弹出操作数送入目的操作数。目的操作

    15、数允许为16或32位通用寄存器、存储器和16位段寄存器。当操作数数据类型为字类型,出栈操作使SP加2;当操作数数据类型为双字类型,出栈操作使SP加4。30 2)弹出寄存器数据 格式:POPA POPAD 功能:POPA从堆栈移出16字节数据,并且按顺序存入寄存器DI、SI、BP、SP、BX、DX、CX、AX中。POPAD从堆栈移出32字节数据,并且按顺序存入寄存器EDI、ESI、EBP、ESP、EBX、EDX、ECX、EAX中。31指令执行前堆栈段指令执行前堆栈段 指令执行后堆栈段指令执行后堆栈段低地低地址址低地址 (SP)(SP)0707070721212121(S P)(S P)出栈方向(

    16、AX)=?(AX)=?(AX)=2107(AX)=2107H H323.3.3 地址传送指令地址传送指令 1.取有效地址指令 格式:LEA REG,MEM 功能:将源操作数的有效地址传送到通用寄存器,操作数REG为16位或32位通用寄存器,源操作数为16位或32位存储器操作数。执行的操作:(REG)(MEM)332.有效地址送寄存器指令 格式:LDS(ES,FS,GS,SS)REG,MEM 功能:根据源操作数指定的偏移地址,在数据段中取出段地址和偏移地址分别送指定的段寄存器和指定的通用寄存器。执行的操作:(REG)(MEM)(SREG)(MEM+2)/(MEM+4)343.3.4 标志寄存器传

    17、送指令标志寄存器传送指令 1.标志寄存器送/存AH指令 格式:LAHF(load AH with flags)SAHF(store AH into flags)功能:LAHF将标志寄存器中低8位送AH中。SAHF将AH中内容送标志寄存器中低8位。执行的操作:LAHF:(AH)(flags的低字节)SAHF:(flags的低字节)(AH)352.标志寄存器入/出栈指令 格式:PUSHF(push the flags)POPF(pop the flags)功能:PUSHF将标志寄存器低16位内容压入堆栈。POPF将当前栈顶一个字传送到标志寄存器低16位中。执行的操作:PUSHF:(SP)(SP)-

    18、2 (SP)+1,(SP)(FLAGS)POPF:(FLAGS)(SP)+1,(SP)(SP)(SP)+2363 32位标志寄存器入/出栈指令 格式:PUSHFD(push the eflags)POPFD(pop the eflags)功能:PUSHFD将标志寄存器32位内容压入堆栈,SPSP-4。POPFD将当前栈顶一个双字传送到32位标志寄存器中,SPSP+4。37 执行的操作:PUSHFD:(ESP)(ESP)-4 (ESP)+3,(ESP)+2,(ESP)+1,(ESP)(EFLAGS AND 0FCFFFFH);进行与操作是为了清除VM和RF位)POPFD:(EFLAGS)(ESP

    19、)+3,(ESP)+2,(ESP)+1,(ESP)(ESP)(ESP)+4383.4 算术运算指令算术运算指令 3.4.1加法指令加法指令 格式:ADD DEST,SRC ;执行的操作:(DEST)(DESG)+(SRC)格式:ADC DEST,SRC ;执行的操作:(DEST)(DESG)+(SRC)+CF 功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。ADC是将源操作数与目的操作数以及CF(低位进位)值相加,结果传送到目的操作数。393.4.2 减法指令减法指令 格式:SUB DEST,SRC 执行的操作:(DEST)(DESG)-(SRC)SBB DEST,SRC 执行

    20、的操作:(DEST)(DESG)-(SRC)-CF 功能:SUB将目的操作数减源操作数,结果送目的操作数。SBB将目的操作数减源操作数,还要减CF(低位借位)值,结果送目的操作数。40 3.4.3 加加1减减1指令指令 格式:INC DEST DEC DEST 功能:INC指令将目的操作数加1,结果送目的操作数。DEC指令将目的操作数减1,结果送目的操作数。目的操作数为通用寄存器或存储器操作数。413.4.4 比较指令比较指令 1 格式:CMP DEST,SRC 执行的操作:(DEST)-(SRC)功能:目的操作数减源操作数,结果不回送,只是根据结果设置条件标志位。CMP指令后往往跟着一个条件

    21、转移指令,根据比较结果产生不同的程序分支。源操作数为通用寄存器、存储器和立即数。目的操作数为通用寄存器、存储器操作数。CMP指令影响的标志位为OF,SF,ZF,AF,PF,CF。42 2 比较并交换指令 格式:CMPXCHG DEST,REG 功能:比较并交换目的操作数和源操作数。执行的操作:累加器AC与DEST比较 如果(AC)=(DEST),则ZF 1,(DEST)(SRC)。否则,ZF 0,(AC)(DEST)。43 3比较并部分交换指令 格式:CMPXCHG8B MEM 功能:比较并交换8字节 执行的操作:EDX:EAX中值与MEM比较 如果(EDX:EAX)=MEM,则ZF 1,(M

    22、EM)(EDX:EAX);否则,则ZF 0,(EDX:EAX)(MEM)。44 3.4.5 交换相加指令交换相加指令 格式:XADD DEST,SRC 功能:目的操作数加源操作数,结果送目的操作数,原目的操作数内容送源操作数。源操作数允许为通用寄存器。目的操作数允许为通用寄存器、存储器操作数。执行的操作:TEMP (SRC)+(DEST)(SRC)(DEST)(DEST)TEMP45 例例3.30 编写程序实现 w (x+y+24 z)。其中,x,y,z,w是双精度数,分别存放在地址x,x+2;y,y+2;z,z+2;w,w+2的存储单元中。data segment x dw 1122h,33

    23、44h y dw 5566h,7788h z dw 1122h,3344h w dw?,?data ends46 code segment main proc far assume cs:code,ds:data start:push ds xor ax,ax push ax mov ax,data mov ds,ax47 mov ax,x mov dx,x+2 add ax,y adc dx,y+2 add ax,24 adc dx,0 sub ax,z sbb dx,z+2 mov w,ax mov w+2,dx ret48 3.4.6 求补指令求补指令 格式:NEG DEST 功能:对目

    24、的操作数求补,用零减去目的操作数,结果送目的操作数。目的操作数为通用寄存器、存储器操作数。执行的操作:(DEST)-(DEST)。493.4.7 乘法指令乘法指令 1单操作数乘法指令 格式:MUL SRC IMUL SRC 功能:MUL为无符号数乘法指令,IMUL为带符号数乘法指令。源操作数为通用寄存器或存储器操作数。目的操作数默认存放在ACC(AL,AX,EAX)中,乘积存AX,DX:AX或EDX:EAX中。50 执行的操作:无符号数乘法指令MUL 字节乘:(AX)(AL)*(SRC)字乘:(DX AX)(AX)*(SRC)双字乘:(EDX EAX)(EAX)*(SRC)有符号数乘法指令IM

    25、UL的执行过程与无符号数乘法指令MUL的执行操作一样,但要求操作数是带符号数。512 双操作数乘法指令 格式:IMUL DEST,SRC 功能:将目的操作数乘以源操作数,结果送目的操作数。目的操作数为16位或32位通用寄存器或存储器操作数。源操作数为16位或32位通用寄存器、存储器或立即数。源操作数和目的操作数数据长度要求一致。乘积仅取和目的操作数相同的位数,高位部分将被舍去,并且CF=OF=1。其它标志位无定义。执行的操作:(DEST)(DEST)*(SRC)523.4.8 除法指令除法指令 格式:DIV SRC IDIV SRC 功能:DIV为无符号数除法,IDIV为带符号数除法。源操作数

    26、作为除数,为通用寄存器或存储器操作数。被除数默认在目的操作数AX,DX:AX,EDX:EAX中。53 执行的操作:字节除法:(AL)(AX)/(SRC)的商,(AH)余数。字除法:(AX)(DXAX)/(SRC)的商,(DX)余数。双字除法:(EAX)(EDXEAX)/(SRC)商,(EDX)余数。54 例 332编写程序实现(V (X*Y+Z-540)/X,其中,X,Y,Z,V均为16位带符号数,分别存放在X,Y,Z,V单元中,要求计算结果存放在AX寄存器,余数存放在DX寄存器中。编写程序如下:55 data segment X dw 1111h Y dw 2222h Z dw 3333h

    27、V dw 9999h data ends56 code segment main proc far assume cs:code,ds:data start:push ds xor ax,ax push ax mov ax,data mov ds,ax57 mov ax,x imul y mov cx,ax mov bx,dx mov ax,z cwd add cx,ax adc bx,dx sub cx,540 sbb bx,058 mov ax,v cwd sub ax,cx sbb dx,bx idiv x ret main endp code ends end start593.5控制

    28、转移类指令控制转移类指令 3.5.1 转移指令转移指令 1.无条件转移指令 格式:JMP TARGET 功能:使程序无条件地转移到指令规定的目的地址TARGET去执行指令。转移分为短转移、段内转移(近程转移)和段间转移(远程转移)。60 2.条件转移指令 该类指令是根据上一条指令对标志寄存器中标志位的影响来决定程序执行的流程,若满足指令规定的条件,则程序转移;否则程序顺序执行。这类似于高级语言中选择语句,只有IF子句,无ELSE子句。61 例例 3.44符号函数 假设x为某值且存放在寄存器AL中,试编程将求出的函数值f(x)存放在AH中。编写程序如下:62.MODEL TINY ;精简模式的编

    29、程模式.DATA ;数据段的定义 X DB-8.CODE ;代码段的定义 STARTUP:MOV AX,DATA ;预定义符DATA 取出数据段的段地址 MOV DS,AX 63 MOV AL,X CMP AL,0 JGE BIG MOV AL,0FFH JMP DONE BIG:JE DONE MOV AL,1 DONE:MOV AH,AL MOV AX,4C00H INT 21H END STARTUP64例例 3.45编程实现把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。.MODEL TINY .CODE STARTUP:MOV BX,1001010101000111B M

    30、OV CH,465 AGAIN:MOV CL,4 ROL BX,CL MOV AL,BL AND AL,0FH ADD AL,30H CMP AL,3AH JB NEXT ADD AL,07H66 NEXT:MOV DL,AL MOV AH,2 INT 21H DEC CH JNZ AGAIN MOV AX,4C00H INT 21H END STARTUP673.5.2 循环控制指令循环控制指令 这类指令用(E)CX计数器中的内容控制循环次数,先将循环计数值存放在(E)CX中,每循环一次(E)CX内容减1,直到(E)CX为0时循环结束。循环指令不影响条件码。格式:LOOPcc TARGET

    31、功能:将(E)CX内容减1,不影响标志位,若(E)CX不等于0,则转移到目标地址TARGET处执行程序。转移范围为-128 +127。68 执行的操作:(COUNT Reg)(COUNT Reg)-1;检查是否满足测试条件,若满足,则转移到目标地址TARGET处执行程序。若不满足,则顺序执行下一条指令。69例例 3.46计算.MODEL TINY.CODE START:XOR AX,AX MOV DX,1 MOV CX,1070 SUM:ADC AX,DX INC DX LOOP SUM MOV AX,4C00H INT 21H END START 71例例 3.47找出以ARRAY为首地址的

    32、100个字数组中的第一个非0项,送DX寄存器中.MODEL SMALL.DATA ARRAY DW 0,0,23,21,32,23,90,0,67,54.STACK 100H.CODE START:72 PUSH DS SUB AX,AX PUSH AX MOV AX,DATA MOV DS,AX MOV CX,10 LEA BX,ARRAY MOV SI,-273 SEARCH:INC SI INC SI CMP WORD PTR BX+SI,0 LOOPZ SEARCH MOV DX,BX+SI MOV AX,4C00H INT 21H END START743.6串操作指令串操作指令 串

    33、指连续存放在存储器中的一些数据字节、字或双字。串操作允许程序对连续存放的数据块进行操作。串操作通常以DS:(E)SI来寻址源串,以ES:(E)DI来寻址目的串,对于源串允许用段跨越前缀来修改数据段寄存器名。(E)SI或(E)DI这两个地址指针在每次串操作后,都自动进行修改,以指向串中下一个元素。地址指针修改是增量还是减量由方向标志来规定。75 当DF=0,(E)SI及(E)DI的修改为增量;当DF=1,(E)SI及(E)DI的修改为减量。根据串元素类型不同,地址指针增减量也不同,在串操作时,字节类型SI,DI加、减1;字类型SI,DI加、减 2;双字类型ESI,EDI加、减4。76例例 3.4

    34、8 在数据段中有一字符串,要求把他们传送到附加段的缓冲区中。程序如下 datarea segment mess1 db personal computer,$datarea ends extra segment mess2 db 18 dup(?)extra ends77 code segment main proc far assume cs:code,ds:datarea,es:extra start:push ds xor ax,ax push ax mov ax,datarea mov ds,ax78 mov ax,extra mov es,ax cld mov cx,18 lea s

    35、i,mess1 lea di,mess2 rep movsb mov ax,extra mov ds,ax79 mov dx,offset mess2 mov ah,9 int 21h ret main endp code ends end start80例例 3.49编程实现两个串元素比较,如相同则输出match!信息,否则输出目的串中第一个不同的字符 datarea segment mess1 db personal computer,$mess3 db match!,$datarea ends extra segment mess2 db personal computer,$extra

    36、 ends81 code segment main proc far assume cs:code,ds:datarea,es:extra start:push ds xor ax,ax push ax mov ax,datarea mov ds,ax82 mov ax,extra mov es,ax cld mov cx,19 lea si,mess1 lea di,mess2 repe cmpsb83 cmp cx,0 jnz con mov dx,offset mess3 mov ah,9 int 21h con:dec di mov ah,2 mov dl,es:di int 21h8

    37、4例例 3.50在内存DEST开始的6个单元寻找字符C,如找到将字符C的地址送ADDR单元,否则0送ADDR单元。datarea segment mess1 db ABCDEF addr dw?datarea ends code segment main proc far assume cs:code,ds:datarea85 start:push ds xor ax,ax push ax mov ax,datarea mov es,ax 86 mov ds,ax cld mov cx,6 lea di,mess1 mov al,C repne scasb jz quit mov di,0 j

    38、mp done87 quit:dec di done:mov addr,di ret main endp code ends end start883.7 逻辑运算指令逻辑运算指令 3.7.1 逻辑指令逻辑指令 1.逻辑与指令 AND 格式:AND DEST,SRC 功能:目的操作数和源操作数按位进行逻辑与运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。AND指令常用于将操作数中某位清0(称屏蔽),只须将要清0的位与0,其它不变的位与1进行逻辑与操作即可。89 2.逻辑或指令 OR 格式:OR DEST,SRC 功能:目的操作数和源

    39、操作数按位进行逻辑或运算,结果存目的操作数中。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。OR 指令常用于将操作数中某位置1,只须将要置1的位与1进行或运算,其它不改变的位与0进行或运算。90 3.逻辑异或指令 XOR 格式:XOR DEST,SRC 功能:目的操作数和源操作数按位进行逻辑异或运算,结果送目的操作数。源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。XOR指令常用于将操作数中某些位取反,只须将要取反的位异或1,其它不改变的位异或0即可。91 4.逻辑非指令NOT 格式:NOT DEST 功能:对目的操作数

    40、按位取反,结果回送目的操作数。目的操作数可以为通用寄存器或存储器。92 5.测试指令TEST 格式:TEST DEST,SRC 功能:目的操作数和源操作数按位进行逻辑与操作,结果不回送目的操作数。源操作数可以为通用寄存器、存储器或立即数。目的操作数可以为通用寄存器或存储器操作数。933.7.2 移位指令移位指令 移位指令对操作数按某种方式左移或右移,移位位数可以由立即数直接给出,或由CL间接给出。移位指令分一般移位指令和循环移位指令,如表3.10所示,每个指令执行的操作如图3.14所示。94例例 3.59将一个2位数压缩的BCD码转换成二进制数。.model small.data x1 db 01011101b x2 db?.code start:push ds mov ax,0 push ax95 mov ax,data mov ds,ax mov al,x1 mov bl,al and bl,0fh and al,0f0h mov cl,496 ror al,cl mov bh,0ah mul bh add al,bl mov x2,al mov ax,4c00h int 21h end start9798

    展开阅读全文
    提示  163文库所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
    关于本文
    本文标题:80X86指令系统解析课件.ppt
    链接地址:https://www.163wenku.com/p-4393150.html

    Copyright@ 2017-2037 Www.163WenKu.Com  网站版权所有  |  资源地图   
    IPC备案号:蜀ICP备2021032737号  | 川公网安备 51099002000191号


    侵权投诉QQ:3464097650  资料上传QQ:3464097650
       


    【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。

    163文库