【发布时间】:2017-05-28 19:43:23
【问题描述】:
所以我开始学习汇编,并正在使用 FASM 编写一个简单的操作系统。我有一个带有灰色顶栏和光标的蓝屏,但无法让文本出现在一行上。在第一行我想让它说“文件系统”,然后在其他行我想要其他东西。我把代码放在这里:
mov ax, 9ch
mov ss, ax
mov sp, 4096d
mov ax, 7c0h
mov ds, ax
;----------------
;this sets blue to background
mov ah, 09h
mov cx, 1000h
mov al, 20h
mov bl, 17h
int 10h
;end of blue
;start of gray top
mov ah, 09h
mov cx, 80d
mov al, 20h
mov bl, 87h
int 10h
;end of gray
;top bar
;end of top bar
;define mouse
mov ah, 01h
mov cx, 07h
int 10h
mov bl, 5h
mov cl, 5h
_mouser:
mov ah, 02h
mov dl, bl
mov dh, cl
int 10h
mov ah, 00h
int 16h
cmp al, 77h
je _up
cmp al, 73h
je _down
cmp al, 61h
je _left
cmp al, 64h
je _right
cmp al, 20h
je _click
jmp _mouser
_click:
mov ah, 0eh
mov al, 0b2h
int 10h
jmp _mouser
_up:
cmp cl, 0h
je _mouser
sub cl, 1h
jmp _mouser
_down:
cmp cl, 24d
je _mouser
add cl, 1h
jmp _mouser
_left:
cmp bl, 0h
je _mouser
sub bl, 1h
jmp _mouser
_right:
cmp bl, 79d
je _mouser
add bl, 1h
jmp _mouser
;----------------
times 510-($-$$) db 0
dw 0xAA55
我试过了
mov ah, eoh
mov al, 'F'
int 10h
问题是只能使单个字符而不是字符串。
【问题讨论】:
-
mov ah, 0eh; mov al, 'F'; int 10h应该会更好。 -
是的,我知道这是一个字符,但我需要创建一个字符串
-
花点时间阅读 wiki osdev.org
-
在循环中重复所有字符以组成一个字符串。
-
创建一个操作系统,但使用 BIOS 进行文本模式输出...如果这不是学习的教育努力,那将是完全错误的。再说一次,至少检查 BIOS 文档以查看可用的服务是预期的,并且首先学习 x86 汇编也有帮助。并且以经典的 VGA 文本模式直接写入 VRAM 非常简单,所以你也可以检查一下。
标签: assembly operating-system fasm