请问汇编中保护psp偏移地址和保护返回的dos地址是什么意思?还有什么是dos调用??
展开全部
program segment prefix ,简称PSP(程序段的前缀)
当输入一个外部命令或通过EXEC子功能(系统功能调用INF 21h的子功能号为4BH)加载一子程序时,COMMAND确定当时内存可用空间的最低端作为程序段起点。在程序所占内存空间的前256个字节中,系统会为程序创建程序的前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通信;PSP内有程序返回、程序文件名等信息,可以通过研究psp定位文件名信息,进而获取文件名。 从这段内存区的256字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0 (其中SA为系统为程序分配内存的起始位置的段地址即当前寄存器DS的内容); (注意:PSP区和程序区虽然物理地址连续,却有不同的段地址。)
该PSP中包含以下三部分信息:
(1)供被加载程序使用的DOS入口,如PSP+0、+2、+5和+2CH字段;
(2)供DOS本身使用的DOS入口,如PSP+0AH、+0EH、+12H和+2CH字段;
(3)供被加载程序使用传递参数,如PSP+5CH,+6CH和80H字段。
保护返回DOS地址是说你在编写程序时,在程序结束后需要你来返回到DOS系统中,这是因为DOS是单任务操作系统,一次只能执行一个程序,具体操作就是使用4ch功能调用,如
mov ah,4ch
int 21h
至于DOS功能调用比如上边的int 21h 就是一个系统功能调用,意思是说有人提前编号的一些功能如int 21h 的9号功能调用能够输出字符串,
具体:buff db "this is hello world!"
mov dx,offset buff
mov ah,9h
int 21h
程序就可以输出“this is hello world!”
就相当于WINDOWS的API 和c语言中的Printf函数,就是调用系统函数的意思
当输入一个外部命令或通过EXEC子功能(系统功能调用INF 21h的子功能号为4BH)加载一子程序时,COMMAND确定当时内存可用空间的最低端作为程序段起点。在程序所占内存空间的前256个字节中,系统会为程序创建程序的前缀(PSP)的数据区,DOS要利用PSP来和被加载程序进行通信;PSP内有程序返回、程序文件名等信息,可以通过研究psp定位文件名信息,进而获取文件名。 从这段内存区的256字节处开始(在PSP的后面),将程序装入,程序的地址被设为SA+10H:0 (其中SA为系统为程序分配内存的起始位置的段地址即当前寄存器DS的内容); (注意:PSP区和程序区虽然物理地址连续,却有不同的段地址。)
该PSP中包含以下三部分信息:
(1)供被加载程序使用的DOS入口,如PSP+0、+2、+5和+2CH字段;
(2)供DOS本身使用的DOS入口,如PSP+0AH、+0EH、+12H和+2CH字段;
(3)供被加载程序使用传递参数,如PSP+5CH,+6CH和80H字段。
保护返回DOS地址是说你在编写程序时,在程序结束后需要你来返回到DOS系统中,这是因为DOS是单任务操作系统,一次只能执行一个程序,具体操作就是使用4ch功能调用,如
mov ah,4ch
int 21h
至于DOS功能调用比如上边的int 21h 就是一个系统功能调用,意思是说有人提前编号的一些功能如int 21h 的9号功能调用能够输出字符串,
具体:buff db "this is hello world!"
mov dx,offset buff
mov ah,9h
int 21h
程序就可以输出“this is hello world!”
就相当于WINDOWS的API 和c语言中的Printf函数,就是调用系统函数的意思
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询