[英]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.