计算机硬件技术第03章新教材4glast_第1页
计算机硬件技术第03章新教材4glast_第2页
计算机硬件技术第03章新教材4glast_第3页
计算机硬件技术第03章新教材4glast_第4页
计算机硬件技术第03章新教材4glast_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

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

文档简介

第3章第3章:3.3.5程序控制类指令程序控制类指令用于实现分支、循环、过程等程序结构,是仅次于传送指令的常用指令控制转移类指令通过改变IP〔和CS〕值,实现程序执行顺序的改变第3章:目标地址的寻址方式直接寻址方式指令代码中提供目的逻辑地址,转移后的CS和IP值直接来自指令操作码后的目的地址操作数间接寻址方式目的地址从存放器或存储单元中间接获得用标号表达用存放器或存储器操作数表达第3章:目标地址的寻址范围:段内寻址段内转移——近转移〔near〕在当前代码段64KB范围内转移〔±32KB范围〕不需要更改CS段地址,只要改变IP偏移地址段内转移——短转移〔short〕转移范围可以用一个字节表达,在段内-128~+127范围的转移代码段代码段第3章:目标地址的寻址范围:段间寻址段间转移——远转移〔far〕从当前代码段跳转到另一个代码段,CS段地址:IP偏移地址代码段代码段第3章: 程序控制类指令分为5类 1.无条件转移 2.调用与返回 3.条件转移 4.循环转移 5.中断第3章:一、无条件转移指令 格式:JMP目标标号;无条件转移到目标单元

①指令标号—直接转移,段内/段间 ②REG—间接转移,段内(16位通用) ③内存—间接转移,段内/段间

第3章:1.段内直接转移 ——转移的目标标号直接出现在指令中 格式:JMPDST

; 目标地址可使用符号地址

第3章:1.段内直接转移 ①假设转移范围-128~+127--段内直接短转移 符号地址前加操作符SHORT 格式:JMPSHORTDST ②假设转移范围为整个CS段内任一位置〔+32KB〕

--段内直接近转移符号地址前加操作符NEARPTR 格式:JMPNEARPTRDST 可以省略第3章:1.段内直接转移

例: JMP2000H ;直接转移到IP+2000H去执行指令 JMPSHORTLPI;段内短转移,转向符号地址LPI处 JMPNEARPTRKKK;段内近转移,转向符号地址KKK处

第3章:2.段内间接转移 格式:JMPDST ;存放器--IP←REG内存单元--IP←(EA+1),(EA) 例:JMPBX JMPWORDPTR[BX+25H] 假设(DS)=2000H,(BX)=0100H (20215H)=34H,(20216H)=12H 那么第一条指令执行的结果是:IP=0100H 第二条指令执行的结果是:IP=1234H第3章:3.段间直接转移

JMPFARPTRDST;IP←DST的段内偏移地址 CS←DST所在段的段地址 ①直接给seg16:offset16-数值表达式②符号地址-前加FARPTR例1:DST用数值表达式表示 JMPF000H:005BH ;可省略FAR属性说明CS←F000H, IP←005BH

第3章:3.段间直接转移 例2:DST用符号地址表示

CSEG1SEGMENT …

JMPFARPTRPROG CSEG1ENDS CSEG2SEGMENT …

PROG:…. CSEG2ENDS第3章:4.段间间接转移 格式:JMPDWORDPTRDST;IP←(EA) 双字数据CS←(EA+2)

例:JMPDWORDPTR[BX] 假设(DS)=2000H,(BX)=0100H (20210H)=1000H,(20212H)=4A00H那么执行后: IP=1000H,CS=4A00H程序从4B000H单元开始继续执行指令。请问段间间接转移可以用REG吗?JMP指令不影响FR第3章:二、子程序指令〔调用与返回〕子程序是完成特定功能的一段程序当主程序〔调用程序〕需要执行这个功能时,采用CALL调用指令转移到该子程序的起始处执行当运行完子程序功能后,采用RET返回指令回到主程序继续执行演示

转移指令有去无回子程序调用需要返回,其中利用堆栈保存返回地址第3章:1.子程序调用指令CALLCALL指令分成4种类型〔类似JMP〕CALLlabel ;段内、直接CALLr16/m16 ;段内、间接CALLfarptrlabel ;段间、直接CALLfarptrmem ;段间、间接注意:CALL指令不采用段内直接短调用方式第3章:1.子程序调用指令CALLCALL指令需要保存返回地址:段内调用——入栈偏移地址IPSP←SP-2,SS:[SP]←IP段间调用——入栈偏移地址IP和段地址CSSP←SP-2,SS:[SP]←CSSP←SP-2,SS:[SP]←IP第3章:⑴段内直接调用

—目标地址在指令中给出 格式:CALLNEARPTRDST ;SP←SP-2[SP+1],[SP]←原IP进栈IP←子程序偏移地址;子程序入口地址装入 其中,NEARPTR可省略DST-子程序名或子程序首址

第3章:⑵段内间接调用 格式:CALLNEARPTRDST SP←SP-2 [SP+1],[SP]←原IP IP←(EA);转向子程序入口DST-REG内存单元 例: CALLBX CALLWORDPTR[BX]

第3章:⑶ 段间直接调用 格式:CALLFARPTRDST ;SP←SP-2其中:DST为另一[SP+1],[SP]←原CS 段中某子程序的SP←SP-2 标号〔或入口地[SP+1],[SP]←原IP 址 IP←偏移地址;子程序入口 CS←段地址地址装入例:CALL1000H:0100H;IP=0100HCS=1000HCALLFARPTRSUB-PROC

第3章:⑷段间间接调用

格式:CALLDWORDPTRDST ;SP←SP-2 [SP+1],[SP]←CS SP←SP-2 [SP+1],[SP]←IP IP←(EA) CS←(EA+2)

例:CALLDWORDPTR[DI];IP←[DI] CS←[DI+2]第3章:

CALL指令对标志位无影响实际应用中,较多采用直接寻址方式,DST为调用的子程序(过程)名。如:

CALLNEARPTR子程序(过程)名 CALLFARPTR子程序(过程)名第3章:2.RET返回指令

⑴ 段内返回 --当过程被定义为NEAR时格式:RET;IP←[SP+1],[SP];断点出栈 SP←SP+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←断点〔偏〕出栈 SP←SP+2远〔FAR〕CS:IP←断点出栈SP←SP+4第3章:2.RET返回指令

⑶ RETn带立即数返回;RETSP←SP+n n--16位立即数,或数值表达式,称为弹出(POP)值。

例:;子程序MOVAX,N1PUSHAXPROG-APROCNEARMOVAX,N2……PUSHAXRET4CALLPROG-APROG-AENDPMOVSUM,AX

第3章:例:十六进制转换为ASCII码的子程序;子程序:将DL低4位的一位16进制数转换成ASCII码htoasc proc anddl,0fh ;只取DL的低4位 ordl,30h ;DL高4位变成3 cmpdl,39h ;是0~9,还是0Ah~0Fh? jbehtoend ;是0~9,转移 adddl,7 ;是0Ah~0Fh,加上7htoend: ret ;子程序返回htoasc endp;主程序:调用子程序movdl,28hcallhtoasc第3章:三、条件转移指令条件转移指令Jcc根据指定的条件确定程序是否发生转移。其通用格式为: Jcclabel ;条件满足,发生转移 ;装入新的IP ;否那么,顺序执行label是一个标号、一个8位位移量,Jcc只支持段内直接短转移〔-128~127〕第3章:Jcc指令的分类Jcc指令不影响标志,但要利用标志〔表3-10〕根据利用的标志位不同,分成三种情况:⑴判断单个标志位状态⑵比较无符号数上下⑶比较有符号数大小第3章:1.判断单个标志位状态⑴JZ/JE和JNZ/JNE 利用零标志ZF,判断结果是否为零〔或相等〕⑵JS和JNS 利用符号标志SF,判断结果是正是负⑶JO和JNO 利用溢出标志OF,判断结果是否产生溢出⑷JP和JNP 利用奇偶标志PF,判断结果中“1〞的个数是偶是奇⑸JC和JNC 利用进位标志CF,判断结果是否进位或借位第3章:1.判断单个标志位状态适用于:测试某种运算结果,并根据不同的状态标志产生程序分支,以便做不同的处理。第3章: 例1: ADDAX,BX JCTOO_BIG ;假设加法有进位转至TOO-BIG处理 SUBAL,BL JZZERO ;假设减法结果为0,转至ZERO处 理第3章:例题判断单个标志位状态题目:将AX中存放的无符号数除以2,如果是奇数那么加1后除以2问题:如何判断AX中的数据是奇数还是偶数?解答:判断AX最低位是“0〞〔偶数〕,还是“1〞〔奇数〕。可以用位操作类指令1:用逻辑与指令将除最低位外的其他位变成0,保存最低位不变。判断这个数据是0,AX就是偶数;否那么,为奇数2:将最低位用移位指令移至进位标志,判断进位标志是0,AX就是偶数;否那么,为奇数第3章:2.比较无符号数上下无符号数的大小用高〔Above〕、低〔Below〕表示,利用CF、ZF标志确定JB〔JNAE〕:目的操作数低于源操作数JNB〔JAE〕:目的操作数不低于源操作数JA〔JNBE〕:目的操作数高于源操作数JNA〔JBE〕:目的操作数不高于源操作数第3章:3.比较有符号数大小判断有符号数的大〔Greater〕、小〔Less〕,OF、SF、ZF标志确定JL〔JNGE〕:目的操作数小于源操作数JNL〔JGE〕:目的操作数不小于源操作数JG〔JNLE〕:目的操作数大于源操作数JNG〔JLE〕:目的操作数不大于源操作数第3章:3.比较有符号数大小

例:MOVAL,0FEHCMPAL,01HJGGREATER

测试两数是否相等,均可以用JE/JZ或JNE/JNZ

条件转移指令对标志位无影响。第3章:例求较大值 cmpax,bx ;比较AX和BX jaenext ;假设AX≥BX,转移 xchgax,bx ;假设AX<BX,交换next: movwmax,ax第3章:例求符号数的最大值设数据区1000H开始的区域中,存放着50个字节的符号数。要求找出其中最大的一个数并存到0FFFH单元。 MOVBX,1000H MOVAL,[BX] MOVCX,31H(49)L1:INCBX CMPAL,[BX] JGEL2 MOVAL,[BX] 屡次重复操作L2:DECCX JNEL1 MOVBX,0FFFH MOV[BX],AL 第3章:四、循环指令 LOOPlabel ;循环指令 ;首先CX←CX-1;然后判断;假设CX≠0,转移 JCXZlabel ;为0循环指令 :如果CX=0,那么转移label操作数采用段内直接短转移〔-128~+127〕还有LOOPZ/LOOPE和LOOPNZ/LOOPNE两条指令deccxjnzlabel第3章:1.LOOP指令格式:LOOP目标标号;CX←CX-1,CX≠0那么循环

DECCX JNZ 目标标号第3章:1.LOOP指令

MOVCX,NBEGIN:···循环体···

DECCXJNZBEGIN

MOVCX,NBEGIN:···循环体···

LOOPBEGIN

第3章:例LOOP指令例1:有一个首地址为ARRAY的M个字的数组,试编写一个程序求出该数组的内容之和(不考虑溢出),并把结果存入TOTAL中。 MOVCX,M ;字数组个数送入CX MOVAX,0 LEASI,ARRAY START_LOOP:ADDAX,[SI];将一个数组元素和送入AX ADDSI,2 ;修改数组指针 LOOPSTART_LOOP;假设CX不为0那么重复循环 MOVTOTAL,AX ;结果送TOTAL 第3章:循环指令 2. LOOPE/LOOPZ指令—有附加条件的循环指令 格式:LOOPE/LOOPZ目标标号 ;CX←CX-1,假设CX≠0且ZF=1,那么循环

3. LOOPNE/LOOPNZ指令 格式:LOOPNE/LOOPNZ目标标号 ;CX←CX-1,假设CX≠0且ZF=0,那么循环 4. JCXZ指令 格式:JCXZ目标标号 ;CX=0,那么循环

不影响CX的内容第3章:例LOOPZ指令检查64kB内存单元的读写性能.为此,依次向每个内存单元写入指定的数据01010101B,然后读出来进行比较,假设正确那么转入处理正确的程序段,否那么转入出错处理程序段. MOVCX,0000H ;设置计数器初值 MOVBX,0000H ;设置地址指针 MOVAL,01010101B;校验码55HAGAIN:MOVBYTEPTR[BX],AL INCBX CMPBYTEPTR[BX-1],AL LOOPZAGAIN JCXZOKERROR:……出错处理OK: ……正确处理第3章:

处理器控制类指令处理器控制类指令用来控制CPU的状态,使CPU暂停、等待或空操作等包括三种类型: 1.标志操作指令〔第1~7条〕 2.外部同步指〔第8~11条〕 3.空操

温馨提示

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

评论

0/150

提交评论