微机原理课件-第3章s1.ppt
文本预览下载声明
* 例:下面的程序执行后,(AX)=? (DX)=? CS:2000H MOV AX, 2012H 2003H MOV CX, 200CH 2006H PUSH CX 2007H CALL 4000H 200AH ADD AX, BX 200CH ADD AX, DX 200EH HLT … … … … CS:4000H MOV BX, 200AH POP DX RET * 段内返回指令RET的操作为: 恢复子程序执行前IP的内容。 段间返回指令RET的操作为: 恢复子程序执行前IP和CS的内容。 另有一种带立即数的返回指令 “ RET n ”,其中n为偶数,表示从栈顶弹出地址后另外丢弃的字节数。 例:RET 4 ;返回后再丢弃栈顶的4个字节 (2)返回指令RET * MOV SP ,1009H MOV AX ,2000H MOV BX ,4000H PUSH AX PUSH BX CALL NEAR ADDPRG MOV AX ,MEM1 HLT ADDPRG: PUSHF MOV BP ,SP SP 1009 MOV AX ,[BP+4] ADD AX ,[BP+6] MOV MEM1 ,AX POPF RET 4 * 5.中断指令 8086/8088 CPU在程序中允许安排一条中断指令来引起一个中断过程,这种中断叫内部中断,或叫软中断。被中断的指令地址处称为“断点”。有关中断的详细情况将在第六章讨论。 中断指令共有三条: (1)INT n 执行类型n的中断服务程序,N=0~255 (2)INTO 执行溢出中断的中断服务程序 (3)IRET 从中断服务程序返回调用程序 * (1)INT n 格式: INT n 说明: n×4 = 向量地址。该向量地址中的内容即为中断服务程序入口地址(段:偏移),入口地址也称为“中断向量”。 0000 : n×4 XXH XXH YYH YYH 中断服务程序入口的偏移地址(IP) 中断服务程序入口的段地址(CS) 中断类型码 n = 0?255 内存 中断向量 * INT指令的操作: 将FLAGS压入堆栈; 将INT指令下一条指令的地址压栈(即把CS和IP的内容压栈); 取中断服务程序入口地址送入CS和IP。 INT指令只影响IF和TF, 对其余标志位无影响 INT指令可用于调用系统服务程序,如INT 21H * INT指令的操作例: INT 21H IPL IPH CSL CSH SP=1200 FLAGSL FLAGSH SP=11FA 执行INT 21H指令后 保护断点 堆栈 执行INT 21H指令前 * INT指令的操作例(续): 执行INT 21H指令后, CS=? IP=? 因为n=21H,所以n×4=84H。 下图中,(0:0084H)=2000H:1123H 所以: CS=2000H IP=1123H 0000:0084H 23H 11H 00H 20H IP CS 0000 : 21H×4 * INTO检查溢出标志OF,如果OF=1,则启动一个类型4的中断过程;如果OF=0,不做任何操作。 通常INTO指令安排在有符号数算术运算指令后面。如 IMUL DX INTO ;若溢出,则启动INT 4, 否则往下执行 MOV RESULT,AX MOV RESULT+2,DX …… (2)溢出
显示全部