这里有个问题 为什么要用cl放字符的属性呢 如果用cl放字符 ch放属性 直接把cx放入显存不是更好吗 所以我就擅自修改了参数 用cl放了字符 程序如下
assume cs:code,ds:data
data segment
db 'Welcome to masm!',0
data ends
code segment
start:
mov dh,8 ;行号 0~24
mov dl,3 ;列号 0~79
mov ch,2 ;颜色
mov ax,data ;ds:si指向字符串首地址
mov ds,ax
mov si,0
call showstr
mov ax,4c00h
int 21h
;********子程序开始***********
showstr:
mov ah,dh
mov al,160 ;一行160个Byte
mul ah
add dl,dl
mov dh,0
add ax,dx
mov bx,ax ;bx放第一个字符的偏移量
mov ax,0b800h
mov es,ax
mov di,0
mov dh,ch
s:
mov ch,dh
mov cl,[si]
mov es:[bx][di],cx ;写入显存
inc si
add di,2
mov ch,0
jcxz ok
jmp s
ok:ret
;**********子程序结束**********
code ends
end start
- [huangbeidu] 哦 原来这样 07/05 22:27
- [游客] h回答正确。 07/02 08:18
- [游客] 每一个command窗口都是一个独立的模拟dos环境的,所以,关闭窗口后,这个环境就消失了,你在这个 07/02 08:12
- [huangbeidu] 有点不明白为什么关闭窗口后 再运行除法溢出的程序 还是老样子 怎么让它常驻内存? 07/02 00:15
- [huangbeidu] 是 SF应该是0的 06/05 02:20
- [tomato] Right! 05/31 18:19
- [tomato] 第一题的最后一条指令的答案写错了。建议上机验证一下。 05/31 18:18
- [huangbeidu] 这个是不算精简版的精简版了 代码是没有少多少 就是嫌以前的那个程序把数据段改成那样 在实际的操作中恐 05/14 17:29
- [游客] 可以参考前面的那个不会溢出的除法处理方式来想想这个程序怎么去支持dx为非0的数据显示,让显示的数据超 04/29 10:31
- [游客] 绝对有帮助。 04/28 11:47
[ huangbeidu 发表于 2009-04-21 17:24 ]
没有用到子程序的标准框架 得改改
[ huangbeidu 发表于 2009-04-21 17:40 ]
加个栈段
前push ax
push bx
push cx
push dx
push di
push si
push es
后pop es
pop si
pop di
pop dx
pop cx
pop bx
pop ax
ok:ret
好长啊 寄存器这么多 有没有可以少用点的办法?
[ mess 发表于 2009-04-22 12:35 ]
可以自己编译自己的文章加进去~
[ younggay 发表于 2009-04-24 11:36 ]
这里有个问题 为什么要用cl放字符的属性呢 如果用cl放字符 ch放属性 直接把cx放入显存不是更好吗 所以我就擅自修改了参数 用cl放了字符 程序如下
======================
想法很好,完全可以的。