其中EA是有DST的寻址方式所确定的有效地址。 3) 段间直接调用 格式:CALL DST 执行的操作:1) (SP)〈-- (SP) - 2; ((SP)+1,(SP))〈-- (CS) (SP)〈--(SP) - 2; ((SP)+1,(SP))〈-- (IP) 2) (IP)〈-- 偏移地址(指令的第2、3个字节) (CS)〈-- 段地址(指令的第4、5个字节) 它同样是先保留返回地址,然后转移到由DST指定的转向地址去执行。由于调用程序和子程序不在同一个段内,因此返回地址的保存以及转向地址的设置都必须把段地址考虑在内。 4) 段间间接调用 格式:CALL DST 执行的操作:1) (SP)〈-- (SP) - 2; ((SP)+1,(SP))〈-- (CS) (SP)〈-- (SP)- 2; ((SP)+1,(SP))〈-- (IP) 2) (IP)〈-- (EA); (CS)〈-- (EA+2) 其中EA是由DST的寻址方式确定的有效地址。 在上述CALL指令的格式中,并没有加上如NEAT PRT格式的属性操作符,在实际使用时,读者可根据具体情况加上它。使用方法可参考JMP指令的说明 (2) RET(return)返回指令 RET指令放在子程序的末尾,它使子程序在功能完成后反回调用继续执行,而返回地址是调用程序调用子程序(简称转子)时存放在堆栈中的,因此RET指令的操作是返回地址出栈送IP寄存器(段内或段间)和CS寄存器(段间)。 1) 段内返回 格式:RET 执行的操作:1) (IP)〈-- ((SP)+1,(SP)) 2) (SP)〈-- (SP)+2 2) 段内带立即数返回 格式:RET EXP 执行的操作:1) (IP)〈-- ((SP)+1,(SP)) 2) (SP)〈-- (SP)+2; (SP)〈-- (SP)+D16 其中EXP是一个表达式,根据它的值计算出来的常数成为机器指令的位移量D16。这种指令允许返回地址出栈后修改堆栈的指针,着就便于调用程序在用CALL指令调用子程序以前把子程序所需要的参数入栈,以便子程序运行时使用这些参数。当子程序返回后,这些参数已不再有用,就可以修改指针使其指向参数以前的值。 3) 段间返回 格式:RET 执行的操作:1) (IP)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 2) (CS)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 4) 段间带立即数返回 格式:RET EXP 执行的操作:1) (IP)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 (CS)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 2) (SP)〈-- (SP)+D16 这里EXP的含义及使用情况与段内带立即数返回指令相同。 CALL指令和RET指令都不影响条件码。
17
5.中断 有时当系统运行或者程序运行期间在遇到某些特殊情况时,需要计算机自动执行一组专门的例行程序来进行处理。这种情况称为中断,所执行的这组程序称为中断例行程序或中断子程序。中断分为内部中断和为部中断两类。内部中断包括象除法运算中遇到需要除以0时所产生的中断,或者程序中为了作某些处理而设置的中断指令等。外部中断则主要用来处理I/O设备与CPU之间的通信。 当CPU响应一次中断时,也要和调用子程序时类似的把(IP)和(CS)保存入栈。除此之外为了能全面的保存现场信息,以便中断处理结束时返回现场,还需要把反映现场状态的(PSW)保存入栈,然后才能转到中断例行程序去执行。当然从从中断反回时,除要恢复(IP)和(CS)外,还需要恢复(PSW)。 中断例行程序的入口地址称为中断向量。在IBM-PC机中,存储器的最低地址区的1024个字节(地址从00000H到003FFH)为中断向量区,其中存放着256种类型中断例行程序的入口地址(中断向量)。由于每个中断向量占有4个字节单元,所以中断指令中指定的类型号N需要乘以4才能取得所指定类型的向量,例如如果类型号为9,则与其相应的中断向量存放在00024~00027单元中。这里介绍有关中短的几条指令。 (1)INT(Interrupt)中断指令 格式: INT TYPE 或 INT 执行的操作:1) (SP)〈-- (SP) - 2; ((SP)+1,(SP))〈-- (PSW) (SP)〈-- (SP) - 2; ((SP)+1,(SP)〈-- (CS) (SP)〈-- (SP) - 2; ((SP)+1,(SP))〈-- (IP) 2) (IP)〈-- (TYPE*4); (CS)〈-- (TYPE*4+2) 其中TYPE为类型号,它可以是常数或常数表达试,其值必须在0~255的范围内,格式中的INT是一个字节的中断指令,它隐含的类型号为3。INT指令(包括下面的INTO)在执行完以上的操作后,在把IF和TF位置0,但不影响期于的标志位。 (2) INTO(Interrupt if overflow) 若溢出则中断指令 格式:INTO 执行的操作:若OF=1则: 1) (SP)〈-- (SP) - 2; ((SP)+1,(SP))〈-- (PSW) (SP)〈-- (SP) - 2; ((SP+1,(SP)〈-- (CS) (SP)〈-- (SP) - 2; ((SP)+1,(SP))〈-- (IP) 2) (IP)〈-- (10H); (CS)〈-- (12H) (3) IRET(Return form interrupt)从中断返回指令 格式:IRET 执行的操作:1) (IP)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 (CS)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 2) (PSW)〈-- ((SP)+1,(SP)); (SP)〈-- (SP)+2 该指令的标志位由堆栈中取出的值来设置。 4.3.6 处理机控制指令 1.标志处理指令 除有些指令影响标志外,IBM-PC机还提供了一组设置或清除标志位的指令,它们只影响本指令指定的标志,而不影响其它标志位。这些指令是: ·CLC进位位置0指令(clear carry): CF? 0 ·CMC进位位求反1指令(complement carry): CF? CF ·STC进位位置1指令(Set carry): CF? 1
18
·CLD方向标志0指令(Clear direction): DF? 0 ·STD方向标志位置1指令(Set direction) : DF? 1 ·CLI中断标志置0指令(Clear interrupt) : IF? 0 ·STI中断标志置1指令(Set interrupt) :IF? 1 2.其他处理机控制指令 这些指令可以控制处理机状态,它们都不影响条件码。 (1) NOP(NO OPERATION)无操作指令 该指令不执行任何操作,其机器码占有一个字节单元,在调试程序时往往用这条指令占有一定的存储单元,以便在正式运行时用其他指令取代。 (2) HLT(HALT)停机指令 该适龄可使机器暂停工作,使处理机处于停机状态以便等待一次外部中断到来,中断结束后可继续执行下面的程序。 (3) WAIT(Wait)等待指令 该指令可使处理机处于空转状态,他也可以用来等待外部中断发生,但中断结束后返回WAIT指令继续等待。 (4) ESC(Escape)换码指令 格式:ESC mem 其中mem指出一个存储单元,ESC适龄把该存储单元的内容送到数据总线去。当然ESC指令不允许使用立即数和寄存器寻址方式。这条指令在使用协处理机(Coprocessor)执行某些操作时,可从存储器取得指令或操作数.协处理机(如8087)则是为提高速度而可以选配的硬件。 (5) LOCK(Lock)封锁指令 该指令是一种前缀,它可与其它指令联合,用来维持总线的锁存信号直到与其联合的指令执行完为止。当CPU与其他处理机协同工作时,该指令可避免破坏有用信息。 作 业 教学反馈
P138 4.9 4.10 4.12 4.14题 19