郁闷啊,一个HelloWorld程序出现这样的错误.

moliliang 2009-06-20 10:14:41

DATAS SEGMENT ;数据段开始
NOTE DB 'Hello World',0ah,0dh,'$' ;-----
DATAS ENDS ;数据段结束

CODE SEGMENT ;代码段开始
ASSUME CS:CODE, DS:DATAS ;将代码段指定给CS寄存器, 将数据段指定给DS寄存器
BEGIN: MOV AX,DATAS ;AX累加器 ----
MOV DS,AX ;DS数据段寄存器
MOV DX,OFFSET NOTE ;这句可以用LEA DX,NOTE来代替, DX是数据通用寄存器
MOV AH,09H ;09H对应的是显示字符串 ----
INT 21H ;INT 21H 是用来调用功能的, 具体区别用AH来识别
MOV AH, 4CH ;4CH 功能在于让你退出程序
INT 21H; ;退出程序
CODE ENDS ;代码段结束

END BEGIN


这个代码是我在网上找到, 有几个问题..

NOTE DB 'Hello World',0ah,0dh,'$' 这行代码后面的 0ah,0dh,'$' 这些都是做什么用的?
BEGIN: MOV AX,DATAS 这里的begin和后面的 END begin 有什么具体的作用..?
MOV AH,09H 这里为什么要将09H放到AH里面?

用RadASM 编译时(MASM 9.0), 提示
HelloWorld.asm(7) : error A2004: symbol type conflict
HelloWorld.asm(16) : warning A4023: with /coff switch, leading underscore required for start address : BEGIN

不知道为什么额...请大家帮下忙呀``
...全文
110 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
woaiguoxu 2009-07-01
  • 打赏
  • 举报
回复
fs
schlafenhamster 2009-06-20
  • 打赏
  • 举报
回复
待显示的字符串以’$’作为其结束标志,这是DOS调用规定的。如C中规定0为字符串结束一样。
killbug2004 2009-06-20
  • 打赏
  • 举报
回复
16位的汇编就不要用RadASM/MASMPlus,这些要配置才能用
自己在命令行下编译
ml test.asm
link test.obj

0ah,0dh是实现换行用的,回车换行

END begin 指定程序入口点

MOV AH,09H 这个是调用中断显示字符串
功能09H
功能描述:输出一个字符串到标准输出设备上。如果输出操作被重定向,那么,将无法判断磁盘已满
入口参数:AH=09H
DS:DX=待输出字符的地址
说明:待显示的字符串以’$’作为其结束标志
出口参数:无


多看书
moliliang 2009-06-20
  • 打赏
  • 举报
回复
用RadASM 和 MASMPlus 得到一样的错误...

NOTE DB 'Hello World',0ah,0dh,'$' 这行代码后面的 0ah,0dh 是做什么用的?
BEGIN: MOV AX,DATAS 这里的begin和后面的 END begin 有什么具体的作用..?
MOV AH,09H 这里为什么要将09H放到AH里面?

这三个问题请帮忙解释下.. 汇编新手..
nanlingcg 2009-06-20
  • 打赏
  • 举报
回复
我在集成环境下编译正常,运行正常。
应该是编译器问题。
goodider 2009-06-20
  • 打赏
  • 举报
回复
编译器问题。
BAYNPU 2009-06-20
  • 打赏
  • 举报
回复
;#Mode=dos ;只要加上前面这指令,在MASMPlus集成编译器上汇编可能通过。
DATAS SEGMENT ;数据段开始
NOTE DB 'Hello World',0ah,0dh,'$' ;-----
DATAS ENDS ;数据段结束

CODE SEGMENT ;代码段开始
ASSUME CS:CODE, DS:DATAS ;将代码段指定给CS寄存器, 将数据段指定给DS寄存器
BEGIN: MOV AX,DATAS ;AX累加器 ----
MOV DS,AX ;DS数据段寄存器
MOV DX,OFFSET NOTE ;这句可以用LEA DX,NOTE来代替, DX是数据通用寄存器
MOV AH,09H ;09H对应的是显示字符串 ----
INT 21H ;INT 21H 是用来调用功能的, 具体区别用AH来识别
MOV AH, 4CH ;4CH 功能在于让你退出程序
INT 21H; ;退出程序
CODE ENDS ;代码段结束

END BEGIN

moliliang 2009-06-20
  • 打赏
  • 举报
回复
谢谢楼上的朋友细心解答.. 因为自己看的是电子书..所以..有时候看了容易忘..忘了也难以找到..笔记做得不够多..- -!

21,500

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧