zoukankan      html  css  js  c++  java
  • 【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
    

    文件生成过程

     程序执行流程图

  • 相关阅读:
    jquery 选择器总结
    jQuery 添加元素和删除元素
    jQuery 操作
    jquery 事件
    jQuery对象与DOM对象
    jquery 在页面中三种写法
    CSS3制作立体导航
    开发常用技巧之css字体编码
    c语言快速入门3
    c语言快速入门2
  • 原文地址:https://www.cnblogs.com/flashsun/p/11626754.html
Copyright © 2011-2022 走看看