gpt4 book ai didi

macos - 在 Mac 上使用汇编

转载 作者:行者123 更新时间:2023-12-04 11:43:16 26 4
gpt4 key购买 nike

我正在使用配备 2.53 GHz 的 Intel Core 2 Duo 处理器的 MacBook Pro,但我被告知 Mac 用户必须遵循 AT&T 语法(这增加了我的困惑,因为我运行的是 Intel)和 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

很简单,但它在说什么?我在理解这段代码的作用时感到困惑。我知道 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());
}

最后是三个小问题:

  1. What is the difference between .s and .h file names (I have both a main.c and main.h, which one is for what)?

  2. And why does assembly need a main.c to go with it/how does it call it?

  3. Can anyone recommend a good assembly IDE like Eclipse is for Java or PHP



感谢任何人的回答(这实际上是我在这个网站上的第一篇文章),几天来我一直试图弄清楚这一点,而我读过的每一个资源都没有向我解释汇编逻辑。它说什么 .data.text但只有知道如何“思考组装”的人才能理解它们的意思?
此外,如果有人在纽约市附近并且对 Assembly 和 C 感到非常满意,我会喜欢一些私有(private)类(class)。我觉得这种语言有很大的潜力并且很想学习它。

最佳答案

汇编语言 是与 CPU 架构密切相关的一类编程语言。传统上,每条汇编指令与生成的 CPU 指令之间存在一一对应的关系。

还有一些汇编伪指令不对应 CPU 指令,而是影响汇编器或生成的代码。 .data.text是伪指令。

从历史上看,每个 CPU 制造商都实现了由其 定义的汇编语言。 assembly 工 ,一个源代码翻译实用程序。已经定义了数千种特定的汇编语言。

在现代,人们已经认识到每种汇编语言都有许多共同的特征,特别是在伪指令方面。 GNU 编译器集合 (GCC) 基本上支持所有 CPU 架构,因此它发展了通用汇编特性。
x86指 Intel 8086 系列(8088、8086、8087、80186、80286、80386、80486、80586 aka Pentium、80686 aka Pentium II 等)

AT&T 语法 是许多汇编语言体系结构使用的一种表示法。一个主要特点是指令操作数按照历史上常见的从到到的顺序编写。 英特尔语法 用于,从操作数。还有其他差异。

至于您的许多问题,这里有一些资源 1) 会让您不知所措,并且 2) 最终会提供您所有的答案:

  • assembly language overview
  • tutorials and resources
  • x86 instruction summary
  • comprehensive x86 architecture reference

  • 通常,介绍性的汇编语言编程类(class)是一个完整的学期,需要大量的动手操作。它假定您熟悉计算机体系结构的基础知识。可以合理地预期理解上述 Material 需要 300-500 小时。祝你好运!

    关于macos - 在 Mac 上使用汇编,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852959/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com