首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AS86集源地址(x86部件)

AS86集源地址(x86部件)
EN

Stack Overflow用户
提问于 2020-02-01 10:41:27
回答 1查看 264关注 0票数 0

有人知道如何使用AS86语法设置源地址吗?

例如,对于NASM,您将(在BIOS引导加载程序中)放入: ORG 0x7c00。

有人知道AS86的等价物是什么吗?或者功能上的等价物是什么?

我之所以使用AS86,是因为我正在使用BCC (Bruce的C编译器)的16位汇编输出编译程序。如果有人知道有一个真正的16位C编译器可以生成与NASM兼容的程序集,那也可以从根本上解决我的问题(因为,与AS86不同的是,使用特定的内存地址偏移量让NASM的原始二进制文件工作没有任何问题)。

2/1使用示例AS86代码编辑:

代码语言:javascript
复制
ORG 0x7c00

USE16

mov ah, 0x0e
mov al, 0x61
xor bx, bx
int 0x10

ORG 0x7DFE
.word 0xAA55

生成的符号文件(似乎正确):

代码语言:javascript
复制
+ 00007C00 ----- $start
+ 00007E00 ----- $end

生成的二进制文件是512字节,这意味着(我认为)最后的ORG指令正在以与使用"times“指令的NASM相同的方式填充文件的其余部分。

谢谢!

最终编辑:所以这个问题已经解决了。从我收到的帮助来看,源地址问题的解决方案是使用ORG指令将源地址放在开头,然后在结尾使用ORG指令指定程序在文件中特定位置的内存地址。然后,必须使用-s选项在as86中编译汇编语言文件以生成符号文件。

然后,即使内存地址问题已经解决,这段代码仍然不能工作的原因是因为我没有非常仔细地阅读手册页,并且有效地加载(到寄存器中)我正在使用的操作数中指定的内存位置的内容,而不是它们的立即值。

因此,在修复了这个问题之后,测试代码将在启动时运行,并按预期打印'a‘字符。

再次感谢大家。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-02 03:31:46

第一个问题是需要使用-s,正如Jester的评论所指出的那样。

正如您所注意到的,代码看起来布局正确,但仍然无法工作。因此,我组装了您的代码并反汇编了输出,问题就变得很明显了。

as86使用与nasm和其他传统英特尔风格的汇编程序不同的语法。特别是,像mov ah, 0x0e这样的指令被解析为您可能理解为mov ah, [0x0e]的指令;它是从内存地址0x0e移动一个字节。显然,您的意思是加载立即值0x0e,因此您必须编写mov ah, #0x0e

在继续学习之前,仔细阅读一下the 似乎是个好主意。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60013546

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档