org 0x7c00 ; 引导扇区加载到0x7c00地址
section .data
; 显存属性设置(黑底白字)
attr db 0x07
section .text
; 初始化段寄存器
mov ax, cs
mov ds, ax
mov ax, 0xb800 ; 显存段地址0xB8000(ES:0)
mov es, ax
; 读取键盘输入
read_char:
mov ah, 0 ; BIOS INT 16H功能0:等待键盘输入
int 16h ; 读取字符到AL(ASCII码)
; 检查是否为数字字符
cmp al, '0'
jb not_digit
cmp al, '9'
ja not_digit
; 转换为数值(可选,此处直接显示字符)
; sub al, '0' ; 若需数值运算可取消注释
; 显示字符到屏幕中央
mov di, 12*160 + 32*2 ; 12行*80列=960字节,中央位置偏移512字节
mov [es:di], al ; 低字节存字符,高字节默认0
mov byte [es:di+1], attr ; 设置显示属性
jmp $
not_digit:
; 显示错误提示(非数字字符)
mov di, 0
mov cx, 10
print_zero:
mov byte [es:di], '0' - 1
add di, 2
loop print_zero
times 510-($-$$) db 0 ; 填充剩余扇区
dw 0xaa55 ; 引导扇区签名