Assembly 大约21小时
我是汇编语言编程新手 我想知道中断是否真的应该移动到Ah寄存器 将任何中断移动到AL寄存器是否错误?读取和其他文档: (Ralf Brown的中断列表中还有许多其他Assembly 大约21小时,assembly,dos,x86-16,calling-convention,Assembly,Dos,X86 16,Calling Convention,我是汇编语言编程新手 我想知道中断是否真的应该移动到Ah寄存器 将任何中断移动到AL寄存器是否错误?读取和其他文档: (Ralf Brown的中断列表中还有许多其他int数字的详细信息:。标准约定仍然是AH中的“功能代码”,用于选择要从该组中调用的系统调用,而不是服务。) 中断处理程序中的DOS“内核”代码将读取AH,以找出您想要的函数。然后根据运行的代码读取任何其他寄存器 您可以将int21h看作是一个进入DOS内核的奇特的调用,它使用AH索引函数指针表以分派到实际函数。然后该函数在其他寄存器
int
数字的详细信息:。标准约定仍然是AH
中的“功能代码”,用于选择要从该组中调用的系统调用,而不是服务。)
中断处理程序中的DOS“内核”代码将读取AH
,以找出您想要的函数。然后根据运行的代码读取任何其他寄存器
您可以将int21h
看作是一个进入DOS内核的奇特的调用
,它使用AH
索引函数指针表以分派到实际函数。然后该函数在其他寄存器中使用参数
其中一些在AL
中使用arg,但许多在DL
中使用arg(如打印字符)。他们中的一些人在输入时不读取AL
,但大多数人将其作为输出写入
对于AL
不是输入的函数,当int 21h
运行时,您可以在AL
中获得所需的任何内容。当然,您可以在AL
和AH
中获得另一份呼叫号码副本;这没有坏处。但您必须在记录的寄存器中具有正确的值
大多数其他操作系统的系统调用机制类似:将参数放入寄存器,然后调用陷阱指令。e、 g.Linux将呼叫号码放入
EAX
,并使用int0x80
(32位)或syscall
(64位)。只有少数(如32位FreeBSD/MacOS)在堆栈上传递系统调用参数
DOS以外的操作系统不支持int21h
。e、 g.如果32位Windows可执行文件执行int 21h
读取和其他文档,它将崩溃(自身,而不是整个机器):
(Ralf Brown的中断列表中还有许多其他int
数字的详细信息:。标准约定仍然是AH
中的“功能代码”,用于选择要从该组中调用的系统调用,而不是服务。)
中断处理程序中的DOS“内核”代码将读取AH
,以找出您想要的函数。然后根据运行的代码读取任何其他寄存器
您可以将int21h
看作是一个进入DOS内核的奇特的调用
,它使用AH
索引函数指针表以分派到实际函数。然后该函数在其他寄存器中使用参数
其中一些在AL
中使用arg,但许多在DL
中使用arg(如打印字符)。他们中的一些人在输入时不读取AL
,但大多数人将其作为输出写入
对于AL
不是输入的函数,当int 21h
运行时,您可以在AL
中获得所需的任何内容。当然,您可以在AL
和AH
中获得另一份呼叫号码副本;这没有坏处。但您必须在记录的寄存器中具有正确的值
大多数其他操作系统的系统调用机制类似:将参数放入寄存器,然后调用陷阱指令。e、 g.Linux将呼叫号码放入
EAX
,并使用int0x80
(32位)或syscall
(64位)。只有少数(如32位FreeBSD/MacOS)在堆栈上传递系统调用参数
DOS以外的操作系统不支持
int21h
。e、 g.如果32位Windows可执行文件执行int21h
不清楚您的意思,它只会崩溃(自身,而不是整个机器)。DOS int 21h调度程序需要ah
中有一个主要函数号,您必须使用它,否则它将无法工作。有关详细信息,请参阅文档。注:除非绝对必要,否则避免DOS。DOS int 21h和其他系统以及bios系统和使用该设计的任何其他“操作系统”将有一个定义的接口,现在这并不意味着公开发布,但DOS/bios系统是查找ralf brown中断列表。对于每个系统调用,都有一个或多个寄存器用作该调用的输入,您必须查找每个调用,准备过程中所需的寄存器,如果有结果,则在过程中获得定义的结果。DOS仍然非常活跃,只是使用它的一小部分社区。假设每个操作系统都有自己的系统调用解决方案,例如不要假设x86上的windows、linux等进行dos调用,假设它们不进行dos调用,也假设它们不合成dos调用。我不清楚你的意思。DOS int 21h调度程序需要ah
中有一个主要函数号,您必须使用它,否则它将无法工作。有关详细信息,请参阅文档。注:除非绝对必要,否则避免DOS。DOS int 21h和其他系统以及bios系统和使用该设计的任何其他“操作系统”将有一个定义的接口,现在这并不意味着公开发布,但DOS/bios系统是查找ralf brown中断列表。对于每个系统调用,都有一个或多个寄存器用作该调用的输入,您必须查找每个调用,准备过程中所需的寄存器,如果有结果,则在过程中获得定义的结果。DOS仍然非常活跃,只是使用它的一小部分社区。假设每个操作系统都有自己的系统调用解决方案,例如不要假设x86上的windows、linux等进行dos调用,假设它们不进行dos调用,也假设它们不合成dos调用