鱼C论坛

 找回密码
 立即注册
查看: 2245|回复: 10

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

[复制链接]
发表于 2015-2-3 01:11:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
代码如下: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,[bx]
   mov es:720h[di],al
   mov ah,10h[si]
   mov es:721h[di],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载入一步一步运行的时候,就不对,首先数据传送我就发现不对,然后我直接跳到结果,结果是字符串没显示完整。
最佳答案
2015-2-3 10:02:38
这是因为8086的中断机制,代码没错,但单步运行的时候,就会有不同的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 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,[bx]
          mov es:720h[di],al
          mov ah,10h[si]
          mov es:721h[di],ah
          inc bx
          add di,2
          loop s1
          
          
          mov bx,0
          mov di,0
          add si,1
          mov cx,16
   s2:mov al,[bx]
      mov es:7c0h[di],al
          mov ah,10h[si]
          mov es:7c1h[di],ah
          inc bx
          add si,2
          loop s2
          
          mov bx,0
          mov di,0
          add si,1
          mov cx,16
   s3:mov al,[bx]
      mov es:860h[di],al
          mov ah,10h[si]
          mov es:861h[di],ah
          inc bx
          add si,2
          loop s3
       
       
          
          
          mov ax,4c00h
          int 21h

code ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-3 10:02:38 | 显示全部楼层    本楼为最佳答案   
这是因为8086的中断机制,代码没错,但单步运行的时候,就会有不同的结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-3 14:07:52 | 显示全部楼层
傲天 发表于 2015-2-3 10:02
这是因为8086的中断机制,代码没错,但单步运行的时候,就会有不同的结果

那2L,那个完整代码,为什么cmd也显示不了正确结果了呢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-4 10:45:52 | 显示全部楼层
如果是代码的话,建议使用代码格式发,论坛上面有说明,这样方便别人给你解答
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-4 12:41:27 | 显示全部楼层
xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

b800是显存,随着你输入,换行,显存中的数据是在不停变化的,你可以先CLS(清屏),再运行下看看,单步运行的话,经常会看到你的数据会变成A.X.=.B.8.0.0这类数据,正是你屏幕上显示的数据。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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,,代码没错,你再仔细算下数据就行了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-4 13:23:41 | 显示全部楼层
xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

试了半天,你add si,2错了,应该是di,si是属性,从第二段代码就错了,改成di就正确显示了,
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-2-4 13:25:23 | 显示全部楼层
xx6625303 发表于 2015-2-3 14:07
那2L,那个完整代码,为什么cmd也显示不了正确结果了呢

   s1:mov al,[bx]
          mov es:720h[di],al
          mov ah,10h[si]
          mov es:721h[di],ah
          inc bx
          add di,2
          loop s1
         
         
          mov bx,0
          mov di,0
          add si,1
          mov cx,16
   s2:mov al,[bx]
      mov es:7c0h[di],al
          mov ah,10h[si]
          mov es:7c1h[di],ah
          inc bx
          add si,2
          loop s2
上面是你源码的一部分,错误代码给你标出来了,你仔细看下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-2-4 18:32:47 | 显示全部楼层
傲天 发表于 2015-2-4 13:25
s1:mov al,
          mov es:720h[di],al
          mov ah,10h[si]

谢谢,后来我也看到了,真的是太粗心
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

头像被屏蔽
发表于 2015-2-5 07:59:08 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 23:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表