繁体   English   中英

从intel到ATT的汇编转换,以读取BIOS的数据段

[英]intel to ATT assembley conversion for reading data segment of BIOS

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

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

这不是at&t语法的问题。 这是您使用哪种汇编程序和链接程序的问题。 另外,我想您仍然需要手动加载段寄存器。 因此,最简单的情况是摆脱整个过程,而是按照以下方式进行操作:

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

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

GNU汇编器使用的AT&T语法中的段定义的AT 40h属性没有等效项。 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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM