有一些問題:
有沒有這樣的指令爲sdl
。
要複製數據,您應該使用rep movsw
而不是repnz movsw
。
您需要在rep movsw
之前設置cx
。
您還需要定義每個字符的顏色,在視頻內存的每個其他字節中,或者在要複製的數據中使用rep movsw
,或者在複製循環內部。下面的代碼說明了兩個選項:
編輯:添加的代碼。
[bits 16]
[org 0x7c00]
mov ax,3
int 10h
push word 0xb800
pop es
push cs ; just in case, for bootloader code,
pop ds ; needed for movsb
xor di,di
mov si,msg
mov cx,msg_length_in_bytes
one_color_copy_to_vram_loop:
movsb
mov al,0x0f
stosb
loop one_color_copy_to_vram_loop
mov si,multicolor_msg
mov cx,multicolor_msg_length
rep movsw
jmp $
msg db 'Hello'
msg_length_in_bytes equ $-msg
multicolor_msg db ' ',0
db 'H',1
db 'e',2
db 'l',3
db 'l',4
db 'o',5
db ' ',0
db 'w',6
db 'i',7
db 't',8
db 'h',9
db ' ',0
db 'c',10
db 'o',11
db 'l',12
db 'o',13
db 'r',14
db '!',15
multicolor_msg_length equ ($-multicolor_msg)/2
來源
2013-03-17 17:02:25
nrz
非常感謝。但是,如果我不知道它的長度,是否有一些問題可以幫助我打印一個字符串? (不使用'cmp'和'jmp'命令)? – Vanzef 2013-03-18 15:51:59
@Vanzef對不起,你能更具體嗎?你的意思是什麼?你想打印ASCIIZ字符串(零端ASCII字符串)還是別的?如果我的問題解決了您的原始問題,請將其標記爲已接受的答案(綠色標記變爲可見),然後發佈有關當前問題未涵蓋的問題的新問題。 – nrz 2013-03-18 16:58:37