NASM汇编中int指令如何确定要使用的寄存器?
关于NASM中int指令如何确定使用寄存器的问题
这跟int指令前的指令顺序没关系,核心是中断服务程序的预先约定。
拿你用到的int 0x10来说,它是BIOS提供的视频服务中断,这类中断都有固定的调用规范:
- 首先用
AH寄存器指定具体要调用的子功能,比如你写的AH=0x0e就是"电传打字机式输出"的功能; - 而这个子功能明确要求把要输出的字符存在
AL寄存器里。
每个中断(比如DOS的int 0x21、BIOS的int 0x13磁盘服务)的开发者,都会预先定义好这套寄存器使用规则——你调用中断时必须遵守这个约定,中断服务程序才会去对应的寄存器里读取参数。
举个反例:如果你把字符放到BX里,再执行int 0x10,服务程序根本不会去读取BX的值,自然不会输出任何内容。再比如int 0x21的AH=0x09子功能(输出字符串),要求用DS:DX指向字符串首地址,这时候就和AX完全无关了。
这些约定都记录在BIOS或DOS的功能调用手册里,写汇编时需要查这些文档来确定每个中断该用哪些寄存器传参。
内容的提问来源于stack exchange,提问作者Guffar07
相关产品推荐
相关产品推荐

