|
主题 : : 实验10第一个子程序,可以正常退出,但不能按要求显示字符,始终不解,望高手指点 [已解决] |
回复[ 6次 ]
点击[ 701次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2008-05-24 23:11 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
程序如下,debug后-d bd06:0000,显示Welcome to masm!已经拷贝过去,但不知道为什么就是不显示,各位高手,有空的话帮忙看看程序吧,谢谢啦~
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 ;IP=0011H被压入栈
mov ax,4c00h
int 21h
show_str:
mov ax,0b800h
mov di,0
mov bl,cl ;bl=02
mov ch,0
mov cl,dh ;cx=0008
s1:
add ax,160
loop s1 ;ax=bd00,cx=0
mov cl,dl
s2:
add ax,2
loop s2 ;ax=bd06,cx=0
mov es,ax ;es=bd06
s3:
mov ah,bl
mov al,[di]
mov es:[si],ax
mov cl,[di]
jcxz ok
inc di
add si,2
jmp short s3
ok:
ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2008-05-24 23:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
代码中的注释是我调试的时候测试程序运行是否和预期一致,和程序自身无关~ | | |
|
|
|
|
[第2楼]
[ 回复时间:2008-05-25 11:01 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
这张学的有点快,算地址还是用到了以前的循环,而不是本章的mul指令,见笑了。 | | |
|
|
|
|
[第3楼]
[ 回复时间:2008-05-25 23:21 ]
[引用]
[回复]
[ top ] | |
荣誉值:10
信誉值:0
注册日期:2008-05-25 23:08 |
把s1 s2 中的add ax,.. 改成 add si,..
建议再看看 段地址:偏移地址 的计算方法
显示缓冲区分8页,默认显示的是第0页,你现在的程序将数据写到了其他页上,
如果你能显示其他页的数据的话,也能看到正确的结果 | | |
|
|
|
|
[第4楼]
[ 回复时间:2008-05-26 15:09 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
|
|
|
|
|
[第5楼]
[ 回复时间:2008-05-26 15:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
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 di,0
mov al,160
mul dh
mov si,ax
mov al,2
mul dl
add si,ax
s1:
mov ah,cl
mov al,[di]
mov es:[si],ax
mov cl,[di]
jcxz ok
mov cl,2
inc di
add si,2
jmp short s1
ok:
ret
code ends
end start
改好了,可以正确地在指定位置按指定颜色显示字符串了。
反思:基础不扎实,段地址和偏移地址自以为掌握了,在实际编程时还是出现了问题,这个教训很深刻啊。 | | |
|
|
|
|
[第6楼]
[ 回复时间:2008-06-05 15:37 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:16
注册日期:2008-03-17 20:21 |
此贴由 贴主 于 [ 2008-06-05 15:37 ] 结贴。 结贴原因:问题已解决 | | |
|