0

我正在开发一个完全用操作码编写的 x86 引导加载程序,没有头文件,所有二进制文件。

问题是英特尔的 ISA 手册不包括如何将 .data 段代码中的数据段字节包含到操作码格式的机器指令的辅助操作数中。

到目前为止我有这个:

1000 101w 110

上面的代码应该等同于以下内容:

MOV SI

但是,我需要将数据插入到包含“Hello World”的源索引寄存器中,以便以单色文本视频模式显示在屏幕上,如下所示:

MOV SI, HELLO_WORLD_BYTE_STRING

有什么帮助吗?

4

3 回答 3

0

汇编器/链接器工具链提供了诸如单独的代码和数据段之类的抽象。当您编写原始机器代码时,您必须自己完成这项工作。您可以选择交错代码和数据,只要您确保不会意外尝试执行代码即可。

对于mov您尝试编写的指令,最简单的实现是第二个操作数是包含字符串开头地址的立即字。该地址将是您决定放置字符串数据的任何位置。(汇编器会预先计算这个值。)因此,您需要操作码0b1011 1110后跟地址的低字节和高字节。然后SI将包含指向字符串开头的指针。

使用汇编器编写它可能对您更有指导意义,然后将其分解(手动或机械地)以更好地了解汇编器在做什么。

于 2013-05-04T21:51:38.773 回答
0
   VALUE DB 0xFF
                mov bx, Offset VALUE
                mov di, Offset P1
                mov cs:[di+1], bx ; writing the offsetaddress of "VALUE" into
   P1: BE 00 10 mov si, 0x1000    ; <- this instruction inside of our codesegment

Dirk

于 2013-05-12T07:32:04.303 回答
0

0000:7C00引导加载程序从 BIOS加载到固定地址(

你可以看到这个链接http://www.vnutz.com/articles/PC_Bootsector_Programming_Tutorial_In_ASM

于 2013-05-04T21:39:34.097 回答