簡體   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