• 2024-11-15linker.ld在链接阶段的行为
    抽出编译AM程序中的“打包用户程序am-test到ELF”步骤,看看链接脚本abstract-machine/scripts/linker.ld如何将库函数和用户程序链接起来的。首先看下链接命令:echo+LD"->"build/amtest-riscv32-nemu.elf($CROSS_COMPILE)ld-znoexecstack-melf64lriscv-T/abstract-machi
  • 2024-11-15编译AM程序
    编译AM程序在am-kernels/tests/am-tests下运行下面命令,探究下基于riscv32-nemu上的AM程序的编译流程makeARCH=riscv32-nemumainargs='i'-nB编译am-test的用户程序#Buildingamtest-image[riscv32-nemu]mkdir-p$AM_TEST/build/riscv32-nemu/src/&&echo+CCsrc/m
  • 2024-10-20pa2学习笔记
    目录硬编码与软编码YEMUNEMU执行一条指令的过程ELF文件的组成ELF文件解析用fopen打开文件读取elfheader的信息解析elfheader解析sectionheaders解析符号表BIOS程序输入输出cpu与设备的交互方式(内存映射)(serial为例)(RTC为例)键盘的数据传输过程键盘的枚举宏定
  • 2024-09-29NEMU的指令执行步骤
    exec_once()函数覆盖了指令周期的所有阶段:取指,译码,执行,更新PC下面学习下函数exec_once()的各个阶段所做的事情取指在执行指令之前,需要获取这个指令,我们看下NEMU如何获取一条指令的。exec_once()接受一个Decode类型的结构体指针s.这个结构体存放“在执行一条指令过程中
  • 2024-08-30重新布置pa环境记录
    记录下自己刚才在一个新环境中重新下载PA项目代码并且运行时候遇到的问题。拉取代码首先拉取远程代码的主分支:[email protected]:CharlieCRX/pa.gitgitclone默认只会拉取并检出远程仓库的默认分支(通常是main或者master分支),但同时,所有远程分支的信息都会被拉取,但是不
  • 2024-07-12搭建NEMU与QEMU的DiffTest环境(Socket方式)
    搭建NEMU与QEMU的DiffTest环境(Socket方式)1简述2编译NEMU2.1配置2.2修改NEMU/scripts/build.mk2.3修改isa_difftest_checkregs函数2.4修改isa_pmp_check_permission函数2.5编译3编译qemu-socket-difftest3.1修改NEMU/scripts/isa.mk3.2修改NEMU/scripts/build.
  • 2024-07-11ysyx: 指令规则的匹配
    dummy的反汇编表:80000000<_start>:80000000:00000413lis0,080000004:00009117auipcsp,0x980000008:ffc10113addisp,sp,-4#80009000<_end>8000000c:00c000ef
  • 2024-04-21NEMU PA3 - 穿越时空的旅程: 批处理系统
    frompixiv最简单的操作系统最简单的操作系统有:批处理功能有一个后台程序,当一个前台程序执行结束的时候,后台程序就会自动加载一个新的前台程序来执行这样的一个后台程序,其实就是操作系统用户程序执行结束之后,可以跳转到操作系统的代码继续执行操作系统可以加载
  • 2024-04-10PA2 - 简单复杂的机器: 冯诺依曼计算机系统
    [いちご飴--放課後]RTFSC(2)exec_once()函数函数覆盖了指令周期的所有阶段:取指,译码,执行,更新PC//nemu/src/isa/riscv32/inst.c/**可以看到每一次我们都是从内存中取出32位(uint32_t)作为指令,然后也让我们的pc+4,因为我们的内存定义为uint8_tpmem[].*/intisa_e
  • 2024-02-01PA1:nemu相关讲义
    编译中出错:提示没有<SDL2/SDL.h>头文件查看错误信息,出错的文件在abstract-machine文件夹里,叫input.c,里面引用了SDL2/SDL.h 这个头文件,但是我只在fceux文件夹里搜到了sdl.h,考虑到linux区分大小写,搜索以后,我觉得我应该是系统缺少了SDL库。sudoaptinstalllibsdl2-dev  安
  • 2024-01-26一生一芯-Linux环境搭建
    1.gdb调试1.gdb-qFilename进入gdb调试器2.(gdb)b3 在第三行添加断点 breakpoint3.(gdb)run 执行程序4.(gdb)whatisiNum 查看iNum的数据类型5.(gdb)c 继续执行程序(直到下一个断点或者之后没有断点就运行完整个程序)6.(gdb) n 一步一步执行程序7.(gdb)piNu
  • 2023-02-26NEMU PA 4 实验报告
    一、实验目的在前面的PA123中,我们分别实现了基本的运算单元,实现了各种指令和程序的装载,实现了存储器的层次结构。而在PA4中,为了让NEMU可以处理异常情况以及和外设交互,我们
  • 2023-02-26NEMU PA 3-3 实验报告
    一、实验目的在上一章PA3-2中,我们实现了分段机制,将48位的虚拟地址vaddr转换成了laddr。为什么不是paddr呢?这就要说到这一章要完成的东西:**分页机制**。从80386开始,计算
  • 2023-02-25NEMU PA 3-2 实验报告
    一、实验目的在上一章节我们完成了Cache的实现,但是这只是在速度上提高了取指和存取操作数的效率,而在访问的安全性上没有得到有效提升。在PA3-2中我们要完成的,就是在NEMU
  • 2023-02-25NEMU PA 3-1 实验报告
    一、实验目的在前面的PA1中,我们实现了CPU和FPU,在PA2中我们实现了对指令的解码和对ELF的装载,以及进一步完善了CLI调试器。那么在整个PA3中,我们将要着力于内存的相关处理,如C
  • 2023-02-24NEMU PA 1 实验报告
    课程地址:PA1-1https://www.bilibili.com/video/BV1JE411J7AKPA1-2https://www.bilibili.com/video/BV1EE411J7Y6PA1-3https://www.bilibili.com/video/BV1fE411H7nS
  • 2023-02-24NEMU PA 2-2 实验报告
    课程地址:https://www.bilibili.com/video/BV1f7411D7P6一、实验目的在PA2-1中,我们实现了了解了程序的装载和对指令的解码和执行,在这一章节我们将继续深入了解程序的装
  • 2023-02-24NEMU PA 2-1 实验报告
    课程地址:https://www.bilibili.com/video/BV1TE411P7tq一、实验目的通过PA2-0了解了汇编基础知识和如何去阅读i386手册后,在这个阶段我们就需要:了解程序执行的宏观过
  • 2023-02-24NEMU PA 2-3 实验报告
    课程地址:https://www.bilibili.com/video/BV1yC4y1s74C一、实验目的了解ELF符号表的解析进一步完善调试器的功能,理解编译器的设计原理二、实验步骤在PA2-1中实现
  • 2023-01-10一生一芯/NEMU PA3.1随笔
    保存上下文处理异常的时候需要保存寄存器内容(上下文的一部分),需要将这些内容保存下来。但是硬件不负责这些内容的保存,因此需要用软件代码来保存这些寄存器的值。riscv采用s
  • 2022-10-28yzh第六课(NEMU代码导读)笔记
    了解程序/工具行为的两种方法:1.看源码:可以得知每一处静态细节,但较繁琐2.看踪迹:容易了解运行动态行为,但不全面下手要选容易的方式:看踪迹啊啊