2010-10-13 82 views
1

嘿一些即時編寫使用NASM的引導程序虛擬機等。無論如何,即時通訊使用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 

謝謝。

回答

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 INT 16H。

是的,並得到一些文件。也許你會喜歡Tech:http://www.intel-assembler.it/portale/5/A-desktop-assembler-utility-program/A-desktop-assembler-utility-program.asp