汇编语言,在显存上写入字符 用不通的颜色显示

来源:百度知道 编辑:UC知道 时间:2024/05/13 00:33:48
stack segment
dw 0
stack ends
code segment
start:mov ax,date
mov ds,ax
mov bx,0
mov ax,stack
mov ss,ax
mov sp,2
mov ax,0B800H
mov es,ax
mov si,721H
mov cx,3
s:push cx
mov di,16
mov dl,ds:[di]
mov cx,16
s0:mov al,ds:[bx]
mov es:[si],al
inc si
mov es:[si],dl
inc bx
inc si
loop s0
inc di
mov bx,0
add si,128
pop cx
loop s
mov ax,4C00H
int 21H

code ends
end start

请高手指点 我出现的为什么都是乱码,请指出我错误的原因谢谢,
assume cs:code,ds:date,ss:stack

错在mov si,721H,显存地址一定要用偶数,721H是奇数地址,改成720H或722H,肯定好使。

显存偏移地址,偶数地址存放字符,奇数地址存放字符属性;反之,乱码。

data segment
string db 'Welcome to masm!'
count equ $-string
color db 02h,24h,71h
data ends

code segment
assume cs:code,ds:data
start:
MOV AX,3
INT 10H
mov ax,data
mov ds,ax
mov ax,0B800H
mov es,ax
xor di,di
lea bx,color
mov cx,3
s:push cx
lea si,string
mov cx,count
save: mov ah,[bx]
lodsb
stosw
loop save
inc bx
add di,128
pop cx
loop s
MOV AH,0
INT 16H
mov ax,4C00H
int 21H
code ends
end start

错误的原因:堆栈太浅;寻址出错,...。