1 / 40

第八讲 8088 指令系统(续) 2006.11.7 (星期二)

第八讲 8088 指令系统(续) 2006.11.7 (星期二). 课程内容: 五、控制传送指令 六、处理器控制指令. 如何利用地址线产生脉冲. 两态总线. 三态总线. KKK : M OV AL ,( BX ) CALL DELAY INC BX MOV AL ,( BX ) CALL DELAY JMP KKK. 五.控制传送指令 ( Control transfer instructions ) 控制传送指令概述 控制传送指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。.

ryan-torres
Download Presentation

第八讲 8088 指令系统(续) 2006.11.7 (星期二)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第八讲 8088指令系统(续)2006.11.7(星期二) 课程内容: 五、控制传送指令 六、处理器控制指令

  2. 如何利用地址线产生脉冲 两态总线 三态总线 KKK:MOV AL,(BX) CALL DELAY INC BX MOV AL,(BX) CALL DELAY JMP KKK

  3. 五.控制传送指令(Control transfer instructions) 控制传送指令概述 控制传送指令包括四种: 转移指令,循环控制指令,过程调用指令,中断指令。

  4. (一)、无条件转移指令 1. JMP(jmp)目标标号 JMP指令必须指定转移的目标地址(或转向地址)。 转移分成两类:段内或段间转移。 (1)段内直接转移:只要改变IP寄存器的内容 指在同一段的范围之内进行转移 (IP)←(IP)当前+目标标号所代表的地址偏移量 地址偏移量又称为符号地址 目标标号为8位,称为短转移。 目标标号为16位,称为近转移。

  5. 内存 ... OP (NEXT的值定义为50H) (IP) 当前 ... 3000:1000H ... OP 3000:1050H 03H ... (IP)=(IP)当前+D8 例如:代码段内有一条无条件转移指令在汇编语言中使用符号地址。 JMP SHORT NEXT指令执行过程: NEXT—在汇编语言中使用符号地址 (IP)←(IP)当前+D8(8位带符号数) 向前跳,D8为正数, 往回跳,D8用补码 源程序 : 条件转移指令:JMP SHORT next ... ... ... next: MOV AL,03H JMP SHORT ABC 若ABC=0F0H,则回跳16字节

  6. (2)段内间接转移: (CS)不变,只改变(IP) 格式:JMP OPR OPR —为16位寄存器、 或存储器(除立即数以外的任何一种寻址方式) 执行操作: (IP) (EA) 或(IP)  (reg16) IP指针的内容根据寄存器或存储器(数据段、附加段、堆栈段)的内容而改变。 指令格式举例: JMP BX JMP SI JMP TABLE [BX] ; 操作数已定义为16位存储器 JMP ALPHA_WORD ;操作数已定义为16位存储器 JMP WORD PTR [BP][DI];操作数已定义为16位存储器

  7. 例: (IP)=5000H, (CS)=3000H , (DS)=1000H, (BX)=1000H (11000H)=1234H, JMP BX ; (IP)=1000H,在当前段内,属于 ;寄存器寻址 JMP WORD PTR [BX] ;(CS)=3000H , (IP)=1234H 在当前段内,(PA)=(16d(DS)+(BX))=(11000H) 为 1234H 将PA地址存储器的内容( 1234H )给IP ;属于寄存器间接寻址。

  8. (3)段间直接转移:要修改IP、 CS寄存器的内容。 转到另一段去执行程序。 转移目标地址= 新的段地址和偏移地址两部分组成。 格式:JMP FAR PTR OPR; OPR—在汇编语言中使用 符号地址 (如标号AKK,假设定义在另一程序段CC00:0044)。 转移地址与指令不在同一个段里。 在机器语言中则要指定转向地址的偏移地址和段地址 JMP FAR PTR AKK 执行操作:(IP)←OPR所在的段内偏移地址0044H。 (CS)←OPR所在的段的段址CC00H。 直接转移通过符号地址加载IP和CS,间接转移通过存储器内容加载IP和CS .

  9. (4) 段间间接转移:(CS) 、 (IP)都改变 格式:JMP DWORD PTR OPR OPR —存储器操作数 (除立即数和寄存器以外的任何一种寻址方式) 执行操作:将4字节连续地址分别送给IP和CS (IP)←(EA) (CS)←(EA+2) 例:已知 (BX)=1000H,(SI)=2000H , (DS)=2000H (23000H)=2212H, (23002H)=4434H JMP DWORD PTR [BX][SI] 则: (BX)+(SI)=3000H (IP)=(PA)=(16d(DS)+(BX)+(SI))=(23000H)=2212H (CS)=(PA+2)=4434H

  10. 2.条件转移指令 指令格式:J cc OPR 操作:根据上一条指令所设置的条件码来判别测试条件转移。 每一种条件转移指令都有它的测试条件。 满足条件时 : (IP)←(IP)当前+ OPR(D8) 使用相对寻址方式,范围-128~+127个字节 不满足条件时:(IP)不变,顺序执行下一条指令 (该指令为两字节长度,一字节为指令功能码,一指令为一个字节的相对跳转地址偏移量)

  11. 按转移条件不同,条件转移指令可以分为四大类:按转移条件不同,条件转移指令可以分为四大类: ① 以单个状态标志作为转移条件助记符 转移条件 ② 以CX的值为0作为转移条件

  12. ③以两个无符号数比较的结果作为转移条件 ④以两个带符号数比较的结果作为转移条件

  13. 注意几点: • 所有条件转移指令都是相对转移形式,(两字节指令) • 范围(-128~+127)。 • 当需往一个较远地方进行条件转移时, • 选用条件转移转到附近一个单元, • 然后,再用无条件转移转到较远的目的地。 • ② 条件转移指令中,相当一部分指令是在比较完二个数大小后,根据结果而决定是否转移, • ③条件转移指令不影响标志位 • 例: 程序段 2000H: 3040H DONE: MOV AX,05H • ………… • 2000H: 3079H JNE DONE • 求DONE为何值

  14. 内存 ... (IP) 当前 OP 2000:3040H 05H 0011000001111011 1111111111000101 0011000001000000 307BH ... + C5H ... OP 2000:3079H DONE C5H 2000:307BH ... 程序段 2000H: 3040H DONE:MOV AX,05H ………… 2000H: 3079H JNE DONE 执行此指令时, IP指针为何 (IP)=(IP)当前

  15. 条件转移指令应用 例:比较二个数是否相等 如相等做动作1 否则做动作2 …… CMP AX,BX JE action_1 Action_2: …… …… action_1 : …… Y N N Y action_1 action_2 action_2 action_1 AX BX AX BX = = ? ? 或 …… CMP AX,BX JNZ action_2 action_1: …… action_2: ……

  16. 例:在M中有一个首地址为array的N字数组, 要求测试其中正数、0及负数的个数. (带符号数判断) 正数个数放在: (DI)中, 0的个数放在: (SI)中, 负数的个数放在: N-(DI)-(SI)送(AX) 如果没有负数转skip, 如果有负数转neg_val 程序: mov cx,N ; N字数组 mov bx,0 mov di,bx mov si,bx again: cmp word ptr arrary[bx],0 jle less_or_ag inc di ;正数个数 jmp short neat less_or_ag: jl neat inc si ; 0的个数 neat: add bx,2 dec cx jnz again mov ax,N sub ax,di sub ax,si jz skip;没有负数 jmp near ptr neg_val;有负数 skip: …… neg_val: ……

  17. (三) 过程( 子程序 )调用指令 子程序—程序中具有独立功能的部分编写成独立程序模块。 子程序(过程)定义格式: 符号名 (AA) PROC 类型(FAR/NEAR) …… RET(RETURN) 符号名(AA) ENDP 子程序调用和返回指令: CALL AA 过程有两种类型: 按过程与调用语句间的位置,过程有两种类型。 NEAR类型:调用指令与过程在同一个段中 FAR类型:调用指令与过程不在同一个段中 CALL指令和RET指令都不影响条件码。

  18. CALL( Call a procedure)调用 CALL调用指令 调用地址由指令给出 调用时:将当前地址入栈 (CS)。 (IP)。 CALL调用指令有4种: 段内直接调用 段间直接调用 段内间接调用 段间间接调用

  19. 例 : CSEG1 SEGMENT CALL FAR PTR subp;此处的CS:IP入栈转subp … CSEG1 ENDS CSEG2 SEGMENT … subp PROC FAR … RET subp ENDP CSEG2 ENDS

  20. (2)、 RET( Reture from procedure)返回 • RET返回指令 放在子程序的末尾 使子程序在功能完成后返回调用程序继续执行。 *为能准确返回 ,返回指令类型与调用指令类型相对应。 RET返回指令有4种: • 段内返回 段间返回 • 段内带立即数返回 段间带立即数返回 • 在子程序调用时,返回地址入栈 • 返回时:将返回地址出栈 (IP)(段内或段间)。 • (CS)(段间)。

  21. (3) 、小结 : • 指令格式: JMP 操作数 ◢ 当前IP的值为控制转移指令下一条指令的偏移地址。 ◢ 位移量 = 符号地址的偏移量 - 当前IP的值。 ◢ 符号地址(目标地址)= 当前IP的值 + 位移量

  22. 转移方式:由CS是否变化、以及操作数类型决定情况如下表转移方式:由CS是否变化、以及操作数类型决定情况如下表

  23. 各控制转移指令允许使用的转移方式

  24. 例 : JMP again (√) JMP BX (√) JMP WORD PTR [BX] (√) JMP DWORD PTR (√) JZ AX (不能是字,AX) (×) JNZ next (?) (若 next的位移量超出-128~127)

  25. (四)循环控制指令 格式 : LOOPxx符号地址 执行 操作 : ①(CX) ← (CX)- 1 此操作不影响标志 ② 检查转移条件xx,满足转向目标地址去执行;    不满足执行LOOPxx后一条指令 转移方式 只允许段内直接短方式,跳转范围-128~127

  26. 与条件转移指令不同的是:循环指令隐含 ( CX ) 减1操作。 例:用循环指令将BL寄存器的内容按二进制形式显示出来 学习: LOOP指令 MOV CX , 8 next: ROL BL , 1 MOV DL , BL AND DL , 0000 0001B ADD DL , 0011 0000B MOV AH , 2 INT 21H DEC CX JNZ next …… LOOP next

  27. 循环指令说明: • LOOP退出循环条件是(CX)=0 • LOOPZ和LOOPNZ提供了提前结束循环的可能, • 不一定要等到(CX)=0才退出循环。 • ▲ 在串中查找字符,查到了,就可退出, •      可用LOOPNZ,不相等时继续查找。 • ▲比较两串时,当有字符不等,就可退出,说明两字符串不等。 •      可用LOOPZ,当相等时继续比较。 • ▲执行完 LOOPNZ或LOOPZ后,根据ZF标志的值判断结果 • 对查找字符,ZF=1,说明找到;否则没有找到。 • 对串比较,ZF=1, 说明两串相等;否则不等。

  28. 例: 在string字符串中查找空格字符,串长度为N。 Y 判[BX]是关键字? N N (CX) = 0 ? Y 修改偏址BX AL 关键字 CX 串长度N DS:BX 串首址 (CX) (CX)-1 找到处理 未找到处理 结束出口 用条件转移: JZ 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 未找到处理 …… Find: 找到处理 ……

  29. 用LOOPZ和LOOPNZ指令提供提前结束循环的可能性。用LOOPZ和LOOPNZ指令提供提前结束循环的可能性。 有时需要字符串中查找一个字符,找到后可提前结束循环, 用LOOPZ、LOOPNZ来处理。 例:40个元素构成的数组,找出第一个非零元素。 MOV CX,28H MOV SI,0FFFFH NEXT1:INC SI CMP BYTE PTR [SI],0 LOOPZ NEXT1;当Z=1、(CX)≠0循环; 当Z=0,或(CX)=0结束循环。 JNZ OKK ;当找到非零元素转OKK。 CALL DISPLAY1 ;当找不到非零元素转DISPLAY1 …… OKK: CALL DISPLAY2 …… DISPLAY1 …… RET DISPLAY2 …… RET 指令JMP、CALL 、Jcc、LOOPxx本身对标志无影响。

  30. 4、中断指令 • 中断(Interrupt): • 有时当系统运行或程序运行期间遇到某些特殊情况, • 需要计算机自动执行一组专门的例行程序来进行处理。 • 中断例行程序(或中断子程序)(Interrupt routine): 所执行的这组程序就称为中断子程序。 • 种类: • 中断分为内部(软)中断和外部(硬)中断两种。 • 内部中断—如除法运算中除数为0、中断指令引起的中断。 • 外部中断—处理I/O设备与CPU之间的通信。

  31. CPU响应一次中断自动完成三件事情: • (PSW)入栈 — 保护现场, • (CS),(IP)保存入栈 — 保留断点, • 转中断例行程序去执行。 • 中断返回时: • 恢复(IP)、(CS)及(PSW) • 中断向量:中断例行程序入口地址。 • IBM-PC中,存储器的最底地址00000H——003FFH为中断向量区, 存放256种类型中断例行程序入口地址,每个中断向量占4个单元。 • 中断指定类型号N × 4——取得指定类型的中断向量地址。

  32. 例:中断类型9,9 × 4=36 00024H——00027H单元中放中断向量。 IBM-PC机中为每个类型规定了一种功能。 *除非特别注明,类型号是以16进制形式表示的。

  33. (1). 介绍几条指令:INT n,IRET 格式:INT n ; n—常数或表达式,n=0—255 或INT 执行操作: (SP)←(SP)-2, (SP)) ←(PSW) (SP)←(SP)-2,(SP)) ← (CS) (SP)←(SP)-2,← (IP) (IP) ←(N×4) (CS) ←(N×4+2) 清除IF、TF,避免进入中断以后不被外面其它中断所打断 及进入中断以后按单步执行。

  34. 类型0~3的中断称为内部中断。 •  类型0 :指令系统没有INT0这条指令 • 除数为0中断 • 除数为0 :它既不是外部中断 也不是软件中断。 • 是由 CPU自身产生的,所以无对应中断指令。 • 有符号数进行除法所得的商超出规定范围 • 有符号数进行除法运算,所得的商超出规定范围, • CPU自动产生类型为0的中断,转入响应的中断处理程序。 • 。

  35. 内存0:0000H~0:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。内存0:0000H~0:03FFH区域中,构成中断向量表,存放中断处理程序入口地址。 每4个单元对应1个中断源。关系如下表:

  36. ∴ INTO跟在有符号数+、-后面: * 这条指令可以写在一条算术指令后面。 若产生溢出,OF=1,则启动中断过程,不进行任何操作。 (2) IRET——从中断返回指令(Interrupt return) 所有中断过程(服务程序)不管是硬还是软,最后一条指令一定是: IRET退出中断过程,返回中断时断点。 格式:IRET 执行操作:(IP)←((SP)+1,(SP)) , (SP) ←(SP)+2 (CS)←((SP)+1,(SP)) , (SP) ←(SP)+2 ( PSW)←((SP)+1,(SP)), (SP) ←(SP)+2

  37. 六、处理器控制指令 (一)标志处理指令 1、CLC (Clear carry flag ) 清CF标志 2、STC(Set carry flag ) 置CF标志 3、CMC(Complement carry flag ) 对CF求反 4、CLD(Clear direction flag ) 清DF标志 5、STD(Set direction flag ) 置DF标志 6、CLI(Clear interrupt flag ) 清IF标志 7、 STI (Set interrupt enable flag ) 置IF标志 (二)其他处理机控制指令 1、NOP(No operation ) 空操作 2、 HLT(Halt ) CPU暂停状态 3、 WAIT (Wait while pin not asserted ) CPU等待状态 4、 ESC(Escape ) 交权 5、 LOCK(Lock bus ) 总线锁定

  38. 标志处理指令 ▲ 设置和清除标志的指令,只影响指令指定的标志。

  39. CALL子程序调用指令 CALL FFF RET 子程序设计 • 寄存器的保存与恢复 FFF PROG PUSH BX MOV BX, AX SHL BX, 1 ADD AX, BX POP BX RET SUB ENDP AX内容乘以11H的积

  40. 作业: • P119 (1)3.42,(2)3.43,(3)3.47,3.83,  • (4)程序段 • 2000H: 3062H JNE DONE • ………… • 2000H: 3090H DONE: MOV AX,05H • 执行后DONE为何值

More Related