我使用的是帶有2.53 GHz Intel Core 2 Duo處理器的MacBook Pro,但我被告知Mac用戶必須遵循AT & T語法(這增加了我運行英特爾以來的困惑)並且x86(不知道這意味着什麼)。在Mac上使用裝配
所以我需要進入組裝,但我很難開始。搜索在語法上差別很大的在線顯示彙編代碼,我無法找到解釋基本彙編操作的任何資源。我一直在閱讀關於寄存器和棧的內容,但不知道如何看待這個。任何人都可以向正確的方向解釋/指出我嗎?舉例來說,這個代碼是我發現的唯一代碼:
.data
_mystring: .ascii "Hello World\n\0" #C expects strings to terminate with a 0.
.text
.globl _foo
_foo:
push %ebp
mov %esp,%ebp
pushl $_mystring
call _myprint
add $4,%esp
pop %ebp
ret
非常簡單,但它是什麼意思?我有一個令人困惑的時間瞭解這段代碼如何執行它的功能。我瞭解Java,PHP和C以及其他語言,但是,它的步驟和語法並不清楚。這裏的主文件去用它:
#include <stdio.h>
void foo();
void myprint(char *s)
{printf("%s", s);}
main()
{foo();}
此外,還有這個剛剛乘號:
.data
.globl _cntr
_cntr: .long 0
.globl _prod
_prod: .long 0
.globl _x
_x: .long 0
.globl _y
_y: .long 0
.globl _mask
_mask: .long 1
.globl _multiply
multiply:
push %ebp
mov %ebp,%esp
mov $0,%eax
mov _x,%ebx
mov _y,%edx
LOOP:
cmp $0,%ebx
je DONE
mov %ebx,%ecx
and $1,%ecx
cmp $1,%ecx
jne LOOPC
add %edx,%eax
LOOPC:
shr $1,%ebx
shl $1,%edx
jmp LOOP
DONE:
pop %ebp
ret
和main.c中去用它:
#include <stdio.h>
extern int multiply();
extern int x, y;
int main()
{
x = 34;
y = 47;
printf("%d * %d = %d\n", x, y, multiply());
}
而且最後三個小問題:
.s
和.h
文件名(我有一個main.c
和main.h
,哪一個是爲了什麼)有什麼區別?爲什麼裝配需要
main.c
去配合它/它是如何調用它?誰能推薦一個良好的裝配IDE像Eclipse是一個用於Java或PHP
感謝任何人的回答(這實際上是我在這個網站的第一篇文章),我一直在努力弄清楚了幾天,我讀到的每一個資源都沒有向我解釋彙編邏輯。它說什麼.data
或.text
做,但只有知道如何「思考彙編」的人會明白他們的意思? 另外,如果有人在紐約市附近,感覺自己對Assembly和C很舒服,我會喜歡一些私人課程。我覺得這種語言有很大的潛力,並且很想學習它。
請參閱:http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html –
'nasm'附帶最新版本的Xcode。您可以使用英特爾語法。 Wikibooks也有一個[x86 Assembly book](https://en.wikibooks.org/wiki/X86_Assembly)。 –
你打算寫什麼樣的應用程序? –