📄 textmode.asm
字号:
; textmode.asm :
; 文本模式操作函数, 工作于32位保护模式下.
;
; Copyright(c) 2007, Alex P.Wonder
; phoenixwonder@gmail.com
;
[SECTION .text]
[BITS 32]
;==================================================================
; C格 式: void os_putchar(char chr, int x, int y, int color);
; 说 明:
; 80x25字符模式屏幕写点函数, 采用直接写视频内存缓冲区(0xB8000)
; 方式实现.
; 参 数:
;
; 返回值:
;
;==================================================================
global os_putchar
os_putchar:
push ebp
mov ebp, esp
sub esp, 4 ;offset
push eax
push ebx
; linear_offset=(y*80 + x)*2 => (y*(64 + 16) + x)*2 => y<<7 + y<<5 + x<<1
xor eax, eax
xor ebx, ebx
mov ebx, [ebp + 16] ;y
mov eax, ebx ; y->(eax)
shl eax, 7
mov [ebp - 4], eax
shr eax, 2
add [ebp - 4], eax ;y<<7 + y<<5
xor eax, eax
mov eax, [ebp + 12] ; x->(eax)
shl eax, 1
add [ebp - 4], eax
mov al, [ebp + 8] ;chr
mov ah, [ebp + 20] ;color
mov ebx, [ebp - 4]
mov [gs:ebx], ax
pop ebx
pop eax
leave
ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -