Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions homeworks/九天/IceGone
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
子程序

2018年1月24日
17:28

汇编语言:参数的传递是靠寄存器或堆栈来完成的
高级语言:子程序(函数/过程)依赖于堆和栈来传递
C/C++/BASIC/Pascal子程序的执行过程基本一致:
Ø 将子程序执行完成时应返回的地址/参数压入堆栈
Ø 子程序使用bp指针+偏移量对栈中的参数寻址,并取出,完成操作
Ø 子程序使用RET或RETF指令返回,此时,CPU将ip置为堆栈中保存的地址,并继续给予执行
CALL指令的参数是被调用子程序的地址。
CALL和RET,一级ENTER和LEAVE配对,以实现对堆栈的自动操作,而不需要程序员进行PUSH/POP,以及跳转的操作,提高了效率。
中断:一类特殊的子程序,由系统调用,以响应突发事件。
DMA方式:CPU向控制器发出指令,要求外设和内存直接交换数据,而不通过CPU。
调用中断的指令:int 中断号 (引发CPU去调用一个中断,CPU将保存单钱的程序状态字,清除trap和interrupt两个标志,将即将执行的指令压入堆栈,并调用中断服务)
中断服务程序很多时候必须写成可重入代码(程序的运行过程中可以被打断,并由开始处在此执行,并且执行结果不受影响),尽量使用寄存器。
调用软件中断时,通常都是通过寄存器传进、传出参数。这意味着你的int指令周围也许会存在一些“帮手”,
通过调用DOS中断服务返回父进程,并带回错误找反馈码0。其中,ax中的数据4c00h就是传递给DOS中断服务的参数。
mov ax,4c00h
int 21h