汇编语言2-2

上传人:kms****20 文档编号:51465490 上传时间:2018-08-14 格式:PPT 页数:63 大小:1.76MB
返回 下载 相关 举报
汇编语言2-2_第1页
第1页 / 共63页
汇编语言2-2_第2页
第2页 / 共63页
汇编语言2-2_第3页
第3页 / 共63页
汇编语言2-2_第4页
第4页 / 共63页
汇编语言2-2_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《汇编语言2-2》由会员分享,可在线阅读,更多相关《汇编语言2-2(63页珍藏版)》请在金锄头文库上搜索。

1、教学提示在正确理解每条指令的功能 基础上,可以阅读和编写有 实际意义的程序段 第 2 章2.3 位操作类指令位操作类指令以二进制位为基本单位 进行数据的操作;这是一类常用的指令 ,都应该特别掌握 注意这些指令对标志位的影响 1、逻辑运算指令 AND OR XOR NOT TEST 2、移位指令 SHL SHR SAR 3、循环移位指令 ROL ROR RCL RCR第 2 章逻辑与指令AND对两个操作数执行逻辑与运算,结果 送到目的操作数AND指令设置CF = OF = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义AND reg,imm/reg/mem ;regregimm/reg/

2、memAND mem,imm/reg ;memmemimm/reg只有相“与”的两位都是1,结果 才是1;否则,“与”的结果为0ANDAND第 2 章逻辑或指令OR对两个操作数执行逻辑或运算,结果 送到目的操作数OR指令设置CF = OF = 0,根据结果设 置SF、ZF和PF状态,而对AF未定义OR reg,imm/reg/mem ;regregimm/reg/memOR mem,imm/reg ;memmemimm/reg只要相“或”的两位有一位是1, 结果就是1;否则,结果为0OROR第 2 章逻辑异或指令XOR对两个操作数执行逻辑异或运算,结 果送到目的操作数XOR指令设置CF = O

3、F = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义XOR reg,imm/reg/mem ;regregimm/reg/memXOR mem,imm/reg ;memmemimm/reg只有相“异或”的两位不相同,结 果才是1;否则,结果为0XORXOR第 2 章逻辑非指令NOT对一个操作数执行逻辑非运算NOT指令是一个单操作数指令NOT指令不影响标志位NOT reg/mem ;reg/memreg/mem按位取反,原来是“0”的位变为 “1”;原来是“1”的位变为“0”NOTNOT例题:逻辑运算mov al,45h;逻辑与 al=01h and al,31h;CF=OF=0,SF

4、=0、ZF=0、PF=0mov al,45h;逻辑或 al=75h or al,31h;CF=OF=0,SF=0、ZF=0、PF=0mov al,45h;逻辑异或 al=74h xor al,31h;CF=OF=0,SF=0、ZF=0、PF=1mov al,45h;逻辑非 al=0bah not al;标志不变例题:逻辑指令应用;AND指令可用于复位某些位(同0相与),不 影响其他位:将BL中D3和D0位清0,其他位不变 and bl,11110110B;OR指令可用于置位某些位(同1相或),不 影响其他位:将BL中D3和D0位置1,其他位不变 or bl, 00001001B;XOR指令可用

5、于求反某些位(同1相异或), 不影响其他位:将BL中D3和D0位求反,其他不变 xor bl, 00001001B第 2 章测试指令TEST对两个操作数执行逻辑与运算,结果 不回送到目的操作数AND指令设置CF = OF = 0,根据结果 设置SF、ZF和PF状态,而对AF未定义TEST reg,imm/reg/mem;regimm/reg/memTEST mem,imm/reg;memimm/reg只有相“与”的两位都是1,结果 才是1;否则,“与”的结果为0TESTTEST例2.32:测试为0或1test al,01h ;测试AL的最低位D0 jnz there;标志ZF=0,即D0=1

6、;则程序转移到there .;否则ZF=1,即D0=0,顺序执行 there: .TEST指令通常用于检测一些条件是否 满足,但又不希望改变原操作数的情况TESTTEST第 2 章移位指令(shift)将操作数移动一位或多位,分成逻辑移位和 算术移位,分别具有左移或右移操作SHL reg/mem,1/CL ;逻辑左移,最高位进入CF,最低位补0SHR reg/mem,1/CL ;逻辑右移,最低位进入CF,最高位补0SAL reg/mem,1/CL ;算术左移,最高位进入CF,最低位补0SAR reg/mem,1/CL ;算术右移,最低位进入CF,最高位不变SAL与SHL相 同演示演示演示演示演

7、示演示第 2 章移位指令的操作数移位指令的第一个操作数是指定 的被移位的操作数,可以是寄存器 或存储单元后一个操作数表示移位位数,该 操作数为1,表示移动一位;当移位 位数大于1时,则用CL寄存器值表 示,该操作数表达为CL第 2 章移位指令对标志的影响按照移入的位设置进位标志CF 根据移位后的结果影响SF、ZF、PF 对AF没有定义如果进行一位移动,则按照操作数的 最高符号位是否改变,相应设置溢出标 志OF:如果移位前的操作数最高位与移 位后操作数的最高位不同(有变化), 则OF = 1;否则OF = 0。当移位次数大 于1时,OF不确定例2.33:移位指令mov cl,4 mov al,0

8、f0h;al=f0h shl al,1;al=e0h ;CF=1,SF=1、ZF=0、PF=0,OF=0 shr al,1;al=70h ;CF=0,SF=0、ZF=0、PF=0、OF=1 sar al,1;al=38h ;CF=0,SF=0、ZF=0、PF=0、OF=0 sar al,cl ;al=03h ;CF=1,SF=0、ZF=0、PF=1例2.34:移位实现乘mov si,ax shl si,1;si2ax add si,ax ;si3ax mov dx,bx mov cl,03h shl dx,cl ;dx8bx sub dx,bx ;dx7bx add dx,si ;dx7bx3

9、ax逻辑左移一位相当于无符号数乘以2逻辑右移一位相当于无符号数除以2第 2 章循环移位指令(rotate)将操作数从一端移出的位返回到另一 端形成循环,分成不带进位和带进位, 分别具有左移或右移操作ROL reg/mem,1/CL ;不带进位循环左移ROR reg/mem,1/CL ;不带进位循环右移RCL reg/mem,1/CL ;带进位循环左移RCR reg/mem,1/CL ;带进位循环右移演示演示演示演示演示演示演示演示第 2 章循环移位指令对标志的影响按照指令功能设置进位标志CF不影响SF、ZF、PF、AF如果进行一位移动,则按照操作数的 最高符号位是否改变,相应设置溢出标 志OF

10、:如果移位前的操作数最高位与移 位后操作数的最高位不同(有变化), 则OF = 1;否则OF = 0。当移位次数大 于1时,OF不确定例2.35:32位数移位;将DX.AX中32位数值左移一位 shl ax,1 rcl dx,1DXAXCF0例2.36:位传送;把AL最低位送BL最低位,保持AL不变 ror bl,1ror al,1rcl bl,1rol al,1AL、BLCFBLCFALCFAL之D0例2.37:BCD码合并;AH.AL分别存放着非压缩BCD码的两位 ;将它们合并成为一个压缩BCD码存AL and ax,0f0fh ;保证高4位为0 mov cl,4 rol ah,cl ;也

11、可以用shl ah,cl add al,ah ;也可以用or al,ah第 2 章2.4 控制转移类指令控制转移类指令用于实现分支、循环 、过程等程序结构,是仅次于传送指令 的最常用指令重点掌握:JMP/Jcc/LOOP CALL/RETINT n/IRET 常用系统功能调用一般了解: LOOPZ/LOOPNZ INTO控制转移类指令通过改变IP(和CS)值 ,实现程序执行顺序的改变2.4.1 无条件转移指令只要执行无条件转移指令JMP,就使程序转 到指定的目标地址处,从目标地址处开始执行 那里的指令 操作数label是要转移到的目标地址(目的 地址、转移地址) JMP指令分成4种类型: 段内

12、转移、直接寻址 段内转移、间接寻址 段间转移、直接寻址 段间转移、间接寻址JMP label;程序转向label标号指定的地址JMPJMP第 2 章目标地址的寻址方式直接寻址方式n转移地址象立即数一样,直 接在指令的机器代码中,就是直 接寻址方式间接寻址方式n转移地址在寄存器或主存单 元中,就是通过寄存器或存储器 的间接寻址方式第 2 章用标号表达用寄存器或存储器 操作数表达JMPJMP目标地址的范围:段内段内转移近转移(near)n在当前代码段64KB范围内转 移( 32KB范围)n不需要更改CS段地址,只要 改变IP偏移地址段内转移短转移(short)n转移范围可以用一个字节表 达,在段内

13、128127范围的 转移代码段代码段第 2 章 JMPJMP目标地址的范围:段间段间转移远转移(far )n从当前代码段跳转到另一 个代码段,可以在1MB范围n需要更改CS段地址和IP 偏移地址n目标地址必须用一个32位 数表达,叫做32位远指针,它 就是逻辑地址第 2 章代码段代码段实际编程时,汇编程序会根据目标地址的距离, 自动处理成短转移、近转移或远转移 程序员可用操作符short、near ptr 或far ptr 强制JMPJMPJMPJMP段内转移、直接寻址JMP label ;IPIP+位移量位移量是紧接着JMP指令后的那条指令的偏移地址 ,到目标指令的偏移地址的地址位移当向地址

14、增大方向转移时,位移量为正;向地址减 小方向转移时,位移量为负jmp again;转移到again处继续执行 again:dec cx;标号again的指令 jmp output;转向output output: mov result,al;标号output的指令第 2 章实际为相对寻址段内转移、间接寻址JMP r16/m16 ;IPr16/m16将一个16位寄存器或主存字单元内容送入IP 寄存器,作为新的指令指针,但不修改CS寄存 器的内容jmp ax ;IPAX jmp word ptr 2000h;IP2000h第 2 章JMPJMPJMPJMP段间转移、直接寻址JMP far ptr

15、label ;IPlabel的偏移地址 ;CSlabel的段地址将标号所在段的段地址作为新的CS值, 标号在该段内的偏移地址作为新的IP值;这 样,程序跳转到新的代码段执行jmp far ptr otherseg ;远转移到代码段2的otherseg第 2 章 JMPJMP段间转移、间接寻址JMP far ptr mem ;IPmem,CSmem+2 用一个双字存储单元表示要跳转的目标地 址。这个目标地址存放在主存中连续的两个 字单元中的,低位字送IP寄存器,高位字送 CS寄存器mov word ptr bx,0 mov word ptr bx+2,1500h JMP far ptr bx ;

16、转移到1500h:0第 2 章 JMPJMP2.4.2 条件转移指令指定的条件cc如果成立,程序转移到 由标号label指定的目标地址去执行指令 ;条件不成立,则程序将顺序执行下一 条指令 操作数label是采用短转移,称为相对 寻址方式JccJccJcc label;条件满足,发生转移:IPIP8位位移量;条件不满足,顺序执行第 2 章第 2 章相对寻址方式Jcc指令的操作数label是一个标号n一个8位位移量,表示Jcc指令后的 那条指令的偏移地址,到目标指令的偏移 地址的地址位移n8位位移量是相对于当前IP的,且距 当前IP地址128127个单元的范围之 内,属于段内短距离转移nJcc目标地址就采用这种相对寻址方 式Jcc指令为2个字节,条件不满足时的 顺序执行就是当前指令偏移指针IP加2JccJcc第 2 章Jcc指令的分类Jc

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号