ACC 发表于 2012-11-17 08:35:22

汇编实验中的一个有趣的问题

实验是IBM-PC 汇编实验2.1
用表格显示ASCII
程序在执行的时候理想中的显示形式



返回dos后字符不能对齐





多次执行同一程序后第一次执行的程序的显示区域字符逐渐对齐
但最后一次的还是不会对齐
有没有大神知道其中的原理,求解啊
下面是源代码:

code segment para 'code'
assume cs:code
       
main proc far
        mov di,15                       
        mov dl,10h      ;设置初始字符
start:                                  ;        设置内层循环,显示16个字符然后换行
        mov cx,16
a0:
        mov ah,02h
        int 21h
        push dx
        mov dl,0
        mov ah,02h
        int 21h
        pop dx
        inc dl
        loop a0
        push dx
       
        mov dl,0ah
        mov ah,02h
        int 21h
        pop dx
       
        dec di
        cmp di,0
        ja start
       
        ;mov ah,01h    ;调试时使用,使程序停留,否则返回dos后程序显示区域会变化
        ;int 21h
       
        mov ax,4c00h
        int 21h
        main endp
code ends
end main
       

ACC 发表于 2012-11-19 14:37:00

不要沉啊,求解啊~~

s0512 发表于 2012-11-19 21:13:38

你好,调试了好久,终于看出了点小问题,你只换了行,没有加回车!回车的ASCII码是D,请再试试看!!

s0512 发表于 2012-11-19 21:19:34

你的源码在我这显示是这个样子的

加入回车后是:

push dx
      mov dl,0dh;<-----
      mov ah,02h;<-----
      int 21h      ;<-----
      mov dl,0ah
      mov ah,02h
      int 21h
很希望和你多交流!!
      

s0512 发表于 2012-11-19 21:34:10

code segment para 'code'
assume cs:code

main proc far
mov di,15
mov dl,10h ;设置初始字符
start: ; 设置内层循环,显示16个字符然后换行
mov cx,16
a0:
mov ah,02h
int 21h
push dx
mov dl,0
mov ah,02h
int 21h
pop dx
inc dl
loop a0

push dx
mov dl,0dh
mov ah,02h
int 21h
mov dl,0ah
mov ah,02h
int 21h

pop dx

dec di
cmp di,0
ja start

mov ah,01h ;调试时使用,使程序停留,否则返回dos后程序显示区域会变化
int 21h

mov ax,4c00h
int 21h
main endp
code ends
end main

刚忘了发DEBUG的图了~嘿嘿!!

ACC 发表于 2012-11-19 21:58:19

s0512 发表于 2012-11-19 21:34 static/image/common/back.gif
刚忘了发DEBUG的图了~嘿嘿!!

在debug中运行时是没有问题的,第一张图是没有错误的,然后程序返回dos后,显示的内容就不能对齐了,不知道原理是什么

s0512 发表于 2012-11-19 22:50:17

ACC 发表于 2012-11-19 21:58 static/image/common/back.gif
在debug中运行时是没有问题的,第一张图是没有错误的,然后程序返回dos后,显示的内容就不能对齐了,不知 ...

如果你的源码和贴出来的一样,那可能就会有问题。。。你的mov dl,0ah是换行,目视你用的是WIN7。XP下定会和我的图一样,没回车!!所以,差别非常大

ACC 发表于 2012-11-19 23:40:34

s0512 发表于 2012-11-19 22:50 static/image/common/back.gif
如果你的源码和贴出来的一样,那可能就会有问题。。。你的mov dl,0ah是换行,目视你用的是WIN7。XP下定会 ...

其实问题所在是debug下显示和dos下显示的区别~~

s0512 发表于 2012-11-20 00:15:28

ACC 发表于 2012-11-19 23:40 static/image/common/back.gif
其实问题所在是debug下显示和dos下显示的区别~~

我调试用的是EMU8086....最后用的是DEBUG

ACC 发表于 2012-11-20 06:37:22

s0512 发表于 2012-11-20 00:15 static/image/common/back.gif
我调试用的是EMU8086....最后用的是DEBUG

是软件吗?没有用过:lol,生成exe后运行,不用返回吗?

s0512 发表于 2012-11-20 08:06:19

ACC 发表于 2012-11-20 06:37 static/image/common/back.gif
是软件吗?没有用过,生成exe后运行,不用返回吗?

是软件!学习汇编必备神器!!用了就知道

s0512 发表于 2012-11-20 08:10:25

这个问题解决了吗?
是如何解决的啊?{:7_153:}

ACC 发表于 2012-11-20 11:20:17

s0512 发表于 2012-11-20 08:10 static/image/common/back.gif
这个问题解决了吗?
是如何解决的啊?

代码实木有问题滴,只不过我想知道为什么在程序返回dos时,显示区字符大小以及位置会变化~~这个问题是很有意思的

s0512 发表于 2012-11-20 11:24:06

ACC 发表于 2012-11-20 11:20 static/image/common/back.gif
代码实木有问题滴,只不过我想知道为什么在程序返回dos时,显示区字符大小以及位置会变化~~这个问题是很有 ...

你把QQ发站内信息给我。。。交流下
页: [1]
查看完整版本: 汇编实验中的一个有趣的问题