textmode.asm

来自「ucos在x86上的移植代码。吐血推荐啊」· 汇编 代码 · 共 56 行

ASM
56
字号
; 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 + =
减小字号Ctrl + -
显示快捷键?