0
我試圖掩蓋ASM與gcc爲十六進制(GCC -c -masm =英特爾code.s)通過將其錯誤:code.s:1:錯誤:`MOV」太多存儲器的引用。 code.s asm:JS指令 - 十六進制代碼
mov rax , 0x00000000004007E6
js rax
發生了什麼事?你能教我蓋嗎?
我試圖掩蓋ASM與gcc爲十六進制(GCC -c -masm =英特爾code.s)通過將其錯誤:code.s:1:錯誤:`MOV」太多存儲器的引用。 code.s asm:JS指令 - 十六進制代碼
mov rax , 0x00000000004007E6
js rax
發生了什麼事?你能教我蓋嗎?
正如瑪格麗特·布魯姆說,-masm=intel
只是一個代碼生成選項,這意味着它會影響什麼樣的程序集的編譯器從C代碼生成。它完全不影響組裝。
您需要在程序集文件中添加.intel_syntax noprefix
指令來切換語法,或使用複雜的gcc -Wa,--msyntax=intel,-mnaked-reg
方法將參數傳遞給彙編程序。
完成上述操作後,下一個問題將是js rax
無效,因爲x86中沒有條件間接跳轉。最簡單的可能是使用反轉條件jns
跳過jmp rax
。
您在使用英特爾的語法? NASM可能更適合這一任務,因爲它支持英特爾語法並可以生成原始二進制文件。 * -masm = intel *是一個輸出選項AFAIK。 –
'js rax'看起來像使用'rax'作爲標籤,但它當然也是一個註冊表。如果它*被用作標籤,那麼'mov'就有兩個內存引用。 –
是的,我使用英特爾代碼。 –