计算机硬件技术第03章新教材4glast课件.ppt

上传人:peixunshi 文档编号:19913618 上传时间:2023-04-13 格式:PPT 页数:56 大小:1.14MB
返回 下载 相关 举报
计算机硬件技术第03章新教材4glast课件.ppt_第1页
第1页 / 共56页
计算机硬件技术第03章新教材4glast课件.ppt_第2页
第2页 / 共56页
计算机硬件技术第03章新教材4glast课件.ppt_第3页
第3页 / 共56页
计算机硬件技术第03章新教材4glast课件.ppt_第4页
第4页 / 共56页
计算机硬件技术第03章新教材4glast课件.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《计算机硬件技术第03章新教材4glast课件.ppt》由会员分享,可在线阅读,更多相关《计算机硬件技术第03章新教材4glast课件.ppt(56页珍藏版)》请在三一文库上搜索。

1、第第3 3章章第第3章:章:3.3.5 程序控制类指令程序控制类指令 程序控制类指令用于实现程序控制类指令用于实现分支、循环、分支、循环、过程过程等程序结构,是仅次于传送指令等程序结构,是仅次于传送指令的常用指令的常用指令 控制转移类指令通过控制转移类指令通过改变改变IP(和(和CS)值,值,实现程序执行顺序的改变实现程序执行顺序的改变第第3章:目标地址的寻址方式章:目标地址的寻址方式直接寻址方式直接寻址方式指令代码中提供目的逻辑地址,转移后的指令代码中提供目的逻辑地址,转移后的CS和和IP值值直接直接来自指令操作码后的目的地址操作数来自指令操作码后的目的地址操作数间接寻址方式间接寻址方式目的

2、地址从寄存器或存储单元中目的地址从寄存器或存储单元中间接间接获得获得用标号表达用标号表达用寄存器或存储器操作数表达用寄存器或存储器操作数表达第第3章:目标地址的寻址范围:段内寻址章:目标地址的寻址范围:段内寻址段内转移段内转移近转移(近转移(near)在 当 前 代 码 段在 当 前 代 码 段 6 4 K B 范 围 内 转 移范 围 内 转 移(32KB范围)范围)不需要更改不需要更改CS段地址,段地址,只要改变只要改变IP偏偏移地址移地址段内转移段内转移短转移(短转移(short)转移范围可以用一个字节表达,在段转移范围可以用一个字节表达,在段内内128127范围的转移范围的转移代码段代

3、码段代码段代码段第第3章:目标地址的寻址范围:段间寻址章:目标地址的寻址范围:段间寻址段间转移段间转移远转移(远转移(far)从当前代码段跳转到另一个代码段,从当前代码段跳转到另一个代码段,CS段地址段地址:IP偏移地址偏移地址代码段代码段代码段代码段第第3章:章:程序控制类指令分为程序控制类指令分为5类类1.无条件转移无条件转移2.调用与返回调用与返回3.条件转移条件转移4.循环转移循环转移5.中断中断第第3章:一、章:一、无条件转移指令无条件转移指令 格式:格式:JMP 目标标号目标标号 ;无条件转移到目标单元无条件转移到目标单元 指令标号指令标号直接转移,段内直接转移,段内/段间段间 R

4、EG间接转移,段内间接转移,段内 (16位通用位通用)内存内存间接转移,段内间接转移,段内/段间段间 第第3章:章:1.段内直接转移段内直接转移转移的目标标号转移的目标标号直接出现在指令中直接出现在指令中格式:格式:JMP DST ;目标地址目标地址 可使用符号地址可使用符号地址 第第3章:章:1.段内直接转移段内直接转移 若转移范围若转移范围128127 段内直接短转移段内直接短转移符号地址前加操作符符号地址前加操作符SHORT格式格式:JMP SHORT DST 若转移范围为整个若转移范围为整个CS段内任一位置(段内任一位置(+32KB)段内直接近转移段内直接近转移 符号地址前加操作符符号

5、地址前加操作符NEAR PTR格式:格式:JMP NEAR PTR DST 可以省略可以省略第第3章:章:1.段内直接转移段内直接转移例:例:JMP 2000H ;直接转移到直接转移到IP+2000H去执行去执行指令指令JMP SHORT LPI ;段内短转移,转向符号地址段内短转移,转向符号地址 LPI处处JMP NEAR PTR KKK ;段内近转移,转向符段内近转移,转向符 号地址号地址KKK处处 第第3章:章:2.段内间接转移段内间接转移格式:格式:JMP DST;寄存器寄存器IPREG 内存单元内存单元IP(EA+1),(EA)例:例:JMP BX JMP WORD PTR BX+2

6、5H若若(DS)=2000H,(BX)=0100H(20125H)=34H,(20126H)=12H则第一条指令执行的结果是则第一条指令执行的结果是:IP=0100H 第二条指令执行的结果是第二条指令执行的结果是:IP=1234H第第3章:章:3.段间直接转移段间直接转移JMP FAR PTR DST ;IPDST的段内偏移地址的段内偏移地址 CSDST所在段的段地址所在段的段地址 直接给直接给seg16:offset16数值表达式数值表达式 符号地址前加符号地址前加FAR PTR例例1:DST用数值表达式表示用数值表达式表示JMP F000H:005BH;可省略可省略FAR属性说明属性说明

7、CSF000H,IP005BH第第3章:章:3.段间直接转移段间直接转移例例2:DST用符号地址表示用符号地址表示CSEG1 SEGMENT JMP FAR PTR PROGCSEG1 ENDSCSEG2 SEGMENTPROG:.CSEG2 ENDS第第3章:章:4.段间间接转移段间间接转移格式:格式:JMP DWORD PTR DST ;IP(EA)双字数据双字数据 CS(EA+2)例:例:JMP DWORD PTR BX若若(DS)=2000H,(BX)=0100H(20100H)=1000H,(20102H)=4A00H则执行后:则执行后:IP=1000H,CS=4A00H 程序从程序

8、从4B000H单元开始继续执行指令。单元开始继续执行指令。请问段间间接转移可以用请问段间间接转移可以用REG吗?吗?JMP指令不影响指令不影响FR第第3章:二、子程序指令(调用与返回)章:二、子程序指令(调用与返回)子程序是完成特定功能的一段程序子程序是完成特定功能的一段程序当主程序(调用程序)需要执行这个功能时,当主程序(调用程序)需要执行这个功能时,采用采用CALL调用指令转移到该子程序的起始调用指令转移到该子程序的起始处执行处执行当运行完子程序功能后,采用当运行完子程序功能后,采用RET返回指令返回指令回到主程序继续执行回到主程序继续执行演示演示 转移转移指令指令有去无回有去无回 子程序

9、子程序调用需要返回调用需要返回,其中利用堆栈保存返回地址其中利用堆栈保存返回地址第第3章:章:1.子程序调用指令子程序调用指令CALLCALL指令分成指令分成4种类型(类似种类型(类似JMP)CALL label;段内、直接;段内、直接CALL r16/m16;段内、间接;段内、间接CALL far ptr label;段间、直接;段间、直接CALL far ptr mem;段间、间接;段间、间接注意:注意:CALL指令不采用段内直接指令不采用段内直接短短调用方式调用方式第第3章:章:1.子程序调用指令子程序调用指令CALLCALL指令需要保存返回地址:指令需要保存返回地址:n段内调用段内调用

10、入栈偏移地址入栈偏移地址IPSPSP2,SS:SPIPn段间调用段间调用入栈偏移地址入栈偏移地址IP和段地址和段地址CSSPSP2,SS:SPCSSPSP2,SS:SPIP第第3章:章:段内直接调用段内直接调用 目标地址在指令中给出目标地址在指令中给出格式:格式:CALL NEAR PTR DST ;SPSP2 SP+1,SP原原IP进栈进栈 IP子程序偏移地址子程序偏移地址 ;子程序子程序 入口地址入口地址 装入装入其中,其中,NEAR PTR可省略可省略 DST子程序名子程序名 或子程序首址或子程序首址 第第3章:章:段内间接调用段内间接调用格式:格式:CALL NEAR PTR DST

11、SPSP2 SP+1,SP原原IP IP(EA);转向子程序入口转向子程序入口 DST REG 内存单元内存单元例:例:CALL BXCALL WORD PTR BX 第第3章:章:段间直接调用段间直接调用格式:格式:CALL FAR PTR DST ;SP SP-2其中:其中:DST为另一为另一 SP+1,SP 原原CS段中某子程序的段中某子程序的 SP SP-2标号(或入口地标号(或入口地 SP+1,SP 原原IP址址 IP 偏移地址偏移地址 ;子程序入口子程序入口 CS段地址段地址 地址装入地址装入例:例:CALL 1000H:0100H ;IP=0100H CS=1000H CALL

12、FAR PTR SUBPROC 第第3章:章:段间间接调用段间间接调用格式:格式:CALL DWORD PTR DST ;SP SP-2 SP+1,SPCS SPSP-2 SP+1,SPIP IP(EA)CS(EA+2)例:例:CALL DWORD PTR DI ;IPDI CSDI+2第第3章:章:CALL 指令对标志位无影响指令对标志位无影响 实际应用中,实际应用中,较多采用直接寻址方式较多采用直接寻址方式,DST为为调用的子程序调用的子程序(过程过程)名。名。如:如:CALL NEAR PTR 子程序子程序(过程过程)名名CALL FAR PTR 子程序子程序(过程过程)名名第第3章:章

13、:2.RET 返回指令返回指令 段内返回段内返回当过程被定义为当过程被定义为NEAR时时 格式:格式:RET ;IP SP+1,SP ;断点出栈断点出栈 SPSP+2第第3章:章:2.RET 返回指令返回指令 段间返回段间返回当过程被定义为当过程被定义为FAR时时格式:格式:RET;IP SP+1,SP SP SP+2 CS SP+1,SP SP SP+2 差别:差别:段内返回代码为段内返回代码为 C3H(或(或C2H)段间返回代码为段间返回代码为 CBH(或(或CAH)第第3章:章:2.RET 返回指令返回指令可归纳为可归纳为:RET ;近(近(NEAR)IP断点(偏)出栈断点(偏)出栈 S

14、P SP+2 远(远(FAR)CS:IP 断点出栈断点出栈 SP SP+4第第3章:章:2.RET 返回指令返回指令RET n 带立即数返回带立即数返回 ;RET SPSP+nn16位立即数,或数值表达式,称为弹出位立即数,或数值表达式,称为弹出 (POP)值。值。例:例:;子程序;子程序 MOV AX,N1 PUSH AX PROG-A PROC NEAR MOV AX,N2 PUSH AX RET 4 CALL PROG-A PROG-A ENDP MOV SUM,AX 第第3章:例:十六进制转换为章:例:十六进制转换为ASCII码的子程序码的子程序;子程序:;子程序:将将DLDL低低4

15、4位的一位位的一位1616进制数进制数转换转换成成ASCIIASCII码码htoaschtoascprocprocand dl,0fhand dl,0fh;只取;只取DLDL的低的低4 4位位or dl,30hor dl,30h;DLDL高高4 4位变成位变成3 3cmp dl,39hcmp dl,39h;是;是0 09 9,还是,还是0Ah0Ah0Fh?0Fh?jbe htoendjbe htoend;是;是0 09 9,转移,转移add dl,7add dl,7;是;是0Ah0Ah0Fh0Fh,加上,加上7 7htoend:htoend:retret;子程序返回;子程序返回htoascht

16、oascendpendp;主程序:调用;主程序:调用子程序子程序mov dl,28hcall htoasc第第3章:三、章:三、条件转移指令条件转移指令条件转移指令条件转移指令Jcc根据指定的条件确定程序根据指定的条件确定程序是否发生转移。其通用格式为:是否发生转移。其通用格式为:Jcc label;条件满足条件满足,发生转移发生转移;装入新的;装入新的IP;否则,顺序执行否则,顺序执行label是一个标号、一个是一个标号、一个8位位移量,位位移量,Jcc只支持段内直接短转移只支持段内直接短转移(-128127)第第3章:章:Jcc指令的分类指令的分类Jcc指令不影响标志,但要利用标志(表指令

17、不影响标志,但要利用标志(表310)根据利用的标志位不同,分成三种情况:根据利用的标志位不同,分成三种情况:判断单个标志位状态判断单个标志位状态 比较无符号数高低比较无符号数高低 比较有符号数大小比较有符号数大小第第3章:章:1.判断单个标志位状态判断单个标志位状态 JZ/JE和和JNZ/JNE利用零标志利用零标志ZF,判断结果是否为零(或相等),判断结果是否为零(或相等)JS和和JNS利用符号标志利用符号标志SF,判断结果是正是负,判断结果是正是负 JO和和JNO利用溢出标志利用溢出标志OF,判断结果是否产生溢出,判断结果是否产生溢出 JP和和JNP利用奇偶标志利用奇偶标志PF,判断结果中,

18、判断结果中“1”的个数是偶是奇的个数是偶是奇 JC和和JNC利用进位标志利用进位标志CF,判断结果是否进位或借位,判断结果是否进位或借位第第3章:章:1.判断单个标志位状态判断单个标志位状态 适用于:测试某种运算结果,并根据不同适用于:测试某种运算结果,并根据不同的状态标志产生程序分支,以便做不同的的状态标志产生程序分支,以便做不同的处理。处理。第第3章:章:例例1:ADD AX,BXJC TOO_BIG;若加法有进位转至若加法有进位转至TOO-BIG 处理处理SUB AL,BLJZ ZERO;若减法结果为若减法结果为0,转至转至ZERO处处 理理第第3章:例题章:例题 判断单个标志位状态判断

19、单个标志位状态题目:题目:将将AX中存放的无符号数除以中存放的无符号数除以2,如,如果是奇数则加果是奇数则加1后除以后除以2问题:问题:如何判断如何判断AX中的数据是奇数还是偶中的数据是奇数还是偶数?数?解答:解答:判断判断AX最低位是最低位是“0”(偶数),还(偶数),还是是“1”(奇数)。可以用位操作类指令(奇数)。可以用位操作类指令1:用逻辑与指令将除最低位外的其他位变成用逻辑与指令将除最低位外的其他位变成0,保,保留最低位不变。判断这个数据是留最低位不变。判断这个数据是0,AX就是偶数;就是偶数;否则,为奇数否则,为奇数2:将最低位用移位指令移至进位标志,判断进位将最低位用移位指令移至

20、进位标志,判断进位标志是标志是0,AX就是偶数;否则,为奇数就是偶数;否则,为奇数第第3章:章:2.比较无符号数高低比较无符号数高低无符号数的大小用高(无符号数的大小用高(Above)、低)、低(Below)表示,利用)表示,利用CF、ZF标志确标志确定定JB(JNAE):目的操作数低于源操作数):目的操作数低于源操作数JNB(JAE):目的操作数不低于源操作数):目的操作数不低于源操作数JA(JNBE):目的操作数高于源操作数):目的操作数高于源操作数JNA(JBE):目的操作数不高于源操作数):目的操作数不高于源操作数第第3章:章:3.比较有符号数大小比较有符号数大小判断有符号数的大(判断

21、有符号数的大(Greater)、小)、小(Less),),OF、SF、ZF标志确定标志确定JL(JNGE):目的操作数小于源操作数):目的操作数小于源操作数JNL(JGE):目的操作数不小于源操作数):目的操作数不小于源操作数JG(JNLE):目的操作数大于源操作数):目的操作数大于源操作数JNG(JLE):目的操作数不大于源操作数):目的操作数不大于源操作数第第3章:章:3.比较有符号数大小比较有符号数大小 例:例:MOV AL,0FEH CMP AL,01H JG GREATER 测试两数是否相等,均可以用测试两数是否相等,均可以用JE/JZ 或或JNE/JNZ 条件转移指令对标志位无影响

22、。条件转移指令对标志位无影响。第第3章:例章:例 求较大值求较大值cmp ax,bx;比较比较AX和和BXjae next;若若AXBX,转移,转移xchg ax,bx;若若AXBX,交换,交换next:mov wmax,ax第第3章:例章:例 求符号数的最大值求符号数的最大值设数据区设数据区1000H开始的区域中开始的区域中,存放着存放着50个字节的符号个字节的符号数。要求找出其中最大的一个数并存到数。要求找出其中最大的一个数并存到0FFFH单元单元。MOV BX,1000H MOV AL,BX MOV CX,31H(49)L1:INC BX CMP AL,BX JGE L2 MOV AL,

23、BX 多次重复操作多次重复操作 L2:DEC CX JNE L1 MOV BX,0FFFH MOV BX,AL第第3章:四、循环指令章:四、循环指令LOOP label;循环指令循环指令;首先;首先CXCX1;然后判断;若;然后判断;若CX0,转,转移移JCXZ label;为为0循环指令循环指令:如果:如果CX0,则转移,则转移label操作数采用段内直接短转移操作数采用段内直接短转移(-128+127)还有还有LOOPZ/LOOPE和和LOOPNZ/LOOPNE两条指令两条指令dec cxjnz label第第3章:章:1.LOOP 指令指令格式格式:LOOP 目标标号目标标号 ;CXCX

24、-1,CX 0则循环则循环DEC CX JNZ 目标标号目标标号 Y N CX循循环环次次数数 循循环环体体 CXC CX X-1 1 CX0 0 第第3章:章:1.LOOP 指令指令 MOV CX,NBEGIN:循环体循环体 DEC CX JNZ BEGIN MOV CX,NBEGIN:循环体 LOOP BEGIN 第第3章:例章:例 LOOP 指令指令例例1:有一个首地址为有一个首地址为ARRAY的的M个字的数组个字的数组,试编写一试编写一个程序求出该数组的内容之和个程序求出该数组的内容之和(不考虑溢出不考虑溢出),并把结,并把结果存入果存入TOTAL中。中。MOV CX,M;字数组个数送

25、入字数组个数送入CX MOV AX,0 LEA SI,ARRAYSTART_LOOP:ADD AX,SI ;将一个数组元素和送入将一个数组元素和送入AX ADD SI,2;修改数组指针修改数组指针 LOOP START_LOOP ;若若CX不为不为0则重复循环则重复循环 MOV TOTAL,AX;结果送结果送TOTAL第第3章:循环指令章:循环指令2.LOOPE/LOOPZ指令指令有附加条件的循环指令有附加条件的循环指令格式格式:LOOPE/LOOPZ 目标标号目标标号 ;CXCX-1,若若CX0且且ZF=1,则循环则循环 3.LOOPNE/LOOPNZ指令指令格式格式:LOOPNE/LOOP

26、NZ 目标标号目标标号 ;CXCX-1,若若CX0且且ZF=0,则循环则循环4.JCXZ指令指令格式格式:JCXZ 目标标号目标标号;CX=0,则循环则循环 不影响不影响CX的内容的内容第第3章:例章:例 LOOPZ 指令指令 检查检查64kB内存单元的读写性能内存单元的读写性能.为此为此,依次向每个内存单依次向每个内存单元写入指定的数据元写入指定的数据01010101B,然后读出来进行比较然后读出来进行比较,若正确则若正确则转入处理正确的程序段转入处理正确的程序段,否则转入出错处理程序段否则转入出错处理程序段.MOV CX,0000H ;设置计数器初值设置计数器初值 MOV BX,0000H

27、 ;设置地址指针设置地址指针 MOV AL,01010101B ;校验码校验码55HAGAIN:MOV BYTE PTR BX,AL INC BX CMP BYTE PTRBX-1,AL LOOPZ AGAIN JCXZ OKERROR:出错处理出错处理OK:正确处理正确处理第第3章:章:3.3.6 处理器控制类指令处理器控制类指令处理器控制类指令用来控制处理器控制类指令用来控制CPU的状态,使的状态,使CPU暂停、等待或空操作等暂停、等待或空操作等 包括三种类型包括三种类型:1.标志操作指令(第标志操作指令(第17条)条)2.外部同步指(第外部同步指(第811条)条)3.空操作指令(第空操作

28、指令(第12条)条)第第3章:章:3.3.6 处理器控制类指令处理器控制类指令处理器控制类指令用来控制处理器控制类指令用来控制CPU的状态,使的状态,使CPU暂停、等待或空操作等暂停、等待或空操作等1.进位标志操作进位标志操作 CLC;CF0 这三条指令常和这三条指令常和 STC;CF1 ADC,RCL,RCR CMC;CFCF 指令配合使用指令配合使用第第3章:一、标志操作指令章:一、标志操作指令2.方向标志操作方向标志操作 CLD ;DF0 STD ;DF1 第第3章:一、标志操作指令章:一、标志操作指令3.中断标志操作中断标志操作 CLI ;IF0 以控制以控制CPU是否响应是否响应 S

29、TI ;IF1 可屏蔽中断可屏蔽中断INTR引引 线上出现的外部中线上出现的外部中 断请求断请求 CLI禁止禁止 CPU响响应应 STI允许允许第第3章:二章:二.、同步控制类同步控制类1.ESC 交权(处理机脱离指令)交权(处理机脱离指令)3.WAIT 等待等待4.LOCK 封锁总线封锁总线 三三.其他控制类指令其他控制类指令暂停:暂停:HLT空操作:空操作:NOP 等同于等同于“xchg ax,ax”指令指令目的地址相对寻址方式目的地址相对寻址方式目的地址寄存器段内间接寻址方式目的地址寄存器段内间接寻址方式目的地址存储器段内间接寻址方式目的地址存储器段内间接寻址方式目的地址段间直接寻址方式目的地址段间直接寻址方式目的地址存储器段间间接寻址方式目的地址存储器段间间接寻址方式主程序与子程序主程序与子程序CALL label主程序主程序RET子程序子程序回到回到CALL指令后的指令指令后的指令处处返回地址返回地址主程序与中断服务程序主程序与中断服务程序主程序主程序IRET中断服务程序中断服务程序断点断点中断请求中断请求中断请求可以来自处理器外部的中断源,中断请求可以来自处理器外部的中断源,也可以由处理器执行指令引起:也可以由处理器执行指令引起:例如执行例如执行INT i8指令。指令。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1