改动过的实验11
本帖最后由 cenjie88 于 2011-10-11 12:01 编辑assume cs:codesg
datasg segment
db "Beginner's ALL-purpose Synbolic Instructin Code.",0
datasg ends
codesg segment
begin:mov ax,datasg
mov ds,ax
mov si,0
call letterc
mov ax,4c00h
int 21h
letterc:push si
push ax
push di
mov ax,0b800h ;显存首地址
mov es,ax
s0:mov al,ds:
cmp al,0 ;cmp 判断索引地址是否为0
je s ;结果等于0则跳转
cmp al,41h ;cmp 判断字符是否小写(大写字母asscma对应16进制41-7a)
jb s1 ;小于对应字符进行跳转
cmp al,7ah ;cmp 字符是否是小写
ja s1 ;大于对应字符进行跳转
and al,11011111b
s1:mov ah,01110100b ;显示白底蓝字
mov es:330h,ax ;显存偏移地址
inc si ;指向下一个字符
add di,2 ;指向下一个显存地址
jmp short s0 ;跳转索引原字符
s: pop di
pop ax
pop si
ret
codesg ends
end begin
实验11并以白底蓝字显示出来
这个是可以正常显示,但显存偏移330H这里要是改成331、333、335奇数尾时就会显示错误。
关闭再打开就不能正常显示。请高手指点
本帖最后由 cenjie88 于 2011-10-11 12:02 编辑
请大虾指点
显存的奇数地址存放的是对应的属性哦~ 嗯,谢谢甲鱼老师。不过关闭再打开显示不正常应该和那个是不是叫什么dos来的有关吧。 我的代码如下:
assume cs:code,ds:data
data segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,0b878h
mov es,ax
mov si,0
mov di,0
call letterc
mov ax,4c00h
int 21h
letterc:
mov al,
cmp al,0
je exit
cmp al,'a'
jb s0
cmp al,'z'
ja s0
and al,11011111b
mov byte ptr ,al
s0:
;显示白底黑字
mov byte ptr es:,al
mov byte ptr es:1,01110000b
inc si
add di,2
jmp short letterc
exit:
ret
code ends
end start
页:
[1]