在屏幕上打印字符串时出现奇怪问题
以下程序的功能是:在屏幕的前3行显示不同颜色的字符串'welcome to masm!'
第一行显示红底高亮绿字
第二行显示红底闪烁绿字
第三行显示红底高亮闪烁绿字
检查好多遍,没发现错误
在DEBUG中调试的时候,发现显存中的值没有被我的程序改变,详情请看注释
assume cs:code,ds:data,ss:stack
code segment
mov ax,0b800H ;ES中存放显存地址
mov es,ax
mov si,0 ;si中存放列的偏移量
mov bp,0 ;bp中存放行的偏移量
mov ax,data
mov ds,ax
mov bx,0
mov ax,stack
mov ss,ax
mov sp,16
;以下将字符的颜色入栈
mov ax,11001010B ;红底高亮闪烁绿字
push ax
mov ax,11000010B ;红底闪烁绿字
push ax
mov ax,01001010B ;红底高亮绿字
push ax
mov dx,3 ;dx用于保存外层循环的cx的值
outer:
mov cx,16 ;循环inner块16次,每次读取data segment中的一个字符
pop ax ;将颜色出栈
mov ah,al ;将颜色设置到ah
inner:
mov al,[bx] ;al中存放字符的ASC码
mov word ptr es:[bp+si],ax ;将ax写入到显存,但显存中的值根本就没变化
inc bx ;自增bx
add si,2
loop inner
mov cx,dx ;读取dx
dec dx ;将dx自减
add bp,0a0H ;设置在显示器的下一行输出
loop outer
mov ax,4c00h
int 21h
code ends
data segment
db 'welcome to masm!'
data ends
stack segment
dw 0
stack ends
end