文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

入门汇编语言的五大技巧

2024-12-03 03:24

关注

汇编语言是最古老的编程语言,在所有的语言中,它与原生机器语言最为接近。它能直接访问计算机硬件,要求用户了解计算机架构和操作系统。学习汇编最大的用处就是可以帮助我们更好地理解高级语言,因此还是很有必要的,

本文使用RISC-V 为例来向大家展示,来如何使用编写语言设计程序逻辑,并最终将程序逻辑转换为汇编语言的程序。

用合适的语言设计逻辑

这是最难的一步,许多学生想直接编写完整的功能模块的软件包。但是,如果你不喜欢汇编,那么这是一种注定要失败的方法,相反,为了把逻辑从语言中分离出来,我们必须用我们能理解的语言来写。

如果一个学生不懂C语言或一些低级语言,那么我建议他们用伪代码来写。太高级的语言编译困难,而太低级的语言又会讲逻辑设计困难,所以,推荐使用C/C++或其他类似的语言。

在翻译时,有些编辑器可以把它们并排放在一起,这是很有帮助的。因为在大脑中保留一份指令列表是很困难的,特别是当你在编译一个复杂的程序时。

一步一个脚印

许多学生试图从头到尾编写整个程序,而中间没有测试任何内容。如果是初学者,我建议用增量式编程,关键是在完成一部分逻辑时进行测试。这可以像完成一个for循环就进行测试。

测试的一种方法是将C/C++程序与汇编程序连接在一起,你可以通过在C++中创建函数程序集的原型并在两者之间切换来实现这一点。你需要确保两者是不同的,否则链接会出错,按照一般的做法通常会在C函数前面加上一个“c”来区分。我们可以调用Show来运行汇编语言编写的函数:

  1. extern "C" { // Turn off name mangling 
  2.     void show(int *x); 

extern " C "将告诉c++函数遵循C的"调用约定"。我们真正关心的是关闭名称修改,这样我们就可以创建一个名为“show”的标签,并拥有我们的函数。

了解汇编语言的功能定位

正如巨石强森(Dwayne Johnson)常说的那样:“认清自己的角色”。知道C/ C++为我们做了什么和程序集没有为我们做什么是很重要的。。例如,4 + 3 * 4将自动将运算排序为先执行乘法,再执行加法。然而,在汇编中,我们必须先选择乘法指令,然后再选择加法指令。

知道如何调用函数

大多数ISA架构都会附带调用约定手册,比如ARM和RISC-V。这些只是为在所有语言中调用函数制定了一些基本规则。不过幸运的是RISC-V寄存器的 “ABI” 命名规则,有助于程序员理解它们的含义。比如:

  1. .global main 
  2. main: 
  3.     addi    sp, sp, -8 
  4.     sd      ra, 0(sp) 
  5.     la      a0, test_solve 
  6.     call    solve 
  7.     mv      a0, zero 
  8.     ld      ra, 0(sp) 
  9.     addi    sp, sp, 8 
  10.     ret 

你可以从上面的代码中看到,我们首先分配我们的堆栈框架,保存所有需要保存的寄存器,执行,然后在返回之前撤消的所有寄存器。

文档

用C或其他语言编写汇编代码会让你为每一行C代码编写多行汇编代码。如果你试图调试程序,这可能会让你有些难度,所以,我总是写C代码作为汇编的注释,然后把它拆开,并展示我做它的每一步。

你可以从上面的代码中看到,我有原始的C代码(第一个注释),然后对每个片段进行内联注释。这样的方式使我们能够保证程序可以正确地执行每一步。

 

来源:程序员书库内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯