【30天自制操作系统】day04:C语言与目前执行流程图
用 C 语言直接写入内存
原来依靠汇编
void io_hlt(void); void write_mem8(int addr, int data); void HariMain(void){ int i; for (i = 0xa0000; i <= 0xaffff; i++) { write_mem8(i, 13); /* MOV BYTE [i],15 */ } for (;;) { io_hlt(); } }
; naskfunc ; TAB=4 [FORMAT "WCOFF"] ; オブジェクトファイルを作るモード [INSTRSET "i486p"] ; 486の命令まで使いたいという記述 [BITS 32] ; 32ビットモード用の機械語を作らせる [FILE "naskfunc.nas"] ; ソースファイル名情報 GLOBAL _io_hlt,_write_mem8 [SECTION .text] _io_hlt: ; void io_hlt(void); HLT RET _write_mem8: ; void write_mem8(int addr, int data); MOV ECX,[ESP+4] ; [ESP+4]にaddrが入っているのでそれをECXに読み込む MOV AL,[ESP+8] ; [ESP+8]にdataが入っているのでそれをALに読み込む MOV [ECX],AL RET
现在直接 C
void io_hlt(void); void write_mem8(int addr, int data); void HariMain(void) { int i; char *p; for (i = 0xa0000; i <= 0xaffff; i++) { p = (char*) i; *p = 14; } for (;;) { io_hlt(); } }
栈的汇编
PUSHFD POP EAX = MOV EAX,EFLAGS PUSH EAX POPFD = MOV EFLAGS,EAX
文件生成过程
程序执行流程图
公众号 - 低并发编程