|
主题 : : 为什么实验九不能显示字符? [已解决] |
回复[ 7次 ]
点击[ 429次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-08-03 11:33 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-07-06 17:12 |
我在做这个实验的时候,发现一个问题,为什么偏移地址00——100中无法即时显示字符呢,我的程序代码如下:
assume cs:a,ds:b
b segment
db 'welcome to masm!'
b ends
a segment
start: mov ax,0b800h
mov ds,ax;将显示缓冲区段地址送入DS中
mov ax,b
mov es,ax;将数据地址送入ES中
mov bx,100h
mov di,0
mov bp,0
mov cx,16
s: mov al,es:[bp]
mov ah,02h
mov ds:[bx][di],ax
mov ah,24h
mov ds:[bx+0A0h][di],ax
mov ah,71h
mov ds:[bx+140h][di],ax
inc bp
add di,2
loop s
mov ax,4c00h
int 21h
a ends
end start
当我把BX的值设为100时,在显示器上为什么看不到任何东西?而把100换成大家算出的720H则可以正常执行。按照书上说的B800-009f对应显示器的第一行,为什么实际应用中却看不到东西呢,还有本人对于如何确定屏幕中间的偏移地址也还是有点不太明白。我是这样算的
一行占160个字节,那么屏幕中间位置为第12行,用160*12=1920(这个地方是不是应该用16进制的乘法呢)然后算出一行为0-159个字节单元,那么中间的位置应该是64?1920+64=1984,换算成16进制=7c0请各位老师指点一下,我的思路哪里出了问题了?谢谢! | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-08-03 15:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:31
信誉值:3
注册日期:2009-06-15 19:20 |
是执行完程序后把执行程序时候的第一行给顶上去了吧~ | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-08-04 08:35 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-07-06 17:12 |
|
|
|
|
|
[第3楼]
[ 回复时间:2009-08-04 10:44 ]
[引用]
[回复]
[ top ] | |
荣誉值:337
信誉值:0
注册日期:2008-01-01 17:48 |
哦,也许吧,谢谢提醒。
------------------
回复:"也许吧"-这个是说楼主已经明白并验证了呢,还是压根还不明白。这样解决问题可不要。
第一个问题,解决问题要注意用实验或其他方式验证结论。
第二问题:如何看程序的运行结果。你用的是debug下运行看结果吧,对于上面这个程序把数据直接显示到屏幕,也可以直接运行exe文件查看结果。
至于上面的算位置的公式不多说了,可以自己直接写显存的方式验证(自己独立努力想办法了才有可能发现一些小技巧,如果只是听人说了认识能多深刻呢,发现技巧的方法怎么学到呢)。
一行占160个字节
---------------
正确,当是记住一行能显示80个字符更合理,如果现实10个字符的字符串,只要(80-10)/2就知道在第几个字符位置显示了,然后再乘以2(这个2的原因是一个字符需要用一个字来存储),即公式为(80-10)/2*2。 | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-08-05 09:47 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-07-06 17:12 |
多谢mess老师的教导,不知道为什么我生成的EXE文件,在DEBUG下调试正常,但是直接运行的话,只是一闪就消失了。 | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-08-05 10:04 ]
[引用]
[回复]
[ top ] | |
荣誉值:169
信誉值:0
注册日期:2008-08-19 16:07 |
还有这种事,一般来说出现这种情况我要检查程序的返回语句是否正确了(mov ax,4c00h int 21h),因为debug调试的时候可能没有执行这句,而运行exe的手不能返回。然后没问题就看看运行环境是不是有问题。
楼主的代码我编译连接了,没有问题,exe运行正常,运行环境是第四章的运行环境和编译器。(运行/command,这个command和cmd是有区别的。) | | |
|
|
|
|
[第6楼]
[ 回复时间:2009-08-20 10:45 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-07-06 17:12 |
|
|
|
|
|
[第7楼]
[ 回复时间:2009-08-24 11:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:2
注册日期:2009-07-06 17:12 |
此贴由 贴主 于 [ 2009-08-24 11:55 ] 结贴。 结贴原因:问题已解决 | | |