已阅读5页,还剩70页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第三节 8086/8088的指令系统(续) 四. 逻辑运算指令 五. 控制转移指令,2,四. 逻辑运算指令,逻辑指令指令分类,3,逻辑运算 :与、或、非、异或,特点:二进制数运算 ,按位进行,与运算:有0则0,全1则,或运算:有1则1,全0则0,4,非运算: 0则1,1则0,异或运算:异则1,同则0,5,1. 逻辑运算指令,6,and al , 0000 1111b or bx , 00ffh not cl xor dl, al test al, 0000 0001b,除not指令单操作数外,其它均为双操作数 可进行字节或字操作 not指令不影响标志 test只影响标志位,不影响操作数。,7,例 数字字符的ascii 对应的二进制数,应用: mov ah, 1 ;利用dos调用 int 21h ;从键盘输入字符到al中 and al, 0000 1111b ;高4位为0,低4位不变 、,8,逻辑运算常用于使操作数的某位为0或1, 或测试某位为0还是1。 使某位为1 用该位与1 相或,不变的位与0或。 使某位为0 用该位与0 相与,不变的位与1与。 使某位求反 用该位与1 异或,不变的位与0异或。 测试某位的值 用test指令,据标志判断,9,例 21h端口管理中断系统,管理8个外设的中断,允许键盘中断: in al,21h ;读入21端口内容 and al,1111 1101b ;置d1 = 0,其他位不变 out 21h ,al ;送出屏蔽字到21h端口,禁止键盘中断: in al,21h or al,0000 0010b ;使d1为1 out 21h,al,10,例 379h端口的d7存放打印机的状态,用查询方式控制打印机工作: mov dx, 379h ask: in al, dx ;从379h端口读状态 test al, 1000 0000b ;检测d7位 jz ask ;为0,打印机忙,继续查询 print: 、 ;输出字符打印,11,2. 移位指令,12,移位规则 左移: 高位 低位 右移: 高位 低位 移出位进入cf标志 对移位指令,移出cf标志后丢失 逻辑左移、算术左移的结果相同 逻辑右移,新移入的信息以0填入 算术右移,保持最高有效位原来的值(符号为不变),13,例 若(al)=96h, cf=0 执行 shl al, 1,执行前:(al)=96h ,cf=0,1,0,0,1,0,1,1,0,执行后:(al)=e5h ,cf=1,cf,例 若(al)=96h, cf=0, (cl) =2 执行 sar al, cl,14,3. 循环移位指令,指令格式,rol oprd,1 cl,ror oprd,1 cl,rcl oprd,1 cl,rcr oprd,1 cl,15,移位规则 左移: 高位 低位 右移: 高位 低位 移出位进入cf标志 对循环移位指令,改变各位的位置,信息不丢失 带进位循环移位,cf标志参加循环移位,16,例 若(al)= 96h, cf=0 执行 rol al, 1,17,18,对标志位的影响 移位指令: 据结果设置cf、sf、zf、pf,对af无定义 of只在移位次数为1时有效,其他无定义 移位后,最高有效位发生变化,则of=1,否则为0 (sal,shl最高位cf, 则: of = 1, 否则:无变化时,of = 0) (sar,shr最高位次高位, 则 : of=1; 否则 : of=0。) 对循环移位指令: 据移位结果设置cf,对其他标志无影响 of标志 rol、 rcl影响标志of、cf情况相同 ; 移位后,最高有效位 cf, 则: of = 1,否则:(无变化时)of = 0 ror 、 rcr影响标志of、cf情况相同 。 移位后,最高位次高位, 则 : of=1;否则 : of=0。,19,逻辑移位可用于无符号数乘除 算术移位用于带符号数 的乘除 左移一次,相当于乘2 右移一次,相当于除2 例 将al中的带符号数乘10 , 若(al)=x sal al ,1 ; (al)=2x mov bl ,al ; (bl)=2x sal al ,1 ; (al)=4x sal al ,1 ; (al)=8x add al ,bl ; (al)=(8x+2x)=10x,20,应用举例: (bx)=84f0h (1) 若(bx)无符号数,求(bx)/2 shr bx,1 ; (bx)=4278 cf=0,of=1,sf=0,zf=0 (2) 若(bx)带符号数,求(bx)/4 mov cl,02h 或sar bx,1 sar bx,cl sar bx,1 ; cf=0,of无意义, sf=1,zf=0,21,利用带进位循环移位指令将两个寄存器或存储器单元 组合起来一起移位。 例: 将dx、ax组合起来构成32位寄存器向左移一位。 如下图所示:,程序: shl ax , 1 rcl dx , 1,32位寄存器向左移一位,22,五. 控制转移指令,在8086/8088中,指令的地址固定由cs和ip两个寄存器决定。,cpu 总线 内存,23,cs和ip两寄存器的内容决定了程序的流程,改变cs和ip寄存器的值, 就改变了程序执行的流程。,cs:ip,cs:ip,24,8086/8088 中cs和ip的变化规则:,第一条指令在内存的rom区。,1、 reset复位后, ( cs ) = ffffh,( ip ) = 0000h 故8086从内存ffff:0000h处取第一条指令执行。,25,2、非控制转移指令,指令本身对cs和ip均无操作, 形成顺序执行结构。,bb 00 01 b1 20 90,指令1,指令2,指令3,cs:ip,顺序执行结构: 顺序存放,顺序执行 程序是指令的集合 指令在内存中顺序存放 对非控制转移指令, cpu取来一条指令后, 自动将ip的值加上该指令的字节数, 使ip顺序指向下一条指令, cpu取来紧连着的指令执行。 (此时ip的变化由cpu内部的硬件自动完成),26,3、 控制转移指令以cs和ip为主要操作对象, 改变cs和ip的值,使程序产生分支、调用结构。,39 d8 7d 02 87 c3 a3 00 20,cs:ip,分支结构、调用结构: 顺序存放,非顺序执行 cmp ax, bx jge great xchg ax, bx great: mov max, ax 、,控制转移指令jge可以改变ip的值, 使程序非顺序执行,27,控制转移指令分类,掌握:jmp, jz, jnz, jc, loop call, ret, int n, iret,28,控制转移指令(jmp、jcc、loopxx、call)概述,例 jmp exit jz zero loop nxet call display,指令格式: 助记符 操作数 助记符 jmp、jcc、loopxx、call 操作数 给出要转移到的目的地址,29,30, 符号地址 : 在汇编格式指令中用符号来表示地址 可以是标号、过程名(子程名), 标号 指示指令所在的地址。 用 符号名: 表示。 例 cmp ax, bx jge great xchg ax, bx great: mov max, ax,根据标号与控制转移指令所在位置,标号有三种类型: short 短属性 near 近属性 far 远属性,31,过程名 ( 子程名 ) 过程指示过程(子程)第一条指令的地址。,例 display proc near 、 、 、 display endp,按过程与调用语句间的位置,过程有两种类型: near类型:调用指令与过程在同一个段中 far类型:调用指令与过程不在同一个段中,过程定义方法: 符号名 proc 类型 、 、 、 符号名 endp,32,例 jmp again jmp bx jmp word ptr bx jmp dword ptr bx jnz next (若 next的位移量在-128127) jz ax loop bx jnz next (若 next的位移量超出-128127) 指令jmp、jcc、loopxx、call本身对标志无影响。,33,(1) 无条件转移指令jmp 格式 jmp 目标地址 执行操作 无条件转移到目标地址处 转移方式 5种方式均可 例 、 、 jmp next 、 、 next: mov ax, bx 、,34,35,按转移条件不同,条件转移指令可以分为四大类:, 以单个状态标志作为转移条件, 以cx的值为0作为转移条件,36, 以两个无符号数比较的结果作为转移条件, 以两个带符号数比较的结果作为转移条件,37,38,循环指令说明:,比较两串时,当有字符不等,就可退出,说明两字符串不等。 可用loopz,当相等时继续比较。,39,例 在string字符串中查找空格字符,串长度为n。,40,41,42,思考: 去掉指令jmp exit ,程序执行结果会怎样? pushf、popf可否去掉?若要去掉,程序如何修改? 执行完loopnz后,可否根据cx=0来判断查找结果? 有人认为cx=0,即说明没找到,对吗?,用条件转移: mov cx, n mov ax, seg string mov ds, ax lea bx,string mov al,20h next: cmp al,bx jz find inc bx dec cx jnz next 未找到处理 jmp exit find: 找到处理 exit: 结束出口,用循环指令: mov cx, n mov ax, seg string mov ds, ax lea bx, string mov al, 20h next: cmp al,bx pushf inc bx popf loopnz next jz find 未找到处理 jmp exit find: 找到处理 exit: 结束出口,43,44,(4) 调用和返回指令,45,46,调用指令call 段内直接调用 格式 call 符号地址 ;near属性 执行 (sp) (sp)- 2 (ss:sp) (ip) (ip) 符号地址的偏址,47, 段间直接调用 格式 : call 符号地址 ;far属性 执行 : (sp) (sp)- 2 (ss:sp) (cs) (sp) (sp)- 2 (ss:sp) (ip) (ip) 符号地址的偏址 (cs) 符号地址的段址,48,返回指令ret, 段间返回 格式 ret 或 retf 执行 (ip) (ss:sp) (sp) (sp)+ 2 (cs) (ss:sp) (sp) (sp)+ 2, 段内返回 格式 ret 执行 (ip) (ss:sp) (sp) (sp)+ 2,49,段内和段间返回指令的汇编语言格式均可用ret, 但机器码不同,段内为c3h, 段间为cbh, 汇编程序据过程类型确定返回类型。,50,例 段内直接调用 code segment 、 、 call sub 2000:200h 、 、 、 、 sub proc near 2000:300h 、 、 、 ret sub endp code ends,51,例 段间直接调用 code1 segment 、 、 call sub 2000:100h 、 、 code1 ends code2 segment 、 sub proc far 3000:200h 、 、 、 ret sub endp code2 ends,52,注意: 在调用、 返回指令中, 利用堆栈保存、 恢复返回地址。 对堆栈的操作应有目的性, 不乱用堆栈操作,不随意修改堆栈内容, 否则易造成死机。,53,(5) 中断调用、中断返回指令 中断(interrupt): 有时当系统运行或程序运行期间遇到某些特殊情况, 需要计算机自动执行一组专门的例行程序来进行处理。 中断种类: 中断分为内部(软)中断和外部(硬)中断两种。 内部中断如除法运算中除数为0、中断指令引起的中断。 外部中断处理i/o设备与cpu之间的通信。,54, 中断例行程序(或中断子程序)(interrupt routine): 是一种特殊的子程序, (dos系统中有大量这样的子程,用户也可以编写这样的子程) 特殊在它的调用方法与普通的子程序不同。 中断子程以类型号n来区分 共有256个类型号(0ffh, 即 0255) 类型号0 处理除0错误的中断子程 类型号09h 处理键盘操作的中断子程(外部中断) 类型号21h 与dos系统功能相关的中断子程,55,中断向量表:指存放 256 个中断向量的内存区域 每个中断向量占4个单元 256 个中断向量占1k个单元 4 256 = 1024 = 1k 中断向量表地址为 0000h:0000h 0000h:03ffh 即0段前1k个内存单元,低端1k内存。,56,中断向量:指中断子程的入口地址, 包括段地址、偏移地址,偏移地址 段 地址,0000h:n4,0000h:n42,中断子程n的入口地址 在内存中的位置,其中:前两个单元存放偏移地址 后两个单元 存放段地址,类型n的中断向量固定存放在4个内存单元中,即: ( 0000h : n4 0000h : n4 + 3 ),57,中断子程1的入口地址: 段地址: 0070h 偏移地址:0465h,d: debug -d 0:0 l20 0000:0000 9e 0f c9 00 65 04 70 00-16 00 13 08 65 04 70 00 0000:0010 65 04 70 00 54 ff 00 f0-58 7f 00 f0 f5 e7 00 f0 -,思考:用什么命令可以查看到该中断子程?,- u 0070:0465,58,59, 有的中断子程在软、硬件条件满足时,cpu会自动去执行 例如: 除0时,cpu自动执行类型0的中断子程 按下某键,cpu自动执行类型09的中断子程 (外部中断),60,中断调用指令int,格式 : int n ;其中 n=0 ffh 即0255 执行 : (sp) (sp)- 2 (ss:sp) (flags) if 0 tf 0 (sp) (sp)- 2 (ss:sp) (cs) (sp) (sp)- 2 (ss:sp) (ip) (ip) (0000h: n 4) (cs) (0000h: n4 + 2),61,cpu响应一次中断自动完成三件事情: (flags)入栈 保护现场,if=0,tf=0, (cs),(ip)保存入栈 保留断点, 转中断例行程序去执行。 从中断向量表获取中断子程的入口地址cs:ip , 转至中断子程入口取指令,62,执行int前 ss:sp,ss:sp if=0,tf=0,从中断向量表获取中断子程的入口地址, cs:ip转至中断子程入口取指令,int指令,执行int后,63,中断返回指令iret 格式 iret 执行 (ip) (ss:sp) (sp) (sp)+ 2 (cs) (ss:sp) (sp) (sp)+ 2 (psw) (ss:sp) (sp) (sp)+ 2 中断返回时: 恢复(ip)、(cs)及(flags),64,cs:ip转至主程被中断处取指令,执行iret后 ss:sp,执行iret前 ss:sp,65,(flags)=0300h if=1,tf=1,int 1c执行前,if=1,tf=1,(flags)=0300h,(cs) )=1271h,int 1c执行后,(ip) =0102h,(flags)=0000h if=0,tf=0,iret执行后,(cs)=f000, (ip)=ff53,、 、,了解 int指令调用中断子程 iret指令中断返回过程,66,溢出中断调用into 格式 into 执行 of为1时,执行 int 4; of为0时,执行into下一条执行。 例 、 into 、 、 、 、 类型4中断子程 、 、 、,67,ibm-pc机中为每个类型规定了一种功能。,*除非特别注明,类型号是以16进制形式表示的。,68,(1). 介绍几条指令: 类型03的中断称为内部中断。 类型0 :指令系统没有int0这条指令 除数为0中断 除数为0 :它既不是外部中断 也不是软件中断。 是由 cpu自身产生的,所以无对应中断指令。 有符号数进行除法所得的商超出规定范围 有符号数进行除法运算,所得的商超出规定范围, cpu自动产生类型为0的中断,转入响应的中断处理程序。 。,69, 类型1单步中断 tf=1 进入单步中断。 单步中断不是由外部硬件或程序中的中断产生, 而是cpu测试tf=1时产生的。 单步中断每执行一条指令,进行一次单步中断处理, 显示出一系列内 部寄存器的值, 并告 示一些附带的信息。 一般用于调试程序中逐条执行用户程序。 对于有重复前缀串操作指令单步操作下,每重复一次将产生一个单步中断,而不 是整个串操作结束后进入单步操作。 思考: 单步操作t、p 不同点?,70, 类型2nmi中断,非屏蔽中断 nmi中断是由nmi引腿引入,不受if屏蔽, 只要nmi腿出现中断请求 中断处理子程序入口地址在0:0008h0:000bh中, cpu予以响应, 进入对应的中断处理。 一般用于处理系统的重大故障。,71, 类型3断点中断8088提供的一种调试手段。 设
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《汽车营销方案》课件
- 化疗病人的临床护理
- 医疗设备操作培训
- 数学学案:课堂导学二次函数的性质与图象
- 大学校庆团日活动
- 一次性使用医疗无菌用品管理
- 中层管理思维培训
- 基础管理类培训
- 信息安全事件案例
- 医疗组组长工作职责
- 采煤教学课件
- 湖北省荆门市各县区乡镇行政村村庄村名居民村民委员会明细及行政区划代码
- 提高护士手卫生执行率PDCA案例汇报
- 浅析因俄罗斯社会变革产生的俄语新词
- 陶瓷厂工艺设计42
- 幼儿混龄区域活动-完整版PPT课件
- GA∕T 1788.3-2021 公安视频图像信息系统安全技术要求 第3部分:安全交互
- 金华市防空地下室设计技术咨询要点
- 最新商业建筑设计规范与商业建筑防火规范.
- 年产20万吨烧碱电解工段的初步工艺设计
- 软基处理监测及检测方案
评论
0/150
提交评论