|
主题 : : 实验一我写完了,感觉没什么问题了,可是显示结果是奇怪的笑脸! [待解决] |
回复[ 3次 ]
点击[ 401次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-06-13 21:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-12-21 10:26 |
下面是我的程序,希望大家可以帮我简单的分析一下:
assume cs:code,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
db 16 dup (0)
stack ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str:push dx
push ax
push bx
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
dec bx
******在这之上是相关寄存器及偏移地址的设置,实现显示功能的主要在下面一段,可是显示出来的却是最下面的一串奇怪字符,我用debug调试跟踪在数据段及各步的寄存器都没看出问题,不知道是我电脑的事还是程序写的不合理!****
mov dh,cl
mov cx,0
s: mov cl,ds:[si]
jcxz ok
mov es:[bx],cl
mov es:[bx+1],dh
inc si
add bx,2
jmp short s
ok:pop bx
pop ax
pop dx
ret
code ends
end start
***************************************下面是xp系统的cmd窗口运行的结果*************
D:\MASM5~1.0>p101
D:\MASM5~1.0>
☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻☻ | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-06-14 16:32 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
mov ax,0b800h
mov es,ax
mov al,160
mul dh
mov bx,ax
mov al,2
mul dl
add bx,ax
dec bx
----------------
去掉dec bx看看。
注意字符颜色和asscii码在显存是是如何存放的。 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-06-14 16:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:3
注册日期:2008-12-21 10:26 |
呀!,多谢高人指点:),我总算发现问题所在了,或都多加一条dec或者去掉那条dec都可以,我是将列位置定义错位了!,看来我还得多加细心才是:) | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-07-22 19:02 ]
[引用]
[回复]
[ top ] | |
荣誉值:1
信誉值:8
注册日期:2009-06-27 18:30 |
你那算什么,我的出现了两行笑脸:
assume cs:code,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start: mov dh,8
mov dl,3
mov cl,2
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,16
mov si,0
call show_str
mov ax,4c00h
int 21h
show_str: push cx
mov di,0
mov bx,0
mov ax,0b800h
mov es,ax
mov al,80
mul dh
mov bx,ax
mov dh,0
add bx,dx
s: mov ch,0
mov cl,ds:[si]
jcxz ok
pop cx
mov al,ds:[si]
mov ah,cl
mov es:[bx+di],ax
inc si
add di,2
push cx
jmp short s
ok:ret
code ends
end start | | |
|