Air*_*lla 7 macos x86 assembly
我正在使用配备2.53 GHz英特尔酷睿2双核处理器的MacBook Pro,但我被告知Mac用户必须遵循AT&T语法(这使我在运行英特尔时感到困惑)和x86(不确定这意味着什么) .
所以我需要进入组装,但我发现很难开始.在线搜索显示汇编代码在语法上有很大差异,我找不到任何解释基本汇编方法的资源.我一直在阅读关于寄存器和堆栈的内容,但不明白如何看待它.谁能解释/指出我正确的方向?举个例子,这个代码是我发现的唯一代码:
.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
Run Code Online (Sandbox Code Playgroud)
很简单,但它是什么意思?我有一个令人困惑的时间来理解这段代码是如何完成它的.我知道Java,PHP和C,以及其他语言,但是这个,它的步骤和语法,对我来说并不清楚.这是它的主要文件:
#include <stdio.h>
void foo();
void myprint(char *s)
{printf("%s", s);}
main()
{foo();}
Run Code Online (Sandbox Code Playgroud)
还有,这只是数字乘以:
.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
Run Code Online (Sandbox Code Playgroud)
和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());
}
Run Code Online (Sandbox Code Playgroud)
最后三个小问题:
.s
和.h
文件名有什么区别(我有一个main.c
和main.h
哪一个,哪一个是为了什么)?为什么装配需要
main.c
配合它/它如何称之为?任何人都可以推荐一个像Eclipse一样好的汇编IDE用于Java或PHP
感谢任何回答(这实际上是我在这个网站上发表的第一篇文章),我一直试图解决这个问题几天,我读过的每一个资源都没有向我解释汇编逻辑.它说什么.data
或.text
做什么,但只有知道如何"思考集会"的人会理解他们的意思?此外,如果有人在纽约市附近,并感到很满意大会和CI会喜欢一些私人课程.我觉得这种语言有很大的潜力,并且很乐意学习它.
汇编语言是一种与CPU架构紧密相关的编程语言.传统上,每个汇编指令与生成的CPU指令之间存在一对一的对应关系.
还有汇编伪指令,它们与CPU指令不对应,而是影响汇编器或生成的代码. .data
并且.text
是伪指令.
从历史上看,每个CPU制造商都实现了汇编程序定义的汇编语言,汇编程序是源代码转换实用程序.已经定义了数千种特定汇编语言.
在现代,已经认识到每种汇编语言共享许多共同特征,特别是关于伪指令.GNU编译器集合(GCC)基本上支持每个CPU架构,因此它已经发展了通用的汇编功能.
x86
是指英特尔8086系列(8088,8086,8087,80186,80286,80386,80486,80586又名奔腾,80686又名奔腾II等)
AT&T语法是许多汇编语言体系结构使用的符号样式.一个主要特征是指令操作数按照从历史上常见的顺序写入. Intel语法使用到,从操作数.还有其他差异.
至于你的许多问题,这里有一些资源会让你不堪重负,2)最终提供你所有的答案:
通常,入门汇编语言编程课程是一个完整的学期,有大量的实践工作.它假设您熟悉计算机体系结构的基础知识.有理由期望理解上述材料需要300-500小时.祝好运!
归档时间: |
|
查看次数: |
3289 次 |
最近记录: |