Risc-V学习日记

Risc-V学习日记 
Day1

//循序渐进,学习开发一个RISC-V上的操作系统 - 汪辰 - 2021春

//https://www.bilibili.com/video/BV1Q5411w7z5?p=1&vd_source=e0d9c80e34376411075dc347a4727440

代码目录://https://gitee.com/unicornx/riscv-operating-system-mooc

riscv-operating-system-mooc-main\code\asm为汇编参考目录

计算机系统漫游:[计算机的硬件组成,程序的存储与执行,程序语言的设计和进化,存储设备的层次结构,操作系统]

计算机的硬件组成
(冯诺依曼):
            1.总线
                2.CPU("中央处理单元")
                    CU:控制单元
                    ALU:算数逻辑单元{"计算发生的地方"}
                    寄存器
                3.IO桥
                4.内存
                5.外设
                    键盘
                    屏幕
                6.硬盘
(哈佛架构):1.CPU("中央处理单元")
                2.指令内存
                3.数据内存

程序的存储与执行:晶振频率{("GHz")"驱动整体运行"}  
                    1.hello.c{"编译和链接"}
                    2.a.out{"硬盘"}
                    3.0001010...{"内存"}
                    4.{"CPU"(
                        CU:取指[Fetch]
                           译码[Decode]
                           执行[Execute])}

Day2
//刚刚下载好虚拟机VMware并激活
//https://www.bilibili.com/video/BV1rd4y1G71H/?spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=e0d9c80e34376411075dc347a4727440
    //sudo apt update
    //sudo apt install build-essential gcc make perl dkms git gcc-riscv64-unknown-elf gdb-multiarch qemu-system-misc
    //安装完ubuntun准备用sudo指令时候发现这玩意需要输入密码居然不显示,搞了半天我以为我电脑坏了(https://blog.csdn.net/m0_47399811/article/details/113784922)

//夸克网盘下这些玩意真好用就是不给分享(2023/7/10)

程序语言的设计和进化: 实现a=b+c(b,c放入寄存器)
计算机访问内存通过地址访问
假设一条指令长度为8bit
            不同表达方式:
            A{([0][1]前面两位bit表达"动作,load,add,store")([2][3]寄存器的"代号")([4][5][6][7]四位"地址"能表达2^4=16个数字)}
            B{([0][1]前面两位bit表达"动作")([2][3]寄存器的"代号")([4][5]寄存器的"代号")([6][7]2位"地址"能表达2^2=4个数字)}
                    前两位的动作中定义 [0][1]=load [1][1]=add [1][0]=store
                        内存:{
                            
                            ADDRESS:0,Data:01000001;
                            ADDRESS:1,Data:01010101;
                            ADDRESS:2,Data:00010011;
                            ADDRESS:3,Data:01100010;

                            ADDRESS:4,Data:00000001;
                            ADDRESS:5,Data:00000010;
                            ADDRESS:6,Data:00000011;
                        }
                        运行逻辑:{
                            Program Counter(PC)与Memory(内存)
                            Program Counter (0000-0000)| Instruction Register(0100-00-01) | Register0 (0000-00-01) | Register1 (XXXX-XX-XX);
                            Program Counter (0000-0001)| Instruction Register(0101-01-01) | Register0 (0000-00-01) | Register1 (0000-00-10);
                            Program Counter (0000-0010)| Instruction Register(0001-00-11) | Register0 (0000-00-11) | Register1 (0000-00-10);
                            Program Counter (0000-0011)| Instruction Register(0110-00-10) | Register0 (0000-00-11) | Register1 (0000-00-10);
                        }
                        1.将b从内存搬入寄存器
                            load data from ADDRESS where stores the first value to REGISTER_0
                            [Load:01 REGISTER_0:00 ADDRESS:0100   0100-00-01 (A) ]
                                0100,0001   (从地址为4{0100}(对应值为"1")的内存的原地址,加载一个数{将a从内存搬入寄存器})
                        2.将c从内存搬入寄存器
                            load data from ADDRESS where stores the Second value to REGISTER_1
                            [Load:01 REGISTER_0:01 ADDRESS:0101   0101-01-01 (A) ]
                                0101,0101   (从地址为5{0101}(对应值为"2")的内存的原地址,加载一个数{将b从内存搬入寄存器})
                        3.算数逻辑单元访问寄存器获得b,c计算获得a
                            ADD REG0 and REG1,store result in REGISTER_0
                            [Add:11 REGISTER_0:00 REGISTER_1:01   00-01-00-11(B) ]
                                0001,0011    ({0011}将{00}与{11}寄存器相加存在{00}中)
                        4.将a从寄存器搬入内存
                            store value of REGISTER_0 to ADDRESS
                            [store:10 REGISTER_0:00 ADDRESS:0110   0110-00-10(A) ]
                                0110,0010    ({0010}将{00}保存在"6"{0110}地址内存中)

Day3
编程语言的进化:机器语言——>汇编语言
    
    机器语言:   ADDRESS:0,Data:01000001;
                ADDRESS:1,Data:01010101;
                ADDRESS:2,Data:00010011;
                ADDRESS:3,Data:01100010;
                ADDRESS:4,Data:00000001;
                ADDRESS:5,Data:00000010;
                ADDRESS:6,Data:00000011;
    
    汇编语言:   # Assemble Language
                    .global add     # Define entry
                add:
                    load r0,0x04    # Load r0 from address 0x04
                    load r1,0x05   # Load r0 from address 0x05
                    add r0, r1     # Add r0 and r1
                                    # and store result in r0
                    store r0,0x06  # Store r0 to address 0x06
                array:
                .byte   0x01
                .byte   0x02
                .byte   0x00
                        .end.       # End of file
    
    高级语言:  // Advanced Language
               byte array[3] = {1, 2, 0};
               function add () 
               {
                    byte a = array[0];
                    byte b = array[1];
                    array[2] = a + b;
               }

存储设备的层次结构:寄存器,内存,硬盘
    
    ;速度:快;容量:小;成本:高
        寄存器
            高速缓存
                主存
                    本地存储(磁盘)
                        原创存储(网盘)

应用程序<---->操作系统:系统调用(system call)
操作系统<---->处理器:指令集架构(ISA)
    作用:保护硬件被失控的软件应用程序滥用
    向应用程序提供简单一致的"抽象接口"来控制复杂的多种外设硬件

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值