汇编语言指令

news2024/12/25 12:53:08

文章目录

  • 算术运算指令
    • ADD
    • ADDI
    • SUB
    • 伪指令
    • LUI
    • LI
    • AUIPC
    • LA
  • 逻辑运算指令
  • 内存读写指令
  • 条件分支指令
  • 无条件跳转指令

算术运算指令

ADD

语法ADD RD,RS1,RS2
例子add x5,x6,x7x5=x6+x7

编码格式:R-type
opcode(7):0110011(OP)
从RS里面取出数据,把里面的数据计算,得出的结果放在rd里面
func3取值000,func7取值0000000

在这里插入图片描述

	.text			# Define beginning of text section,告诉汇编器,所有的数据都放到text section里面
	.global	_start		# Define entry _start   这里面就是程序的入口,_start就是主体程序

_start:
	li x6, 1		# x6 = 1   li就是进行赋值
	li x7, 2		# x7 = 2
	add x5, x6, x7		# x5 = x6 + x7

stop:
	j stop			# Infinite loop to stop execution  j跳转,跳转到stop,就死循环,不退出

	.end			# End of file

ADDI

在这里插入图片描述
使用了立即数少了一个寄存器,占12个bit位,用一个立即数

_start:
	li x6, 2		# x6 = 2,li这里就是一个赋值运算的操作
	addi x5, x6, 1		# x5 = x6 + 1

注意sub没有subi,减一个正数相当于加一个负数

SUB

_start:
	li x6, -1		# x6 = -1
	li x7, -2		# x7 = -2
	sub x5, x6, x7		# x5 = x6 - x7

和前面的add一样

伪指令

在这里插入图片描述

LUI

LUI:把一个数左移12位

_start:
	lui x5, 0x12345		# int x5 = 0x12345 << 12
	addi x5, x5, 0x678	# x5 = x5 + 0x678

最后x5=0x12345678

LI

LI 赋值

	li x5, 0x80

x5=0x80

AUIPC

	auipc x5, 0x12345	# x5 = PC + (0x12345 << 12)
	
	auipc x6, 0		# x6 = PC, to obtain the current PC

有利于构造相对地址
auipc就是把一个数左移12位,后再加上pc值

LA

常用于加载一个函数或者变量的地址

_start:
	la x5, _start		# x5 = _start
	jr x5

这里给x5加载_start地址
jr跳转到x5里面,就是死循环

逻辑运算指令

and x5,x6,x7按位与操作

x5=x6&x7

or x5,x6,x7和c语言或操作

x5=x6|7

xor x5,x6,x7异或操作

x5=x6^x7

NOT:取反操作

等价于xori rd ,rs ,-1==~rs

sll:左移逻辑上,只补0

sll x5,x6,x7
x5=x6<<x7
srl:右移

sra:算术移位

内存读写指令

内存读取指令LOAD,将数据从内存读取到寄存器里面
内存写指令STORE,将数据从寄存器放到内存

条件分支指令

在这里插入图片描述
如果条件成立就跳转到最后一个最后一个地址上

	# i = 0
	# while (i < 5) i++;

	li x5, 0
	li x6, 5
loop:
	addi x5, x5, 1
	bne x5, x6, loop

bne最后一个就是要跳转的地址
在这里插入图片描述

无条件跳转指令

JAL(jump and link)
语法

JAL RD ,LABEL
这里的RD,就是为了跳转回来爱能执行子过程,后面的函数
lable就是要跳转到的地方,RD就是label地址处理完之后返回的地址

JALR(jump and link register)

jalr x0, 0(x5)
跳转到x5+0的位置,x0保存

# int a = 1;
# int b = 1;
#
# void sum()
# {
#     a = a + b;

# } 
#
# void _start()
# {
#     sum();
# }

	.text			# Define beginning of text section
	.global	_start		# Define entry _start
# _start就是函数的入口
_start:
	li x6, 1
	li x7, 2
	jal x5, sum  # call sum, return address is saved in x5,把函数地址保存在x5里面

stop:
	j stop			# Infinite loop to stop execution

sum:
	add x6, x6, x7		# x6 = x6 + x7
	jalr x0, 0(x5)		# return   这里是跳转到x5+0的地址,是要进行相对地址进行处理的

	.end			# End of file

J/JR 是不返回的跳转,J/JR就是一个伪指令

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MyBatis框架】关联映射

关系映射1. 关联映射概述2. 环境搭建3.处理字段名和属性名不一致的情况4. 处理一对一映射5. 处理多对一映射5.1 级联方式处理5.2 使用association处理映射关系5.3 分步查询6. 处理一对多查询7. 小结1. 关联映射概述 在关系型数据库中&#xff0c;多表之间存在着三种关联关系&a…

Linux文件打包及压缩、解包及解压

目录 前言 什么是压缩&#xff1f; tar的介绍与使用 简介 打包压缩文件 打包文件&#xff08;不压缩&#xff09; gzip压缩类型压缩文件 bzip压缩类型压缩文件 xzip压缩类型压缩文件 解包解压文件 简介 解压缩&#xff08;解压到当前目录&#xff09; 解压缩&#x…

线代 | 【提神醒脑】自用笔记串联

一、初等变换 1、初等行变换与方程组的同解变换 2、初等行变换关系网 ※ 3、关联结论 —— 同解方程 4、行、列变换适用场景

Java 线程池之ThreadPoolExecutor学习总结

前提 java version "1.8.0_25" 池简述 软件开发活动中&#xff0c;我们经常会听到数据库连接池、内存池、线程池等各种“池”概念&#xff0c;这些“池”到底是什么东西呢&#xff1f;程序的世界里&#xff0c;我们可以将池简单的理解为一种容器类数据结构&#x…

哪本计算机书籍,让你有了醍醐灌顶突然开悟的感觉?

计算机书籍每年都会出版很多&#xff0c;但是能影响几代程序员的有这几本书&#xff0c;推荐一下&#xff0c;肯定让你有醍醐灌顶的开悟的感觉。 1、重构 改善既有代码的设计&#xff08;第2版 平装版&#xff09; 豆瓣评分&#xff1a;9.2 本书是一本为专业程序员编写的重构指…

30岁本科男,在测试行业干了五年还只会功能测试,难道真的要去送外卖吗?

在网上看到一个帖子 从发帖内容可以看出&#xff0c;题主是一位拥有五年功能测试经验的IT从业者&#xff0c;他也深知功能测试现在的处境艰难&#xff0c;想改变&#xff0c;却又因为年龄和经济压力的原因迟迟不敢迈出第一步&#xff0c;其实这是很多年近30岁的人事业危机的缩影…

【Java】之File类

个人主页&#xff1a;天寒雨落的博客_CSDN博客-C,CSDN竞赛,python领域博主 特别标注&#xff1a;仅为自己的学习记录笔记&#xff0c;方便复习和加深记忆&#xff0c;仅供借鉴参考&#xff01; 前篇回顾&#xff1a;【java】之File类_天寒雨落的博客-CSDN博客 目录 目录的遍历…

五 系统安全分析与设计

目录 一、安全基础技术 1.1 对称与非对称加密 1.2 数字签名&#xff08;防抵赖&#xff09; 1.3 信息摘要&#xff08;防篡改&#xff09; 1.4 加密、数字签名、信息摘要结合使用 1.5 数字证书&#xff08;防止公钥被截取篡改&#xff09; 二、网络安全 2.1 安全协议 …

Android LayerDrawable 使用

1. 前言 Android LayerDrawble 包含一个Drawable数组&#xff0c;系统将会按照这些Drawable对象的数组顺序来绘制他们&#xff0c;索引最大的 Drawable 对象将会被绘制在最上面。 LayerDrawable对象的xml文件的根元素是<layer-list>&#xff0c; 该元素内部包含多个<i…

【Linux】开发工具之gdb调试器

目录&#x1f308;前言&#x1f337;1、debug与release&#x1f338;2、gdb选项&#x1f308;前言 本篇文章进行调试器gdb的学习&#xff01;&#xff01;&#xff01; &#x1f337;1、debug与release debug会生成需要调试的信息&#xff0c;release不会生成 程序的发布方式有…

【Node.js】模块的加载机制

✍️ 作者简介: 前端新手学习中。 &#x1f482; 作者主页: 作者主页查看更多前端教学 &#x1f393; 专栏分享&#xff1a;css重难点教学 Node.js教学 从头开始学习 目录 模块的加载机制 优先从缓存中加载 内置模块的加载机制 自定义模块的加载机制 第三方模块的加载机…

2022年浙江省中职组“网络空间安全”赛项模块B--Linux系统渗透提权

2022年中职组浙江省“网络空间安全”赛项 B-3:Linux系统渗透提权一、竞赛时间 420分钟 共计7小时 吃饭一小时 二、竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第①阶段: 单兵模式系统渗透测试 任务一: Windows操作系统渗透测试 任务二: Linux操作系统渗透测试 任务…

经典算法|水仙花数|自幂数

算法题目 水仙花数&#xff08;Narcissistic number&#xff09;也被称为超完全数字不变数&#xff08;pluperfect digital invariant, PPDI&#xff09;、自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数&#xff08;Armstrong number&#xff09;&#xff0c;水仙花数是指一个 3 位…

高精度RC振荡器的设计

1. 一些技术指标 应用于数字模拟混合信号芯片的高频率精度&#xff0c;高频率稳定度&#xff0c;全集成RC振荡器设计 由于数字电路指标仅与复杂度有关&#xff0c;此仅考虑模拟电路的设计指标。 项目Value电源电压2.5V~5.5V工作温度-40~125目标频率Ftyp 2MHZ频率精度&#x…

常用流媒体服务器

1、Mediasoup mediasoup是相对比较新的一个WebRTC服务器端的开源项目。它更多是通过集成包方式和其他应用服务器来集成。它支持SFU模式&#xff0c;主要支持视频聊天&#xff0c;媒体流广播等。 其特点是&#xff1a; 通过底层API实现和第三方集成&#xff0c;安装简单&#…

java自学第一天

1.1.体系&#xff1a; JavaSE&#xff08;J2SE&#xff09;&#xff08;Java2 Platform Standard Edition&#xff0c;java平台标准版&#xff09; JavaEE(J2EE)(Java 2 Platform,Enterprise Edition&#xff0c;java平台企业版) JavaME(J2ME)(Java 2 Platform Micro Edition&a…

如何提高代码交付效率,完成代码交付应用自动化?

为了提高代码交付效率&#xff0c;完成代码交付应用自动化&#xff0c;CoCode旗下Co-Project V2.5.0智能项目管理平台全新发布&#xff0c;新增CI/CD功能&#xff1a;Co-DevOps。 Co-DevOps是 CoCode 全新开发出的一项CI/CD功能&#xff0c;提供持续集成、持续交付&#xff08;…

六轴工业机器人

连杆原理 符号中文名含义aaa连杆长度两个相邻关节轴之间的公垂线的长度α\alphaα连杆转角两个相邻关节间轴之间形成的角度&#xff0c;右手定则前一个轴到后一个轴ddd连杆偏距两个相邻连杆之间的距离&#xff0c;高度差θ\thetaθ关节角两个相邻杆绕公共关节轴旋转的角度 机…

TypeScript-01基础知识

目录 一、ts与es、js之间的关系 二、TypeScript与JavaScript之间的区别 三、安装TypeScript编译器 四、执行typescript的步骤 五、ts的数据类型 1、类型别名 2、接口 接口 与 类型别名 的区别 3、类型断言 4、文字类型 不常用枚举、bigint、symbol 六、类型缩小 1、…

Linux socket 编程 UDP

套接字&#xff1a;操作系统向上层提供的用于实现网络通信的统称 网络通信其实本质上就是两台主机之间的通信其中一段是客户端&#xff0c;另一端是服务器 客户端&#xff1a;用户的一端&#xff0c;客户端是主动发出请求的一端 服务端&#xff1a;针对用户请求提供服务的一端…