• 全部
  • 问答

“Hello, World”无法在屏幕上显示????

jacky_shen 2004-06-30 10:50:14
.MODEL TINY
.CODE

CR EQU 13
LF EQU 10
TERMINATOR EQU '$'

ORG 100H

MAIN PROC
MOV DX, MESSAGE
MOV AH, 09H
INT 21H
MOV AX, 4C00H
INT 21H
MAIN ENDP

MESSAGE:
DB 'Hello, World!'
DB CR, LF, TERMINATOR

END MAIN

编译没有问题,执行时候为什么有时候可以显示,有时又不能显示。
...全文
669 点赞 收藏 36
写回复
36 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
Areslee 2004-08-22
关于此问题的解决及描述,请看
http://community.csdn.net/Expert/topic/3297/3297774.xml?temp=.1758539
回复
qxhzzz 2004-07-13
我也看看了,能显示不过有乱码。
在hello world
之前。。
不知道为什么
回复
yewer 2004-07-06
我也是个菜鸟,我把楼主的那段代码,拷到masm32里
build 的时候出错了,大家看看是怎么回事阿

Microsoft (R) Macro Assembler Version 6.14.8444
Copyright (C) Microsoft Corp 1981-1997. All rights reserved.

Assembling: E:\learn\汇编\1.asm
E:\learn\汇编\1.asm(22) : warning A4023: with /coff switch, leading underscore r
equired for start address : MAIN
Microsoft (R) Incremental Linker Version 5.12.8078
Copyright (C) Microsoft Corp 1992-1998. All rights reserved.

1.obj : fatal error LNK1190: invalid fixup found, type 0x0001
_
Link error
请按任意键继续 . . .
回复
cynic0916 2004-07-05
同意楼上的,不过最好还是加段延时,不然一闪而过
回复
fly4free 2004-07-03
我觉得是显示模式的问题吧……
回复
zkxz 2004-07-02
楼主有没有试过我的方法?
回复
jacky_shen 2004-07-02
TO: archim(一天两杯咖啡)
MESSAGE是标识
MOV DX, MESSAGE
是将Message的偏移地址赋值给DX
LEA DX, MESSAGE
作用也是将MESSAGE的偏移地址赋值给DX,2者有什么差异呢?
回复
jacky_shen 2004-07-02
TO: lxleaves(飘泊的叶子)
测试下来,是这样的。
但我想知道获为什么取键盘的中断,就会什么都显示了?
回复
zkxz 2004-07-02
To Areslee(易水),是先打开cmd窗口,在里面执行的程序。
回复
Areslee 2004-07-02
关键不是不显示,而是显示后程序就结束了,WINDOWS关闭了窗口,你没来得及看到
回复
zkxz 2004-07-02
我说的就是cmd窗口
回复
lxleaves 2004-07-02
显示缓存没了,呵呵,继续猜测^-^
ps:不是DOS窗口,是cmd窗口^-^
回复
zkxz 2004-07-02
神奇了!我刚才又拿以前出问题的程序在2000和xp下的dos窗口中试,结果竟然都能正常显示了!!
实在不知道怎么回事??我并没有改过什么。
郁闷??????
回复
zkxz 2004-07-02
lxleaves(飘泊的叶子)的“猜测”,有些道理。
我经常需要写汇编程序,在DOS窗口中绝大不分时候都不会显示程序打印的内容,而全屏却可以。不知为何?
回复
tfrist 2004-07-02
楼主是不是没有将exe文件转换成com文件。

若没有转换必须用exe2bin进行转换。
回复
lxleaves 2004-07-02
ps:
"ctrl + c" to stop the loop
回复
lxleaves 2004-07-02
cmd工作在32位环境下
helloworld工作在v86下
nt系列的系统对v86下的程序输出转移到32位的cmd下显示,cmd默认有个显存缓冲
而全屏模式是标准的v86模式(再次猜测^-^)
如果不暂停,v86下的显示输出没有实现就跳回了32位环境...
就没了...
如果用循环,可能会输出的,毕竟缓冲区有限,你试试,现在上班,机器上没masm,只有java^-^
.MODEL TINY
.CODE

CR EQU 13
LF EQU 10
TERMINATOR EQU '$'

ORG 100H

MAIN PROC
sss:
MOV DX, MESSAGE
MOV AH, 09H
INT 21H
loop sss
MOV AX, 4C00H
INT 21H
MAIN ENDP

MESSAGE:
DB 'Hello, World!'
DB CR, LF, TERMINATOR

END MAIN
回复
jacky_shen 2004-07-02
TO: zkxz()
谢谢你的提醒,我刚刚测试一下,果然在Ctrl+Enter后的全屏模式下(是实模式吗?)可以显示,再用Ctrl+Enter接换到窗口就不能显示。

TO: lxleaves(飘泊的叶子)
你前面的说的,我看过了
》》我已经说明了我的猜测
呵呵,能不能说说你猜测的依据呢?
回复
lxleaves 2004-07-02
To jacky_shen(jacky)
楼上我已经说明了我的猜测^-^

回复人: lxleaves(飘泊的叶子) ( ) 信誉:100 2004-7-1 12:40:36 得分: 0



To:jacky_shen(jacky)
可能是cmd白痴,如果程序中有获取键盘的中断,就会什么都显示了(如果dos下运行正常的话)
TC等一些16位编译出来的程序也会出现这种情况,只要有读键盘操作就正常了
其实我猜测是因为cmd在v86下正常运行,但如果没有读键盘操作(使得程序暂停在v86下)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
cmd返回正常模式下就不能显示输出内容
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
呵呵



回复
lxleaves 2004-07-01
To:jacky_shen(jacky)
可能是cmd白痴,如果程序中有获取键盘的中断,就会什么都显示了(如果dos下运行正常的话)
TC等一些16位编译出来的程序也会出现这种情况,只要有读键盘操作就正常了
其实我猜测是因为cmd在v86下正常运行,但如果没有读键盘操作(程序暂停在v86下)
cmd返回正常模式下就不能显示输出内容
呵呵
回复
相关推荐
发帖
汇编语言
创建于2007-08-27

2.0w+

社区成员

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
申请成为版主
帖子事件
创建了帖子
2004-06-30 10:50
社区公告
暂无公告