微机原理与应用第五章.ppt
文本预览下载声明
* * * 提问:寻址方式 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 格式:CALL FAR PTR DST ; mem32 功能: SP←(SP)-2 ;SP-2 ((SP)+1,(SP))←(CS) ;CS入栈 SP←(SP)-2 ;SP-2 ((SP)+1,(SP))←(IP) ;IP入栈 IP←(EA) ;EA取代IP中原地址 CS←(EA+2) ;EA+2取代CS中原段基址 段间返回返回指令RET : 格式:RET IP←((SP)+1,(SP)) SP←(SP)+2 CS←((SP)+1,(SP)) SP←(SP)+2 RET i16 ; 有参数返回RET指令可以带有一个立即数i16, 则堆栈指针SP将增加,即 SP←SP+i16 这个特点使得程序可以方便地废除若干执行CALL指令以前入栈的参数 例:子程序地址在DDCCH:BBAAH CALL DWORD PTR[DI] 断点:CS:IP IPL IPH CSL CSH SP=1200 SP=11FC 执行CALL 指令后 1.保护断点 堆栈 执行CALL 指令前 SP=11FE CALL 代码段 数据段 IPH IPL CSH CSL [DI] [DI]+1 [DI]+2 [DI]+3 段间间接调用示意图 CALL DWORD PTR[DI] AAH BBH CCH DDH 例:子程序地址在DDCCH:BBAAH 2.给子程序地址 MOV WORD PTR [DI],BBAAH MOV WORD PTR [DI+2],DDCCH CALL DWORD PTR[DI] DDCCH:BBAAH 子程序 RET 代码段 例:子程序地址在DDCCH:BBAAH CALL DWORD PTR[DI] 断点:CS:IP IPL IPH CSL CSH SP=1200 SP=11FC 执行CALL ;RET指令后 3.返回断点 堆栈 执行CALL ;RET指令前 SP=11FEH 例: MAIN … … CALL FAR PTRPRO_A (CS)=0500H:(IP)=1000H … … RET PRO_A: … … … CALL NEAR PTR PRO_B (IP)=2500 … … CALL NEAR PTR PRO_C (IP)=3700 … RET PRO_B: … … CALL NEAR PTR PRO_C (IP)=4000 … … RET PRO_C: … … … … RET 0100 SP TOS (9) 0500 1000 3700 4000 00FC SP TOS (8) 0500 1000 3700 4000 00FA SP TOS (7) 0500 1000 3700 4000 00FC SP TOS (6) 0500 1000 2500 4000 00FA SP TOS (5) 0500 1000 2500 4000 00F8 SP TOS (4) 0500 1000 2500 4000 00FA SP TOS (3) 0500 1000 2500 00FC SP TOS (2) 0500 1000 0100 SP 栈顶TOS (1) ;主程序 MOV AL,0CH ;提供参数AL CALL htoasc ;调用子程序 ...;子程序:将AL低4位的一位16进制数转换成ASCII码htoasc: AND AL,0FH ;只取al的低4位 OR AL,30H ;al高4位变成3 CMP AL,39H ;是0~9,还是0Ah~0Fh
显示全部