Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 大约21小时_Assembly_Dos_X86 16_Calling Convention - Fatal编程技术网

Assembly 大约21小时

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索引函数指针表以分派到实际函数。然后该函数在其他寄存器

我是汇编语言编程新手

我想知道中断是否真的应该移动到Ah寄存器

将任何中断移动到AL寄存器是否错误?

读取和其他文档:

(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可执行文件执行
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调用