以下英特尔代码的等效 ATT 代码是什么:
BIOS segment byte at 40h
org 13h
memory dw ?
BIOS ends
以下英特尔代码的等效 ATT 代码是什么:
BIOS segment byte at 40h
org 13h
memory dw ?
BIOS ends
这不是 at&t 语法本身的问题。这是您使用什么汇编器和链接器的问题。另外,我想您仍然需要手动加载段寄存器。因此,最简单的情况是摆脱整个事情,而是按照以下方式做一些事情:
mov $0x40, %ax
mov %ax, %es
mov %es:0x13, %ax
根据您的要求和可用工具,您当然可以生成更高级的代码,但我认为没有多大意义。
AT 40h
GNU 汇编器使用的 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