riscv assembly的调用规约 riscv assembly的调用规约本来最开始学习riscv assembly的时候只是抱着简单了解学习的态度,但是学习过程中真的收获不少,该说不愧是riscv发源地吗(学习的是UC Berkeley的CS61C),让我悟到了汇编编程的思路,其中calling convention(调用规约)给我留下了深刻印象。我要是早点接触到这个概念就好了,本科阶段的x86汇编真的让我学的晕头转向的(国内的教 2023-08-06 编程语言 asm
防不胜防的编程陷阱 防不胜防的编程陷阱 这里记录了很多本人在编程过程中偶然碰到的容易被忽视的bugs 文本文件风格总所周知,忽略兼容性永远是引发bug的第一把好手。很多情况下,我们在一个平台上开发的程序在另一个平台上运行大概率就会出现问题。那么同样,如果是文件风格的不同,也会引发难以察觉的bug。 C程序读取文件在计算机中,文件分为两大类——二进制文件和文本文件,我们日常能够去编辑的文件都是文本文件(当然某些黑客能 2023-07-24 随笔 miscellaneous
如何学习计算机的某一技术 如何学习计算机的某一技术本来很早就有想法去写一篇类似如何学习计算机知识的文章,因为大学四年的专业学习让我的学习方式发生了很大的转变。其中不乏从填鸭式的应试教育学习方式到自我提升自行寻找优质资源的自我学习方式的转变。不管是外界给予的学习任务,还是为了自我扩展知识的目标,我个人认为在计算机科学领域都可以总结出一个统一的学习路径和方法。因为种种时间分配问题,到现在为止我才总结出了这篇文章,这种总结对于个 2023-05-29 随笔 miscellaneous
从termcap到pager:探索ncurses 从termcap到pager:探索ncursesIntro本篇文章的起因是我想要模仿GNU/Linux的more或者less这样的pager写出一个代码阅读工具。本来自己尝试使用标准库纯粹从零开始写,但经过探索过后发现还是调用ncurses库更为科学合理一些(不然就要独自和终端控制字符死磕到底了)。由于本人在实现过程中经历了这样复杂的心路历程,所以文章结构不会是简单介绍ncurses的功能和使用, 2023-05-23 工具 miscellaneous linux
研究xv6-riscv新知汇总 研究xv6-riscv新知汇总 按理来说,分页机制那一篇文章应该归到这里的第一个新知的。但是事实上,我到在现在才想起来汇总,惭愧啊,实在是怠惰了😅 Copy On Write写时复制,亦即COW(Copy On Write),是一种在操作系统或者数据库等系统中常用到的策略。它的主要思想是,在多个进程或者线程请求同一段数据空间时,他们会共同指向这一段空间,也就是说他们共享这些数据。只有在其中一个 2023-05-05 操作系统 unix
通过分析xv6-riscv代码理解页表机制 通过分析xv6-riscv代码理解页表机制不得不说在之前我一直对于页表这一虚拟内存机制抱有不小的疑惑,今天仔细分析完xv6-riscv对于页表的实现代码(又是一段苦痛之路),终于明朗了起来。 最早接触到页表应该是在上操作系统课程的时候,然而那个时候只讲原理没有实践,我顶多一知半解,甚至有时候连页表到底是操作系统对内存机制还是存储机制都傻傻分不清。 简单来说,页表是一种操作系统提供的虚拟内存机制,在 2023-04-06 操作系统 miscellaneous unix
新时间观与如何活得更久 叠甲声明:很抱歉我没有系统性深入学习过爱因斯坦的相对论,对他的理论是处于一知半解的程度。我的部分说法确实会有和相对论类似的地方,但如果想要深究理论,那就只能道句慢走不送。如果你觉得我写的哪里有不对的地方,那一定是我错了,请继续相信你是对的。 你是否想过,时间作为我们主观感知出的一种抽象,其实并不是客观存在着。可能你认为时间绝对是真实的啊,毕竟日出日落,春夏秋冬这些自然现象都预示着时间的流逝。 2023-04-01 随笔 miscellaneous
Flutter开发技巧 Flutter开发技巧 首先是必知必会模版 import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } // ignore: use_key_in_widget_constructors class MyApp extends StatelessWidget { @ov 2023-03-06 开发技术 mobile
文本文件、二进制文件和乱码 文本文件和二进制文件的区别你是否遇到过这种情景:当你编译完一个c文件之后,你发现有个地方仍需进行小修改,于是你使用vim重新打开.c源文件,但是不幸的是,你一不小心忘记在文件名上加上.c。于是结果你用vim打开了刚刚编译好的二进制文件,当然里面都是一堆你完全看不懂的乱码,但是你很好奇,为什么它是乱码,它不应该是充满了0和1么? 回答这个问题之前,首先来想一下另一个问题: How does text 2023-02-17 随笔 miscellaneous
Arm汇编指令汇总 Arm汇编指令汇总本指令汇总主要由此文章总结得出,故若有对指令细节不理解的地方,可将文章作为参考。 需要说明的是,和AT&T风格的x86汇编相比,arm汇编的源操作数在右边,目的操作数在左边,而且运算指令基本上是需要指定目的地址的。(本文使用的是GUN风格的arm汇编,除此之外还有armasm风格的) 寄存器汇总 在AArch64架构下,有31个通用寄存器。这些通用寄存器可以作为大部分指令 2023-01-11 编程语言 asm