鱼C论坛

 找回密码
 立即注册
查看: 4294|回复: 9

为什么我输出的是两行 理论上应该是三行啊

[复制链接]
发表于 2011-6-28 16:07:05 | 显示全部楼层 |阅读模式

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

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

x
  1. assume cs:code,ds:data,ss:stack
  2. data segment ;数据段
  3. db 'welcome !'
  4. data ends

  5. stack segment ;堆栈段
  6. db 0,0,0,0,0,0
  7. stack ends

  8. code segment ;代码段
  9. start:mov ax,data
  10. mov ds,ax
  11. mov ax,stack
  12. mov ss,ax

  13. mov sp,6
  14. mov si,0
  15. mov ax,0b800h
  16. mov es,ax
  17. mov di,0
  18. mov bx,0
  19. mov cx,3
  20. yes:push cx
  21. mov si,0
  22. mov di,0
  23. mov cx,9
  24. s1: ;内循环
  25. mov al,ds:[si] ;字符字节
  26. mov ah,0cah ;颜色字节
  27. mov es:[di+bx],ax ;把ax传给目标字内存
  28. add si,1
  29. add di,2
  30. loop s1
  31. add bx,0a0h

  32. pop cx ;外循环的cx出照栈
  33. loop yes
  34. mov ax,4c00h
  35. int 21h
  36. code ends
  37. end start
复制代码
我写的只有一种颜色的实验9代码  在网友的帮助下终于消除了bug  可是 为什么只有显示两行  不是应该三行吗  郁闷呢。。。难道机子问题?  你们机子会这样吗 。。。
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-6-28 16:17:08 | 显示全部楼层
奇怪不知道怎么搞的又不显示了  真是莫名其妙啊 。。。。我好纠结、、、、、、、、:Q
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-28 22:48:47 | 显示全部楼层
帮你顶顶。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-30 01:33:51 | 显示全部楼层
我编写这代码的时候也有没反映的情况,然后debug -g到mov ax,4c00H的时候又能正常显示,然后q回车
在运行程序的时候又好了,不知道你是不是也是这情况。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-6-30 15:05:48 | 显示全部楼层
你把mov es:[di+bx],ax   改为mov es:0a0h[di+bx],ax   就可以了
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-7-1 12:01:23 | 显示全部楼层

嗯。。。类似  搞的我的神经都大条了  郁闷。。。真是打击啊   好不容易写完了  却无法执行 真郁闷  。。。怀疑这编译器是不是太老了  
小甲鱼最新课程 -> https://ilovefishc.com
 楼主| 发表于 2011-7-1 12:03:17 | 显示全部楼层
liuhui88126 发表于 2011-6-30 15:05
你把mov es:[di+bx],ax   改为mov es:0a0h[di+bx],ax   就可以了

请问为什么要改为mov es:0a0h[di+bx],ax  不是很明白啊。。。特别是中间那个0a0h。。。。
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-1 15:34:54 | 显示全部楼层
表示没有出现错误,我这里是显示了三行吖~~
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-1 16:46:43 | 显示全部楼层
wdl7770016 发表于 2011-7-1 12:01
嗯。。。类似  搞的我的神经都大条了  郁闷。。。真是打击啊   好不容易写完了  却无法执行 真郁闷  。。 ...

我也不知道啊,我随便猜的,难道猜对了?
小甲鱼最新课程 -> https://ilovefishc.com
发表于 2011-7-4 02:11:31 | 显示全部楼层
本帖最后由 king嗜血法师 于 2011-7-4 02:34 编辑

0a0H=160你用计算器转换下就知道,代表DIOS窗口(就是你CMD的那段,我是这么理解的- -!),每行有160列。
es:0a0h[di+bx]等价es:0a0h[di+bx+0a0h]。
+0a0H就等于换行了,但你的错误并不是出在这。
你写入显存地址是从0b800h:0开始的,意思是从第一行第一列开始显示,其实是显示了3行,有一行被字给挡了,你把0b800h改成0b872H就行了,转换下720H=1824=160*11+64,就是说从第11行的第64列开始写入,这样就能显示在中间了。
小甲鱼最新课程 -> https://ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2025-4-21 14:45

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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