【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

 

文件生成过程

 程序执行流程图

 

posted @ 2019-10-06 11:04  闪客sun  阅读(804)  评论(0编辑  收藏  举报