黄老师 发表于 2013-8-1 12:32:30

北语13春《汇编语言程序设计》辅导资料六

北语13春《汇编语言程序设计》辅导资料六
第三章第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
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中断标志置1
2)其他处理机控制与杂项操作指令:
   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)=8DH
4、假设(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
页: [1]
查看完整版本: 北语13春《汇编语言程序设计》辅导资料六