diff --git a/20_day/bootpack.h b/20_day/bootpack.h index bea8757..e16df46 100644 --- a/20_day/bootpack.h +++ b/20_day/bootpack.h @@ -30,6 +30,7 @@ void asm_inthandler27(void); void asm_inthandler2c(void); unsigned int memtest_sub(unsigned int start, unsigned int end); void farjmp(int eip, int cs); +void asm_cons_putchar(void); /* fifo.c */ struct FIFO32 { diff --git a/20_day/console.c b/20_day/console.c index 3eec55c..9b966ac 100644 --- a/20_day/console.c +++ b/20_day/console.c @@ -16,6 +16,7 @@ void console_task(struct SHEET *sheet, unsigned int memtotal) cons.cur_x = 8; cons.cur_y = 28; cons.cur_c = -1; + *((int *) 0x0fec) = (int) &cons; fifo32_init(&task->fifo, 128, fifobuf, task); timer = timer_alloc(); diff --git a/20_day/hlt.nas b/20_day/hlt.nas index 487d545..3b523c2 100644 --- a/20_day/hlt.nas +++ b/20_day/hlt.nas @@ -1,5 +1,6 @@ [BITS 32] - CLI + MOV AL,'A' + CALL 0xbe3 fin: HLT JMP fin \ No newline at end of file diff --git a/20_day/naskfunc.nas b/20_day/naskfunc.nas index 6901d26..bc8e52f 100644 --- a/20_day/naskfunc.nas +++ b/20_day/naskfunc.nas @@ -17,8 +17,10 @@ GLOBAL _asm_inthandler27, _asm_inthandler2c GLOBAL _memtest_sub GLOBAL _farjmp + GLOBAL _asm_cons_putchar EXTERN _inthandler20, _inthandler21 EXTERN _inthandler27, _inthandler2c + EXTERN _cons_putchar [SECTION .text] @@ -209,4 +211,13 @@ mts_fin: _farjmp: ; void farjmp(int eip, int cs); JMP FAR [ESP+4] ; eip, cs - RET \ No newline at end of file + RET + +_asm_cons_putchar: + PUSH 1 + AND EAX,0xff ; 将AH和EAX的高位置0,将EAX置为已存入字符编码的状态 + PUSH EAX + PUSH DWORD [0x0fec] ; 读取内存并PUSH该值 + CALL _cons_putchar + ADD ESP,12 ; 将栈中的数据丢弃 + RET