有谁知道如何使用 AS86 语法设置源地址?
使用 NASM,您可以输入,例如(在 BIOS 引导加载程序中):ORG 0x7c00。
有谁知道AS86等价物是什么?或者功能等价物是什么?
我正在使用 AS86,因为我正在使用 BCC(布鲁斯的 C 编译器)的 16 位汇编输出来编译程序。如果有人知道一个真正的 16 位 C 编译器,它将生成与 NASM 兼容的程序集,那也将从根本上解决我的问题(因为,与 AS86 不同,我没有问题让 NASM 的原始二进制文件使用特定的内存地址偏移量工作)。
2/1 使用示例 AS86 代码进行编辑:
ORG 0x7c00
USE16
mov ah, 0x0e
mov al, 0x61
xor bx, bx
int 0x10
ORG 0x7DFE
.word 0xAA55
生成的符号文件(似乎正确):
+ 00007C00 ----- $start
+ 00007E00 ----- $end
生成的二进制文件是 512 字节,这意味着(我认为)最后的 ORG 指令正在填充文件的其余部分,其方式与使用“times”指令的 NASM 发生的方式相同。
谢谢!
最终编辑:所以这已经解决了。根据我收到的帮助,源地址问题的解决方案是使用 ORG 指令将源地址放在开头,然后在末尾也使用 ORG 指令来指定程序应位于的内存地址文件中的那个特定点。然后,必须使用 -s 选项在 as86 中编译汇编语言文件以生成符号文件。
然后,即使内存地址问题得到解决,这段代码也无法工作的原因是因为我没有仔细阅读手册页并且有效地将操作数中指定的内存位置的内容加载(到寄存器中)我正在使用,而不是它们的直接值。
因此,在修复了该问题之后,测试代码在启动时运行并按预期打印“a”字符。
再次感谢大家。