原创 30天自制操作系統:第7天:FIFO與鼠標控制

第7天:FIFO與鼠標控制 今天前半部分講的都是鍵盤輸出與緩衝區的問題,後半部分纔是鼠標移動問題。 緩衝區FIFO實現 在按鍵盤上一個鍵時,鍵盤會以中斷形式發送給CPU數據。在現階段的設計中,一次只發送一字節,但是在按一些鍵時,

原创 如何從github上下載單個文件夾

用subversion可以實現。 首先打開自己將要下載的文件夾的網頁,複製網頁地址。例如我要下載下面這個 https://github.com/graphchallenge/GraphChallenge/tree/master/S

原创 30天自制操作系統:第1天:從計算機結構到彙編程序入門

第1天:從計算機結構到彙編程序入門 先是用一個二進制文件編輯器手寫了一個二進制文件,再解釋了一通CPU內部的數據表示和二進制,再寫了一點彙編程序。 彙編語言講解 DB指令意爲“define byte”,也就是往文件裏直接寫入

原创 30天自制操作系統:第3天:進入32位模式並導入C語言

第3天:進入32位模式並導入C語言 一些BIOS命令 AH=0x00 調用顯卡模式,此後可以通過設置AL來進行顯卡設置 AH=0x02 讀盤 AH=0x03 寫盤 AH=0x04 校驗 AH=0x0c 尋道 AL=處理對象的扇

原创 Linux cuda nvcc編譯顯示 “對‘omp_set_num_threads’未定義的引用” 解決方法

最近在寫“並行程序設計”大作業時,用到openmp,但是總是報錯,信息如下 /tmp/tmpxft_0000269f_00000000-10_quicksort_ex.o:在函數‘main’中:tmpxft_0000269f_00

原创 第6章 相同的功能 不同的代碼

第六章 相同的功能 不同的代碼 上一章我們分別將每一個顯示字符打入顯示緩衝區,這樣太麻煩,每次修改顯示不同內容得重寫,所以我們這一章設一個專門存放字符串的數據區,當要顯示時,再用指令統一取出來。 補課:除法指令div 8086處

原创 第7章 比高斯更快的計算

第七章 比高斯更快的計算 這一章的主題是彙編計算累加和,以及尋址方式的學習。 and、or指令 and是按位與,or是按位或。 兩者的目的操作數都必須是8位或者16位的內存單元或者通用寄存器,源操作數必須是與目的操作數同寬度的內存

原创 MIT 6.828 Lab1 exercise12

exercise 1.12 這個實驗說實話我沒有理解,只能照貓畫虎的做前幾問,最後一問實在不會做。 要求: 在函數debuginfo_eip中,__STAB_*來自哪裏? 通過插入對stab_binsearch的調用來完成deb

原创 MIT 6.828 Lab1: PC Bootstrap and GCC Calling Conventions

Lab 1: Booting a PC Part 1: PC Bootstrap Getting started with x86 assembly x86彙編入門 彙編語言有兩種格式,一種是AT&T格式,一種是Intel格式,兩

原创 MIT 6.828 Lab1 exercise11

exercise1.11 對我這種彙編很差的人來說,這個練習也太難了點吧,一卡卡了我兩天半。。。。先是看那個read_ebp()“會很有用”,於是去研究了內聯彙編格式,一直看不懂,花了一天才知道這個內聯彙編函數是在做什麼;之後又去

原创 MIT 6.828 Lab1 exercise10

exercise 1.10 要求:在obj/kern/kernel.asm中找到test_backtrace函數,設置一個斷點,檢查內核啓動後每次該函數被調用時發生了什麼。多少個32位字在每次嵌套調用test_backtrace時

原创 MIT 6.828 Lab1 exercise9

exercise 1.9 要求:找出內核初始化內核棧的地方(代碼),和內核棧加載到主存的位置。內核是如何爲棧保存這個區域的?這個棧指針初始化指向的保存區域的終點是哪裏? 解答: 打開路徑爲lab/obj/kernel.asm的文

原创 MIT 6.828 Lab1 exercise8

exercise 1.8 要求: 補充printfmt.c line 208處的代碼,讓程序能夠打印出八進制形式數。 解釋printf.c和console.c之間的接口,特別是,console提供了什麼函數?這個函數是怎樣被pr

原创 MIT 6.828 Lab1 exercise1

exercise 1.1 要求熟悉一下6.828這門課的參考文獻,爲以後閱讀和寫彙編代碼打基礎。 注意特別提及的那片參考文獻,講解了兩種彙編語言格式的不同之處。下面是這篇引文的小總結。 AT&T格式語法採用了一種獨特的內聯彙編技巧

原创 MIT 6.828 Lab1 exercise6

exercise 1.6 要求:在BIOS啓動boot loader和進入內核時,地址0x00100000處的連續8個字有什麼不同?爲什麼?回答這個問題不需要運行qemu,請思考這個問題。 (gdb) x/8x 0x10000