Tôi đang sử dụng MacBook Pro với bộ vi xử lý Intel Core 2 Duo với tốc độ 2,53 GHz, nhưng tôi đã nói với người dùng Mac phải tuân theo cú pháp AT & T (thêm vào sự nhầm lẫn của tôi vì tôi đang chạy Intel) và x86 (không chắc chắn điều này có nghĩa là chính xác).Sử dụng Assembly On Mac
Vì vậy, tôi cần tham gia lắp ráp nhưng tôi thấy rất khó để bắt đầu. Tìm kiếm trực tuyến hiển thị mã lắp ráp thay đổi rất nhiều về cú pháp và tôi không thể tìm thấy bất kỳ tài nguyên nào giải thích cách lắp ráp cơ bản. Tôi tiếp tục đọc về đăng ký và một ngăn xếp nhưng không hiểu làm thế nào để nhìn vào điều này. Bất cứ ai có thể giải thích/chỉ cho tôi đi đúng hướng? Lấy ví dụ, mã này là mã duy nhất tôi tìm được để làm việc:
.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
Rất đơn giản nhưng nó nói gì? Tôi đang có một thời gian khó hiểu sự hiểu biết mã này làm những gì nó làm. Tôi biết Java, PHP và C, trong số các ngôn ngữ khác, nhưng điều này, các bước và cú pháp của nó, không rõ ràng với tôi. Dưới đây là file chính để đi với nó:
#include <stdio.h>
void foo();
void myprint(char *s)
{printf("%s", s);}
main()
{foo();}
Ngoài ra, có này mà chỉ sẽ nhân số:
.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
và main.c để đi với nó:
#include <stdio.h>
extern int multiply();
extern int x, y;
int main()
{
x = 34;
y = 47;
printf("%d * %d = %d\n", x, y, multiply());
}
Và cuối cùng có ba câu hỏi nhỏ:
Sự khác nhau giữa các tên
.s
và.h
là gì (Tôi có cả một sốmain.c
vàmain.h
, cái nào dành cho cái gì)?Và tại sao lắp ráp cần có
main.c
để đi kèm với nó/nó gọi nó như thế nào?bất cứ ai có thể giới thiệu một hội đồng IDE tốt như Eclipse là cho Java hoặc PHP
Nhờ câu trả lời bất cứ ai (điều này thực sự là bài viết đầu tiên của tôi trên trang web này), tôi đã cố gắng để con số này ra cho một vài ngày và mọi tài nguyên tôi đã đọc chỉ không giải thích logic lắp ráp với tôi. Nó nói những gì .data
hoặc .text
hiện nhưng chỉ có một người biết làm thế nào để "nghĩ rằng lắp ráp" sẽ hiểu những gì họ có ý nghĩa? Ngoài ra, nếu có ai ở quanh Thành phố New York và cảm thấy rất thoải mái với Hội đồng và C, tôi rất thích một số bài học riêng. Tôi cảm thấy có rất nhiều tiềm năng với ngôn ngữ này và rất thích học nó.
Xem: http://www.ibiblio.org/gferg/ldp/GCC-Inline-Assembly-HOWTO.html –
'nasm' đi kèm với các phiên bản Xcode gần đây. Bạn có thể sử dụng nó với cú pháp của Intel. Wikibooks cũng có một [x86 Assembly book] (https://en.wikibooks.org/wiki/X86_Assembly). –
Bạn đang lập kế hoạch cho loại ứng dụng nào? –