如何在任何系统上开始学习汇编语言 [英] How to start learning assembly language on any system

查看:0
本文介绍了如何在任何系统上开始学习汇编语言的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想学习汇编,但我对此不太确定,但因为汇编是低级编程语言,所以在Windows计算机上为打印Hello编写的代码将与在Mac上不同。

如何解决此问题(如果此问题确实存在),以及从哪里开始学习实际的语言。

推荐答案

首先,您需要很好地掌握像C这样的语言的编程,因为它和汇编之前一样低级--其他语言很棒,但隐藏了更多的低级细节。

C有指针,这是汇编语言中常用的,所以在C中我们可以有一些算法的数组版本,也可以有相同算法的指针版本。在学习汇编之前了解/理解这些事情是很好的。

此外,您还需要很好地掌握调试-逐行跟踪以查看程序的运行;观察变量的变化;观察控制流;将复杂的语句分解为更简单的语句,以便您可以查看它们内部的情况。调试技能是编程的必备技能,在汇编中更是如此。


高级语言提供:

  • 命名的、有作用域、生存期/持续时间的变量是类型化的,并且可以根据其类型保存值
  • 易于嵌套的结构化语句/控制结构
  • 以简单、熟悉的(数学)表示法编写的表达式

相比之下,汇编/机器代码提供:

  • 单纯存在、没有作用域、生命周期/持续时间、无类型等的物理存储。
    • CPU寄存器
    • 主内存/RAM
  • 控制结构的If-Goto-Label样式
  • 操作存储和计算的说明

这些汇编功能在所有处理器上都是通用的。


要学习汇编,最好能够将高级语言结构与处理器的能力相关联。要做到这一点,一种方法是尝试将用C或伪代码编写的小程序转换为汇编。

尤其是在学习汇编语言时,知道你在尝试做什么总是一个好主意,这意味着首先要有/写一个算法,最好是算法可以测试,这样就知道它是有效的,因为在C中的小设计更改有时会导致汇编语言中的重大变化(例如重写)。一种方法是在纸上使用伪代码来完成这一点,尽管我建议使用高级语言编写,最好是C语言,这样你就可以实际运行和测试你的算法。


将算法转换为汇编:

  1. 将数据类型转换为物理存储概念,并考虑大小、偏移量和对齐
  2. 将全局变量转换为物理存储保留
  3. 将函数转换为程序集:
    1. 将参数和局部变量转换到物理存储中,考虑使用情况、生存期、大小和类型,并与其他变量重叠。
    2. 将结构化控制语句转换为IF-GOTO-LABEL中的等效模式
    3. 将表达式转换为机器代码指令

以上的讨论应该会让你对所有汇编语言之间的共同点有一些了解。学习一种汇编语言意味着理解上述主题,以及学习某些特定处理器的实际指令集。你在一个处理器上学到的很多东西都会转移到另一个处理器上,特别是如果你能将上面广泛/常见的概念与任何给定指令集的细节分开的话。

指令集在以下方面有所不同:可用寄存器的数量、执行条件(IF-GOTO-LABEL)分支的方式、立即操作数的大小、允许二元运算符的操作数的数量:两个或三个、如何访问内存以及许多其他细节。正如其他人在对您的问题帖子的评论中所说的那样,即使对于相同的硬件,不同的操作系统在如何使用寄存器和传递参数方面也可能存在差异。

要开始学习汇编语言,我建议首先选择一个简单的处理器来学习物理存储、控制结构模式、表达式求值和函数调用的概念。也可以学习指令编码,特别是如果您的兴趣倾向于处理器内部。

相当简单但真实&现代:RISC V,它与MIPS非常相似,都有很好的PC模拟器以及大量在线学习材料。此外,这些处理器是真实的,有编译器可用,可以将C代码转换为汇编供您检查。

更简单的是LC-3,这是一个非常基础、易于学习、面向教育的(玩具)处理器,具有良好的模拟器支持。缺点是缺乏真正的编译器支持,但优点是简单-其限制使该处理器非常简单和易于理解。

x86是一个非常常见的处理器,尽管它背负着几十年的包袱,当您了解其历史和演变时,其中大部分都是合理的;否则可以说从头开始学习过于复杂。

这篇关于如何在任何系统上开始学习汇编语言的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆