问题标签 [as86]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
608 浏览

assembly - 将 as86 转换为 fasm

我正在尝试将 as86 的这一程序集转换为 fasm。我有3个问题:

1) 为什么 seg es给定的error: illegal instruction.this 在 16 位中无效?

2) mov byte [0],0x41(FASM 语法) 是否完全等同于mov [0],#0x41(as86 语法)?如果不是,你能告诉我相当于吗?

3) 为什么entry start在 FASM 中给出错误?

这是程序集代码:

as86

和我写的 fasm 版本:

FASM

0 投票
1 回答
4512 浏览

debian - 如何在 debian 6.0 中安装 as86?

我需要在 debian 6.0 中安装 as86。但是,我在 debian-6.0-DVD 中找不到 as86。那么,在哪里可以找到 as86 ?

0 投票
1 回答
468 浏览

assembly - 打印到屏幕 VGA 可变偏移

我试图通过在我的 C 代码中调用以下函数来在屏幕上显示字符:

像这样:

但是,这只显示没有颜色的第一个字母,但是当我在这样的代码中指定它时,它工作得很好:

如果我将 int 存储在变量中,我不明白为什么它不起作用。是不是int太小了?我正在使用bcc编译器

编辑: 正确的代码是这样的:

0 投票
0 回答
702 浏览

assembly - x86 汇编代码中的错误

我的引导加载程序有以下代码:

print_string.asm 文件是:

该程序可以使用 nasm 命令很好地组装,但如果我尝试使用 as86,它会显示很多错误:

我想用 16 位机器语言组装这段代码。我可以对这段代码使用 nasm 吗?
另外,为什么这段代码不能用 as86 汇编?

0 投票
3 回答
447 浏览

linux - 在 as86/bin86 中包含二进制文件

我在 i8086 汇编程序中编写了一些代码,应该将 80x25 图像放入 VRAM 并在屏幕上显示。

问题是我无法让 as86 汇编器包含图像文件中的二进制数据。我查看了手册页,但找不到任何有用的东西。

如果我尝试构建上面的代码,它不会给我任何错误,但是链接器生成的输出文件大小只有 44 字节,所以很明显它不需要放入 1000 字节的图像。

有人可以帮我吗?我究竟做错了什么?

0 投票
2 回答
588 浏览

c - 在 x86 汇编中汇编代码时出错

我有以下代码:

在这段代码中,我试图让它跳转到另一段代码并执行它。从 C 调用此代码,如下所示:

因此,在这个函数中,我使 cs 寄存器等于段变量,然后我call 0x0用来跳转到该段的开头。但是当我使用它运行它时:

我收到以下错误:

为什么我会收到此错误?

0 投票
1 回答
113 浏览

assembly - x86 汇编 mov 指令 LILO

我正在为一个项目阅读 LILO 的源代码,我偶然发现了这一行

我想知道 mov 指令在这里做什么,我知道如果是

然后将 d_dev 指向的值放在 dh 中,但是 (bp) 会发生什么。

任何帮助,将不胜感激。

源码链接:https ://github.com/a2o/lilo/blob/master/src/first.S 205行

0 投票
0 回答
70 浏览

assembly - 引导时间段寄存器值变化

当 BIOS 将控制权交给从 MBR 加载的代码时,第一条指令似乎是

jmpi go, BOOTSEG

其中 go 是下一条指令之前的另一个标签,BOOTSEG 是 0x07c0。执行这样一条指令的原因似乎是当 BIOS 传递控制权时,段寄存器设置为零,该指令将段寄存器设置为适当的值(在本例中为 0x07c0)。

我的问题是:为什么要将段寄存器设置为该值?jmp 指令按预期执行的事实表明,加载的 MBR 代码可以在不更改段值的情况下正常执行。如果不进行此段更改会发生什么?

0 投票
1 回答
60 浏览

assembly - bootsect.s:我们如何在将代码本身移开后访问下一行?

我是新手在线学习操作系统,其中提到了bootsect.s: https ://kernel.googlesource.com/pub/scm/linux/kernel/git/nico/archive/+/v0.99-pl8/ boot/bootsect.S 但是这段代码对我来说很奇怪:

奇怪的部分是最后 3 行。根据我的理解,rep movsw已经把代码本身移走了,所以当pc指向jumpi并且计算机即将执行pc指向的代码时,应该会导致错误,因为代码jumpi go, INITSEG已经被移走了。那么为什么这段代码仍然有效并且jumpi go, INITSEG仍然可以找到并执行呢?

0 投票
1 回答
301 浏览

assembly - AS86 设置源地址(x86 程序集)

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

使用 NASM,您可以输入,例如(在 BIOS 引导加载程序中):ORG 0x7c00。

有谁知道AS86等价物是什么?或者功能等价物是什么?

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

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

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

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

谢谢!

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

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

因此,在修复了该问题之后,测试代码在启动时运行并按预期打印“a”字符。

再次感谢大家。