不多说,直接开冲
众所周知,汇编语言有多种,可以分为精简指令集和复杂指令集,具体包括RISC-V和x86等等. 而x86汇编是非常常见的,
如果你使用RISC-V,你不太能将Linux运行在上面。相应的,大多数现代计算机都运行在x86和x86-64处理器上。x86拥有一套不同的指令集,看起来与RISC-V非常相似。通常个人电脑上运行的处理器是x86,Intel和AMD的CPU都实现了x86
这两者之间有一些关键的区别:
- 首先是指令的数量。实际上,创造RISC-V的一个非常大的初衷就是因为Intel手册中指令数量太多了。x86-64指令介绍由3个文档组成,并且新的指令以每个月3条的速度在增加。因为x86-64是在1970年代发布的,所以现在有多于15000条指令。RISC-V指令介绍由两个文档组成。
- 除此之外,RISC-V指令也更加简单.在x86-64中,很多指令都做了不止一件事情。这些指令中的每一条都执行了一系列复杂的操作并返回结果。但是RISC-V不会这样做,RISC-V的指令趋向于完成更简单的工作,相应的也消耗更少的CPU执行时间。这其实是设计人员的在底层设计时的取舍。并没有一些非常确定的原因说RISC比CISC更好。它们各自有各自的使用场景。
- 相比x86来说,RISC另一件有意思的事情是它是开源的。这是市场上唯一的一款开源指令集,这意味着任何人都可以为RISC-V开发主板。RISC-V是来自于UC-Berkly的一个研究项目,之后被大量的公司选中并做了支持,网上有这些公司的名单,许多大公司对于支持一个开源指令集都感兴趣。
关于所谓RISC和CISC之争都2021年了,还把x86和ARM归为CISC和RISC? - 知乎 (zhihu.com)
RISC-V指令集简介
.data
段包含已初始化的全局变量result
。.bss
段可以用于定义未初始化的全局变量(如果需要)- 在RISC-V汇编中,使用
.text
指令来定义代码段的开始。通常,代码段的入口点会用.global
指令声明,以便链接器知道程序的入口点
调用约定
x86指令集简介
调用约定
Guide to x86 Assembly (virginia.edu)
x86 and amd64 instruction reference (felixcloutier.com)
汇编语言—x86汇编指令集大全 - 知乎 (zhihu.com)
x86汇编指令集大全(带注释)_x86处理器32位的指令集中文文档-CSDN博客
做做题
推荐使用codewars刷刷题,可以使用NASM(x86汇编器)或者RISC-V
Q1
Complete the function that takes two integers (
a, b
, wherea < b
) and return an array of all integers between the input parameters, including them.
1 | .global between |
Q2
Your classmates asked you to copy some paperwork for them. You know that there are ‘n’ classmates and the paperwork has ‘m’ pages.
Your task is to calculate how many blank pages do you need. If
n < 0
orm < 0
return0
.
1 | .global paperwork |
Q3
Given a string, you have to return a string in which each character (case-sensitive) is repeated once.
1 | double_char: |