鱼C论坛

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

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

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

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

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

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

stack segment ;堆栈段
db 0,0,0,0,0,0
stack ends

code segment ;代码段
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax

mov sp,6
mov si,0
mov ax,0b800h
mov es,ax
mov di,0
mov bx,0
mov cx,3
yes:push cx 
mov si,0
mov di,0
mov cx,9
s1: ;内循环
mov al,ds:[si] ;字符字节
mov ah,0cah ;颜色字节
mov es:[di+bx],ax ;把ax传给目标字内存
add si,1
add di,2
loop s1
add bx,0a0h

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

嗯。。。类似  搞的我的神经都大条了  郁闷。。。真是打击啊   好不容易写完了  却无法执行 真郁闷  。。。怀疑这编译器是不是太老了  
想知道小甲鱼最近在做啥?请访问 -> 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。。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-1 15:34:54 | 显示全部楼层
表示没有出现错误,我这里是显示了三行吖~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-7-1 16:46:43 | 显示全部楼层
wdl7770016 发表于 2011-7-1 12:01
嗯。。。类似  搞的我的神经都大条了  郁闷。。。真是打击啊   好不容易写完了  却无法执行 真郁闷  。。 ...

我也不知道啊,我随便猜的,难道猜对了?
想知道小甲鱼最近在做啥?请访问 -> 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列开始写入,这样就能显示在中间了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-11-19 01:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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