|
主题 : : 实验十(1)显示字符串 [待解决] |
回复[ 7次 ]
点击[ 521次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2011-05-01 16:10 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-03-25 00:20 |
assume cs:code
data segment
db 'welcome to masm!',0
data ends
code segment
start:mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:mov ax,0b800h
mov es,ax
mov bl,cl ;颜色值存到bl寄存器
mov al,160
mul dh ;定位行
add dl,dl ;列
add al,dl ;ax=行(ax)+列(dl)
mov di,ax
s:mov cl,[si] ;读入数据段字符
mov ch,0
jcxz ok ;字符是0就返回
mov es:[di],cl ;写入显示缓冲区
and es:[di+1],bl ;设置字符颜色
inc si
add di,2
jmp s
ok:ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2011-05-03 15:22 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-21 15:07 |
上面那位兄弟 建议你改成s:mov cl,[si] ;读入数据段字符
mov ch,0
jcxz ok ;字符是0就返回
mov es:[di],cl ;写入显示缓冲区
mov es:[di+1],bl ;设置字符颜色 (这行最好改成这样,只有mov指令才能够显示真正的颜色,可以去试试)
inc si
add di,2
jmp s | | |
|
|
|
|
[第2楼]
[ 回复时间:2011-05-03 15:51 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-21 15:07 |
add dl,dl ;列
add al,dl ;ax=行(ax)+列(dl)
mov di,ax
这个地方不是很懂 请教一下 前面说到是第三列 为什么还有 add dl,dl | | |
|
|
|
|
[第3楼]
[ 回复时间:2011-05-12 11:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2011-04-09 19:34 |
错了很多。
我也想问一下这个问题。下面是我的代码,我就不知道为什么不能显示。
assume cs:code
data segment
db 'Welcome to masm!',0
data ends
code segment
main:
mov dh,1 ;dh装行号(范围:1-25)
mov dl,1 ;dl装列号(范围:1-80)[注:每超过80等于行号自动加1]
mov cl,41h ;cl装颜色属性(41h为红底蓝色属性)
mov ax,data
mov ds,ax
mov si,0 ;si装数据段的偏移地址
call show_str
mov ax,4c00h
int 21h ;程序返回
show_str: ;打印字符串
;计算出要写入的显存初始地址
mov bx,0b800h
mov es,bx
dec dh ;行号在显存中是从0开始,所以减1
mov al,160 ;al装乘数
mul dh
mov bx,ax ;bx用来存放显存偏移地址
dec dl ;列号在显存中是从0开始,所以减1
mov al,2
mul dl
sub ax,2 ;列号在显存中是以下标0开始的,又因为是偶地址存放字符,基地址存放颜色属性,所以减2
add bx,ax
mov al,cl ;al装颜色属性
;将数据段中的字符串输出到显存中
for:
mov ch,0
mov cl,[si]
jcxz return ;判断数据段中的数据是否为0,是0则进行跳转
mov es:[bx],cl ;偶地址存放字符
inc si
mov es:[bx+1],al ;基地址存放颜色属性
add bx,2
jmp short for
return:
ret
code ends
end main | | |
|
|
|
|
[第4楼]
[ 回复时间:2011-05-12 11:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2011-04-09 19:34 |
|
|
|
|
|
[第5楼]
[ 回复时间:2011-05-20 16:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-04-24 22:44 |
回复:[第3楼]
------------------
你把行号改成7以上试试 | | |
|
|
|
|
[第6楼]
[ 回复时间:2011-05-26 09:00 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:0
注册日期:2011-05-26 08:59 |
|
|
|
|
|
[第7楼]
[ 回复时间:2011-05-27 09:56 ]
[引用]
[回复]
[ top ] | |
荣誉值:8
信誉值:0
注册日期:2010-11-07 17:01 |
为什么 一定要add dl,dl 这句啊
答:每个字符占有2列,一个存字符,另一个存颜色值,所以必须加上这句 | | |