Luyoung
  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
NEMU 指令执行过程

NEMU 指令执行过程

NEMU 架构NEMU 是一个CPU模拟器,它使用 C语言 完成了模拟取指令、指令解析、指令执行、寄存器、初始化等,可以执行很多平台的任何二进制指令。 初始化nemu main 中进行了一些初始化,这里只研究关键的初始化: 12345678910111213init_mem();/* Initialize devices. */IFDEF(CONFIG_DEVICE, init_device(
2024-08-13
OS > RISCV
#模拟器 #NEMU
NEMU 代码导读

NEMU 代码导读

项目构建首先得了解一些 make 的行为,重要的就是查看make 的行为以及make 的子进程如何与系统进行交互,比如 : strace -f make make -nB # 只打印命令不执行 B强制构建 make -d make -debug=v 具体RTFM。 nemu/Makefile SRCS: 和YEMU差不多, 是需要编译的源文件 CFLAGS:
2024-08-12
OS > RISCV
#模拟器 #NEMU
程序的执行和模拟器

程序的执行和模拟器

freestanding 运行时环境示例程序: 1234567#include <stdint.h>void _start() { volatile uint8_t* p = (uint8_t*)(uintptr_t)0x10000000; *p = 'A'; while (1) ;} 编译:rv32gcc
2024-08-09
OS > RISCV
#模拟器 #二进制程序 #程序
从C语言到二进制程序

从C语言到二进制程序

预处理123456789101112#include <stdio.h>#define MSG \ "Hello \World!\n"int main() { printf(MSG /* "hi!\n" */);#ifdef __riscv printf("Hello RISC-V!\n");#
2024-08-08
C 语言 > OS > RISCV
#C 语言 #二进制程序
Linux101:最好的Linux 入门资料

Linux101:最好的Linux 入门资料

前言本文是对 Linux101 这本及其优秀的 Linux 入门的一些心得体会,链接:Linux101 软件安装和文件操作apt建议用 apt 安装,apt 作为前端,它会自动处理软件包之间的依赖关系、升级软件包以至升级发行版,自动处理升级发行版所需的依赖关系等等。但是需要明白,真正执行安装软件的是 dpkg。 另外,dpkg -i 也可以安装软件,但是它不会处理依赖,如果安装报错,应该使用
2024-08-07
Linux 基础
#Linux 入门 #Linux
PA1 感悟与过程

PA1 感悟与过程

一、单步执行单步执行就是传入 1,让它执行一个指令就好。 12345678static int cmd_si(char* args) { if (args == NULL) cpu_exec(1); else cpu_exec((uint64_t)(atoi(args))); return 0;} 其中源码这里接受的是一个 ui
2024-08-05
ysyx > PA1
#ysyx #PA1 #sbd
表达式求值(随心所欲版)

表达式求值(随心所欲版)

一、构建 tokens所有的代码基本上都在 sdb.c中实现,没有轮子自己造。 构建 tokens 这步,基本上就是实现一个简单的词法分析器,从 args[0]开始,一个一个模式进行识别。比如对于表达式: 0x80100000+ ($a0 +5)*4 - ( $ t1 + 8) + 32 首先就要能识别出 0x开头的 16进制数、$开头的寄存器,识别出来以后,我们首先就是把这些能计算的
2024-07-22
ysyx
#ysyx #PA1 #sbd
数字电路实验7

数字电路实验7

一、状态机 状态名 y3 y2 y1 y0 A 0 0 0 0 B 0 0 0 1 C 0 0 1 0 D 0 0 1 1 E 0 1 0 0 F 0 1 0 1 G 0 1 1 0 H 0 1 1 1 I 1 0 0 0 这是一个状态编码,建立一个Verilog文件,用SW0作为FSM低电平有效同步复位端,用SW1作为输入w,用KEY0作为手动的
2024-07-19
ysyx > 数字电路实验
#ysyx #NVBoard #状态机 #ps/2接口 #键盘
数字电路实验6

数字电路实验6

一、移位器 控制位 工作方式 000 清零 001 置数 010 逻辑右移 011 逻辑左移 100 算数右移 101 左端串行输入1位值,并行输出8位值 110 循环右移 111 循环左移 以下是一个移位寄存器的实现: 123456789101112131415161718192021222324252627282930module move(ctl
2024-07-18
ysyx > 数字电路实验
#ysyx #NVBoard #寄存器 #移位器
数字电路实验3

数字电路实验3

设计 ALU在CPU中,ALU的功能除了加减法运算之外,往往还包含逻辑运算、移位、乘除法、比较大小等等。我们这里按照RISC-V中基础指令集RV32I的ALU的设计要求来进行介绍。 RISC-V基础指令集RV32I只支持32位整型数值的操作。操作数可以是带符号补码整数或无符号数。ALU不需要完成乘除法,不需要进行溢出判断,相关操作由软件来完成。RV32I的ALU需要完成以下操作: 加减法操作
2024-07-16
ysyx > 数字电路实验
#ysyx #NVBoard #加法器 #ALU
1…89101112…26

搜索

Hexo Fluid
总访问量 次 总访客数 人