你如何在汇编程序中编程?

时间:2010-07-19 09:03:43

标签: assembly

所以我从未做过任何汇编编程(虽然我做了一些阅读/推理结果来自x86的小部分和CS类中的arm程序集)。

我有点好奇人们如何在c /其他(几乎没有)高级语言被认为太慢而今天这些日子里进行严肃的汇编编程。

人们使用High-level assembler吗?

某种文字宏? 评论每一行?

人们是否根据团队约定的惯例进行调用堆栈? 他们倾向于使用文本编辑器还是某种思想?

以及其他任何有趣的东西。

P.S。另外你如何处理字符串(可能只是ascii),结构/联合(compositee数据类型)(即如何简化编写代码来创建和操作它们)?

P.P.S。人们经常从汇编中调用OS提供的c库函数吗?

8 个答案:

答案 0 :(得分:8)

答案 1 :(得分:4)

对于您的问题“如何使用汇编程序进行编程?”的最简单和最重要的答案:

如你所愿。这是组装的主要原因。控制。按照你的方式,可以这么说。

  • HLA已过时。
  • 宏可以帮助完成繁琐和/或冗长的任务,例如调用函数和定义导入部分。但要小心使用。如果你使用它们太多,它可能会使你的代码对其他人不可读。
  • 评论每一行?没有。微观测试会损害汇编语言,因为每一行都不一定是一个完整的功能块。
  • 如果您自己拨打电话,请按照您认为最好的方式进行。通常,您使用已设置的API / ABI来设置调用约定,例如WinAPI。
  • “文本编辑器”和“ide”之间的界限很模糊,因为许多文本编辑器都具有ide功能。根据我的定义,主要的区别是ide有一个内置的调试器。
  • 当你没有任何标准库,以帮助您字符串处理,你将不得不作出自己的,或者使用某种函数库,也许是操作系统的,如果有的话。
  • 在装配中使用结构没有什么不同。

编辑:

  • 是的,有些人喜欢通过msvcrt.dll在Windows中使用C函数。我也相信它在Unix世界也是如此:)

答案 2 :(得分:3)

我最后一次在汇编时编程,它在我的HP-48计算器上,计算器上有Jazz开发环境。它提供了一个汇编程序,反汇编程序,逐步调试程序,“入口点”浏览器(用于调用HP工程师使用的函数库),文本编辑器,字体库以及数十个小编程实用程序,全部为72kb。

这是非常低级的,如果Jazz环境有宏,我从来没用过它们。语法与例如非常不同英特尔组装,我发现它非常易读,没有任何评论。 (它支持例如A = BB寄存器的内容复制到A寄存器,以及简单的子寄存器选择器等。)

当然有调用约定,但由于汇编域中提供的大多数函数都是类似名称的RPL函数背后的“guts”,因此调用约定非常容易记忆。 (它更少记住它们,更多的是使用您在高级语言中已经熟悉的内容。)

但是我的节目从未像Jazz工具集那样雄心勃勃 - 我很想知道Jazz本身是在计算器上还是在主机上开发的。

答案 3 :(得分:1)

上次我在ASM中做了一些事情,我使用了这些工具:

DevPac

ReSource

是的,已经有一段时间了:))

答案 4 :(得分:1)

我的MS论文代码的核心是汇编。

有效地,我写C直到我找到C不能做的功能。然后,我写了几行汇编 - 在这种情况下,用gcc语法。

我通常会看一下生成的ASM(gcc -S),以确保我没有完全破坏编译器的期望。

答案 5 :(得分:0)

我相信MASM是免费的,搜索microsoft.com进行下载

答案 6 :(得分:0)

我记得成功地用gnu AS编写了C函数(实现了Bresenham算法,仅将寄存器作为变量)。

答案 7 :(得分:0)

当时的程序要简单得多。他们没想到我们今天把这些数据集当作商品。装配说明更简单,适用于手工编写程序。

我不知道是否有人写过集会的时候。 C64家伙有那个用来编程他们系统的漂亮的BASIC。当人们停止使用打卡时,编程语言几乎就在那里。