汇编语言程序设计辅导资料六
发布时间:2024-01-11 10:01:31浏览次数:32汇编语言程序设计辅导资料六主 题: 第三章 80x86 指令系统和寻址方式(第 4 节)第三章第 4 节 概述 这周我们继续学习第三章中的第 4 节,子程序调用于返回以及处理机控制与杂项操作指令。子程序是汇编语言四种结构中的一种,因此理解子程序的调用与返回过程显得很重要。处理机控制与杂项操作指令是需要识记即可。第 4 节 子程序的调用和返回1、子程序的调用与返回1)子程序:子程序结构相当于高级语言中的过程,为便于模块化程序设计,往往把程序中某些具有独立功能的部分编写成独立的程序模块,称为子程序2)调用和返回程序: CALL DST (段内直接近调用)执行的操作如下:PUSH (IP) (字操作) (IP) (IP)+16D PUSH (EIP) (EIP) (EIP)+32D (双字操作) CALL DST (段内间接近调用) 执行的操作如下:PUSH (IP) (字操作) (IP) (EA) PUSH (EIP) (双字操作) (EIP) (EA) CALL DST (段间直接远调用) 执行的操作如下:PUSH (CS) (字操作)
PUSH (IP) (IP) DST (CS) DST PUSH (CS) (双字操作) PUSH (EIP) (EIP) DST (CS) DST CALL DST (段间间接远调用) 执行的操作如下:PUSH (CS) (字操作) PUSH (IP) (IP) (EA) (CS) (EA+2) PUSH (CS) (双字操作) PUSH (EIP) (EIP) (EA) (CS) (EA+4)3)返回指令:RET 指令放在子程序末尾,它使子程序在功能完成后返回调用程序继续执行,而返回地址是调用程序调用子程序时存放在堆栈中的,因此 RET 指令的操作是返回地址出栈送 IP 或 EIP 寄存器和 CS 段寄存器。 RET 段内近返回执行的操作如下: (IP) POP() (字操作) (EIP) POP() (双字操作) RET EXP 段内带立即数返回 执行的操作如下: (IP) POP() (仅举例字操作)
(SP) (SP)+16D 说明:RET EXP 的 EXP 是一个表达式,根据它的值(代表一个位移量)指令除完成 IP出栈操作外,还要修改堆栈指针的值。 RET 段间远返回执行的操作如下: (IP) POP() (仅举例字操作) (CS) POP() RET EXP 段间带立即数远返回执 行 的 操 作 如 下 : 完 成 段 间 远 返 回 的 操 作 后 , 还 需 要 修 改 堆 栈 指 针 值(SP) (SP)+16D 说明:EXP 说明与段内带立即数返回指令一致;CALL 指令和 RET 指令都不影响条件码。2、中断子程序 1)中断子程序概念:当系统运行或者程序运行期间在遇到某些特殊情况时,需要计算机自动执行一组例行的程序来处理,这种情况称为中断,所执行的这组程序称为中断例行程序或中断子程序。 2)中断的分类:分为内中断和外中断 3)中断向量:中断程序的入口地址称为中断向量。实模式下,存储器的最低地址区的 1024 个字节为中断向量区,存放这 256 中类型的中断程序的入口地址。每个中断向量占 4 个字节单元。 4)中断类型号:80x86 的 256(0-255)种类型中断程序用唯一的类型号相对应,知道了中断类型号就可以计算中断向量从而知道中断程序的入口地址,比如中断类型号为 9 的中断程序入口地址存放在 0024h-0027h 四个存储单元中。 除非特殊说明,类型号都是移十六进制形式表示的。 5)中断指令 INT 中断
INTO 溢出中断 IRET 从中断返回 3、处理机控制与杂项操作指令 1)标志处理指令: CLC 进位位置 0 STC 进位位置 1 CMC 进位位求反 CLD 方向标志位置 0 STD 方向标志位置 1 CLI 中断标志置 0 STI 中断标志置 12)其他处理机控制与杂项操作指令: NOP 无操作 ESC 换码 HLT 停机 WAIT 等待 LOCK 封锁 BOUND 界限本周要求掌握的内容如下:基本概念:子程序、子程序调用与返回、中断程序、中断向量、中断类型号、中断程序的调用与返回 基本理论:理解子程序调用与返回过程,掌握调用与返回子程序指令,了解中断程序作用,理解中断向量和中断类型号,会通过类型号计算中断程序入口地址,了解几种
标志处理指令和处理机控制与杂项操作指令。习题:1、子程序和中断程序都是控制转移指令。 (对)2、计算中断类型号为 14 的中断程序入口地址。 (0038H-003BH)3、已知程序段如下: MOV AX,1234H MOV CL,4 ROL AX,CL DEC AX MOV CX,4 MUL CX INT 20H 试问: (1)每条指令执行完后,AX 寄存器的内容是什么? (2)每条指令执行完后,进位,符号和零标志的值是什么? (3)程序结束时,AX 和 DX 的内容是什么? (1)1234h;2341h;2340h;8D00H (2)CF=0,SF=0,ZF=0;CF=1,SF=0,ZF=0; CF=0,SF=0,ZF=0;CF=0,SF=1,ZF=0 (3)(AX)=00H,(DX)=8DH4、假设(BX)=0E3H,变量 VALUE 中存放的内容为 79H,确定下列各条指令单独执行后的结果。 (1)XOR BX,VALUE
(2) AND BX,VALUE (3) OR BX,VALUE (4) XOR BX,OFFH (5) AND BX,0 (6) TEST BX,01H (1)(BX)=9AH (2)(BX)=61H (3)(BX)=0FBH (4)(BX)=1CH (5)(BX)=0(6)(BX)=0E3H