嘿,有些人正在使用nasm虚拟机等编写一个bootloader。无论如何,我使用vram来显示由键s,d,f,g触发的背景和字体颜色变化。 S用背景颜色切换字体的颜色。我知道如何做到这一点,但我不知道正确的方法。 vram设置为2个字节,第一个是字符,第二个是其属性。这些是背景然后是字符颜色。所以我需要采取这些并切换它们。这将切换字体颜色和背景颜色。我如何用代码实际做到这一点?
; s key
;///////////////////////////////////////////////////////////
.s:
mov bx,0xb800 ;direct video memory access 0xB8000
mov es,bx
xor bx,bx ;es:bx : 0xb8000
mov dh,0 ;row from 0 to 24
mov dl,0 ;col from 0 to 79
.loops1:
inc bx
mov byte [es:bx], 0ah ;attribute
inc bx
inc dl
cmp dl,80 ;col 0-79
jne .loops1
mov dl,0
inc dh
cmp dh,25 ;row 0-24
jne .loops1
jmp .kbin
第二个问题: 我使用这个循环来检测键,我怎么能把这些键改为Ctrl +键。
.kbin:
mov ah,10h ;Read from keyboard
;ah scan code, al ascii char
int 16h
cmp al, 53h ;uppercase s
je .s
cmp al, 73h ;lowercase s
je .s
cmp al, 44h ;uppercase d
je .d
cmp al, 64h ;lowercase d
je .d
cmp al, 46h ;uppercase f
je .f
cmp al, 66h ;lowercase f
je .f
cmp al, 47h ;uppercase g
je .g
cmp al, 67h ;lowercase g
je .g
jmp .kbin
谢谢。
答案 0 :(得分:1)
这应该这样做:
mov ax, 0xb800
mov es, ax
mov ds, ax ; both pointing at vram area
xor si, si
xor di, di
mov cx, num_chars
loop1:
movsw // reads a word from ds:si into ax
rol ax, 8 // switches the bytes in ax
stosw // puts the word back
dec cx
jne loop1
对于第二个,使用函数2 for int 16h。
是的,并获得一些文档。也许你会喜欢Tech:http://www.intel-assembler.it/portale/5/A-desktop-assembler-utility-program/A-desktop-assembler-utility-program.asp