0

以下英特尔代码的等效 ATT 代码是什么:

    BIOS    segment byte at 40h
            org     13h
            memory  dw      ?
    BIOS    ends
4

2 回答 2

1

这不是 at&t 语法本身的问题。这是您使用什么汇编器和链接器的问题。另外,我想您仍然需要手动加载段寄存器。因此,最简单的情况是摆脱整个事情,而是按照以下方式做一些事情:

mov $0x40, %ax
mov %ax, %es
mov %es:0x13, %ax

根据您的要求和可用工具,您当然可以生成更高级的代码,但我认为没有多大意义。

于 2015-06-02T20:54:53.217 回答
0

AT 40hGNU 汇编器使用的 AT&T 语法中的段定义属性没有等价物。GAS 实际上并不理解 x86 段,也没有对它们的特殊支持。GAS、PECOFF 和 ELF 支持的对象格式也不支持。请注意,段(有时称为段)与 x86 段不同。甚至现代版本的 MASM 也不再支持 AT 属性。

如果您的 MASM 代码使用 BIOS 段,如下例所示:

BIOS    segment byte at 40h
        org     13h
        memory  dw      ?
BIOS    ends

_TEXT   SEGMENT USE16
    mov bx, OFFSET memory
    mov ax, SEG memory
    mov es, eax
_TEXT   ENDS

然后你可以在 AT&T 语法中做类似的事情,如下所示:

memory = 0x04
memory_seg = 0x40

.text:    
    mov $memory, %bx
    mov $memory_seg, %ax
    mov %ax, %es
于 2015-06-02T21:06:29.410 回答