xx6625303 发表于 2015-2-3 01:11:50

cmd下运行exe和用debug载入exe后,两种方式下,显示的结果不一样,求指教,求帮助

代码如下:assume ds:data,cs:code
data segment
db 'welcome to masm!'
db 02h,24h,71h   
data ends
code segment
start:mov ax,data
   mov ds,ax
   mov ax,0b800h
   mov es,ax
   
   mov si,0
   mov bx,0
   mov di,0
   mov cx,16
   s1:mov al,
   mov es:720h,al
   mov ah,10h
   mov es:721h,ah
   inc bx
   add di,2
   loop s1
   
   
   mov ax,4c00h
   int 21h
code ends
end start       这是王爽老师那个第九个实验,显示welcome to masm!这个字符串那个实验,我本来是打算用3次循环,每一次循环处理一行字符串,这是处理第一行的时候的情况,我写好这个后,编译连接,然后用cmd运行,可以显示出 welcome to masm!,后来我用debug载入一步一步运行的时候,就不对,首先数据传送我就发现不对,然后我直接跳到结果,结果是字符串没显示完整。

xx6625303 发表于 2015-2-3 01:13:47

然后后来我想了好久,没想到头绪,我就把全部代码都写完,把第二行和第三行也处理了,但是这次,不管是cmd还是debug最后结果都不显示字符串了,最后代码如下:
assume ds:data,cs:code

data segment
        db 'welcome to masm!'
        db 02h,24h,71h   
data ends

code segment

start:mov ax,data
          mov ds,ax
          mov ax,0b800h
          mov es,ax
          
          mov si,0
          mov bx,0
          mov di,0
          mov cx,16
   s1:mov al,
          mov es:720h,al
          mov ah,10h
          mov es:721h,ah
          inc bx
          add di,2
          loop s1
          
          
          mov bx,0
          mov di,0
          add si,1
          mov cx,16
   s2:mov al,
      mov es:7c0h,al
          mov ah,10h
          mov es:7c1h,ah
          inc bx
          add si,2
          loop s2
          
          mov bx,0
          mov di,0
          add si,1
          mov cx,16
   s3:mov al,
      mov es:860h,al
          mov ah,10h
          mov es:861h,ah
          inc bx
          add si,2
          loop s3
       
       
          
          
          mov ax,4c00h
          int 21h

code ends
end start

傲天 发表于 2015-2-3 10:02:38

这是因为8086的中断机制,代码没错,但单步运行的时候,就会有不同的结果

xx6625303 发表于 2015-2-3 14:07:52

傲天 发表于 2015-2-3 10:02
这是因为8086的中断机制,代码没错,但单步运行的时候,就会有不同的结果

那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

小靚同学Leon 发表于 2015-2-4 10:45:52

如果是代码的话,建议使用代码格式发,论坛上面有说明,这样方便别人给你解答

傲天 发表于 2015-2-4 12:41:27

xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

b800是显存,随着你输入,换行,显存中的数据是在不停变化的,你可以先CLS(清屏),再运行下看看,单步运行的话,经常会看到你的数据会变成A.X.=.B.8.0.0这类数据,正是你屏幕上显示的数据。

傲天 发表于 2015-2-4 13:13:40

xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

我把你的代码试了下,可以显示,但只显示1行绿色的welcome to masm!,下面两个循环的代码不应该是add si,1因为你的SI内已经有数据了,然后再算一下你的偏移地址是否正确,你要取的是02,24,71,,代码没错,你再仔细算下数据就行了

傲天 发表于 2015-2-4 13:23:41

xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

试了半天,你add si,2错了,应该是di,si是属性,从第二段代码就错了,改成di就正确显示了,

傲天 发表于 2015-2-4 13:25:23

xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

   s1:mov al,
          mov es:720h,al
          mov ah,10h
          mov es:721h,ah
          inc bx
          add di,2
          loop s1
         
         
          mov bx,0
          mov di,0
          add si,1
          mov cx,16
   s2:mov al,
      mov es:7c0h,al
          mov ah,10h
          mov es:7c1h,ah
          inc bx
          add si,2
          loop s2
上面是你源码的一部分,错误代码给你标出来了,你仔细看下

xx6625303 发表于 2015-2-4 18:32:47

傲天 发表于 2015-2-4 13:25
s1:mov al,
          mov es:720h,al
          mov ah,10h


谢谢,后来我也看到了,真的是太粗心

我笑点很低的 发表于 2015-2-5 07:59:08

页: [1]
查看完整版本: cmd下运行exe和用debug载入exe后,两种方式下,显示的结果不一样,求指教,求帮助