制作一个RISC-V的操作系统五-RISC-V汇编语言编程三

news2024/11/27 13:34:05

文章目录

  • 分析code/asm/add中的makefile
    • 相关命令
  • 算数运算指令
    • add
    • add2
    • sub
  • 练习5-1

分析code/asm/add中的makefile

makefile

EXEC = test

SRC = ${EXEC}.s

GDBINIT = ../gdbinit

include ../rule.mk

很明显还要去执行rule.mk

rule.mk

include ../../common.mk

.DEFAULT_GOAL := all
all:
	@${CC} ${CFLAGS} ${SRC} -Ttext=0x80000000 -o ${EXEC}.elf
	@${OBJCOPY} -O binary ${EXEC}.elf ${EXEC}.bin

.PHONY : run
run: all
	@echo "Press Ctrl-A and then X to exit QEMU"
	@echo "------------------------------------"
	@echo "No output, please run 'make debug' to see details"
	@${QEMU} ${QFLAGS} -kernel ./${EXEC}.elf

.PHONY : debug
debug: all
	@echo "Press Ctrl-C and then input 'quit' to exit GDB and QEMU"
	@echo "-------------------------------------------------------"
	@${QEMU} ${QFLAGS} -kernel ${EXEC}.elf -s -S &
	@${GDB} ${EXEC}.elf -q -x ${GDBINIT}

.PHONY : code
code: all
	@${OBJDUMP} -S ${EXEC}.elf | less

.PHONY : hex
hex: all
	@hexdump -C ${EXEC}.bin

.PHONY : clean
clean:
	rm -rf *.o *.bin *.elf

还要执行common.mk,然后按命令行中执行对应目标
common.mk

CROSS_COMPILE = riscv64-unknown-elf-
CFLAGS = -nostdlib -fno-builtin -march=rv32ima -mabi=ilp32 -g -Wall

QEMU = qemu-system-riscv32
QFLAGS = -nographic -smp 1 -machine virt -bios none

GDB = gdb-multiarch
CC = ${CROSS_COMPILE}gcc
OBJCOPY = ${CROSS_COMPILE}objcopy
OBJDUMP = ${CROSS_COMPILE}objdump

相关命令

QEMU -s 自动在模拟器启动是启动gdbserver,gdbserver与gdb通过网络连接。gdb server默认端口1234,然后等待gdb与之连接 -S参数代表 gdbserver启动调试程序后停止然后等待用户输入.-kernel ./可执行文件 代表要加载的镜像
gdb -q 启动把前面乱七八糟打印的东西去掉 -x 配置脚本 gdb启动时会运行该脚本

算数运算指令

乘除由M模块来扩展
RISC-V指令习惯源放后面 目的放前面

add

在这里插入图片描述
通过funct3和funct7和opcode来识别这是add指令
在这里插入图片描述
rsn对应第n个寄存器,里面存储的值是n
在这里插入图片描述
在这里插入图片描述

add2

对于4和-4的补码
符号扩展 只需按符号位扩展
零扩展(无符号扩展) 无论啥都扩展为0
对于4直接求出对应4的二进制编码为0100,(留一个为符号位)然后扩展由于是整数,左扩展0,为00000100
对于-4先求出对应4的二进制编码为0100,然后取反加1,为1100,然后符号位为1,左扩展1,为11111100

在这里插入图片描述
在这里插入图片描述

sub

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

练习5-1

  • 对 code/asm/sub 执⾏反汇编,查看 sub x5, x6, x7 这条汇编指令对应的机器指令的编码,并对照
    RISC-V 的 specificaion ⾃⼰解析该条指令的编码。
    0x407302b3对应二进制为0100000-00111-00110-000-00101-0110011
    在这里插入图片描述

  • 现知道某条 RISC-V 的机器指令在内存中的值为 b3 05 95 00,从左往右为从低地址到⾼地址,单位为
    字节,请将其翻译为对应的汇编指令。
    0x009505b3 对应二进制为0000000-01001-01010-000-01011-0110011
    add,x11,x10,x9
    在这里插入图片描述

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

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

相关文章

微信小程序中生命周期钩子函数

微信小程序 App 的生命周期钩子函数有以下 7 个: onLaunch(options):当小程序初始化完成时,会触发 onLaunch(全局只触发一次)。onShow(options):当小程序启动或从后台进入前台显示时,会触发 on…

Numpy 实现ID3决策树

Numpy 实现ID3决策树 # 定义节点类 二叉树 class Node:def __init__(self, rootTrue, labelNone, feature_nameNone, featureNone):self.root rootself.label labelself.feature_name feature_nameself.feature featureself.tree {}self.result {label:: self.label,fea…

Python第三次练习

Python 一、如何判断一个字符串是否是另一个字符串的子串二、如何验证一个字符串中的每一个字符均在另一个字符串中出现三、如何判定一个字符串中既有数字又有字母四、做一个注册登录系统 一、如何判断一个字符串是否是另一个字符串的子串 实现代码: string1 inp…

Java随记

Java java保留两位小数 1、使用String.format()方法: public static void stringFormatdecimalFormatKeepTwoDecimalPlaces(){double number 3.1415926;String result String.format("%.2f", number);System.out.println(result);}输出:3…

案例054:基于微信的追星小程序

文末获取源码 开发语言:Java 框架:SSM JDK版本:JDK1.8 数据库:mysql 5.7 开发软件:eclipse/myeclipse/idea Maven包:Maven3.5.4 小程序框架:uniapp 小程序开发软件:HBuilder X 小程序…

简单易懂:Axios 如何取消请求的两种方法

在前端开发中,网络请求是非常常见的操作。而有时候,我们可能需要在发送请求后取消它,比如用户在请求还未完成时离开了当前页面或者执行了其他操作,本文将介绍如何在使用 Axios 发送请求时取消这些请求。 基本概念 在 Axios 中&am…

拼多多商品详情API接口丨百亿补贴商品数据丨秒杀商品数据

拼多多API接口是拼多多网提供的一种应用程序接口,允许开发者通过程序访问拼多多网站的数据和功能。通过拼多多API接口,开发者可以开发各种应用程序,如店铺管理工具、数据分析工具、购物比价工具等。在本章中,我们将介绍拼多多API接…

大模型在企业知识库场景的落地思考

一、引言 在这个信息爆炸的时代,企业的知识库已不再是简单的数据堆砌,而是需要智能化、高效率的知识管理和利用。大模型作为AI领域的一个重要突破,正逐步成为企业知识库管理的强大助力。通过前面一段时间对于大模型在企业落地的深入调研和实…

创业6个月裤衩都赔掉了;2023生成式AI年度大事表;AI工程师的自我修养;LLM开发者成长计划;OpenAI LLM入门课程 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 👀 黄家驹AI演唱「直到世界尽头」,是科技前进也是青春回望~ https://www.bilibili.com/video/BV1CG411i7MV 最近几天&#xf…

软件开发需求文档格式

软件需求文档的格式可以因项目的性质、组织的规定以及项目参与者的需求而有所不同。然而,一个良好的需求文档通常包含以下基本部分,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司,欢迎交流合作。 1.引言&…

【GEE】时间序列多源遥感数据随机森林回归预测|反演|验证|散点图|完整代码

实验介绍 分类和回归之间的主要区别在于,在分类中,我们的预测目标是离散的类别,而在回归中,预测目标是连续的预测值。 本实验的研究区域位于佛蒙特州的埃塞克斯郡,使用训练数据来模拟土壤氧化还原深度,然…

【华为网络-配置-023】- 一般企业网架构方案(单节点方案)

要求: 1、防火墙 FW1 G1/0/0 接口使用 PPPoE 拨号获取 IP 地址。 2、FW1 配置信任(内网包含服务器)和非信任区域(Internet 外网)。 3、FW1 配置 NAPT 使内网可以上网。 4、核心交换机 LSW1 划分 VLAN 并配置各接口及三…

漫步者开放式耳机怎么样?南卡、漫步者开放式耳机哪个好?

现在开放式耳机的市场越来越混杂,我们作为消费者在挑选的时候,一定要找准需求点才能把踩坑几率降到最低。实在不会挑选的也不要紧,我最近入了2款目前市面最畅销的百元款开放式耳机:南卡OE CC和漫步者comfo fit,亲身上耳…

【NLP】如何管理大型语言模型 (LLM)

什么是LLM编排? LLM 编排是管理和控制大型语言模型 (LLM)的过程,以优化其性能和有效性。这包括以下任务: 提示LLM:生成有效的提示,为LLMs提供适当的背景和信息以产生所需的输出。链接LLM: 结合多个LLM的输…

【高数:2 数列的极限、函数的极限】

【高数:2 数列的极限、函数的极限】 1 数列的极限2 函数极限 参考书籍:毕文斌, 毛悦悦. Python漫游数学王国[M]. 北京:清华大学出版社,2022. 1 数列的极限 数列 2 , 1 2 , 4 3 , 3 4 , ⋅ ⋅ ⋅ , n ( − 1 ) n − 1 n 2,\frac{…

如何选购适合自己的内衣洗衣机?小型洗衣机全自动

随着科技的快速发展,现在的人们越来越注重自己的卫生问题,不仅在吃上面会注重卫生问题,在用的上面也会更加严格要求,而衣服做为我们最贴身的东西,我们对它的要求也会更加高,所以最近这几年较火爆的无疑是内…

Chrono库

chrono库 C11中提供了日期和时间相关的库chrono,通过chrono库可以很方便地处理日期和时间,为程序的开发提供了便利。chrono库主要包含三种类型的类:时间间隔duration、时钟clocks、时间点time point。 1.时间间隔duration 1.1常用类成员 …

UDP协议实现群聊

服务端 package ydd;import java.io.*; import java.net.*; import java.util.ArrayList; public class A2{public static ServerSocket server_socket;public static ArrayList<Socket> socketListnew ArrayList<Socket>(); public static void main(String []a…

16个UI设计小规则,但是却能产生巨大影响

我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版&#xff0c;欢迎购买。点击进入详情 文章目录 1.使用空间对相关元素进行分组2.保持一致3.确保外观相似的元素功能相似4.创建清晰的视觉层次5.删除不必要的样式6.有目的地使用颜色7.确保界面元素的对比…

基于OpenCV+CNN+IOT+微信小程序智能果实采摘指导系统——深度学习算法应用(含pytho、JS工程源码)+数据集+模型(三)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python环境TensorFlow 环境Jupyter Notebook环境Pycharm 环境微信开发者工具OneNET云平台 模块实现1. 数据预处理1&#xff09;爬取功能2&#xff09;下载功能 2. 创建模型并编译1&#xff09;定义模型结构2&#xff09;优化…