这程序哪里错了?

fthislife 2010-03-31 07:35:45
以下的程序哪里错了?这是我学汇编以来的写的第二个程序,不知道哪里错了,郁闷了一个下午,连课也听不进。哪位帮改一下啊?帮改成能编译通过并能运行的,并且说一下有没有固定的格式的?就像C语言里有main函数的固定格式一样

.386
.data
val1 sdword 1
val2 sdword ?
mov eax val1
mov val2 eax

编译错误代码为:
Assembling: E:\masm32\myfile\2.asm
E:\masm32\myfile\2.asm(3) : error A2013: .MODEL must precede this directive
E:\masm32\myfile\2.asm(4) : error A2034: must be in segment block
E:\masm32\myfile\2.asm(5) : error A2034: must be in segment block
E:\masm32\myfile\2.asm(6) : error A2008: syntax error : in instruction
E:\masm32\myfile\2.asm(7) : error A2008: syntax error : in instruction
E:\masm32\myfile\2.asm(7) : error A2088: END directive required at end of file
驱动器 E 中的卷是 软件
卷的序列号是 D803-AE24

E:\masm32\myfile 的目录

2010-03-31 19:23 73 2.asm
1 个文件 73 字节
0 个目录 163,715,723,264 可用字节
...全文
933 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
blackfacewa 2010-04-01
  • 打赏
  • 举报
回复
建议楼主先找本书,或者资料看看。
把汇编的程序框架搞清楚

还有就是DOS下的16位汇编程序框架

Windows下32位汇编的程序框架

然后你就能知道你的代码改怎么组织了!
比如:
你代码中用到的数据,放在数据段

你代码要用到栈的话,那么你要声明栈

你的代码肯定在内存中肯定也是要有地方放的,那么就要放在代码段中

每个程序肯定会有个入口函数,那么你的程序你想从哪里最为入口?

等等
zara 2010-04-01
  • 打赏
  • 举报
回复
Win32 程序,最简单的大致是:
;  .386 语句必须在 .model 语句之前
; 这是 Masm32 编译器对模式的个约定
; 没有使用任何的 API
; 编译: ml /c /coff xx.asm
; 链接:link /subsytem:windows xx.obj
; 运行,当然是没有任何表示,虽然可以在调试程序中看到结果
.386
.model flat, stdcall
option casemap:none


.data
val1 dword 1
val2 dword ?


.code

start:
mov eax val1
mov val2 eax
ret

end start
fthislife 2010-04-01
  • 打赏
  • 举报
回复
是win32程序
cnzdgs 2010-03-31
  • 打赏
  • 举报
回复
你是编dos程序还是编win32程序?
如果是dos程序,前面要加.model small,最后调用int 21h的4ch功能退出;如果是win32程序,前面加.model flat,最后调用ExitProcess退出。另外,masm32好像不能编译dos程序,我没试过不确定。
代码要写在.code段中,mov指令的两个操作数要用逗号分隔:mov eax, val1。
程序最后要有END伪指令。
你可以搜索一下参考别人的代码看看。
fthislife 2010-03-31
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 baynpu 的回复:]
;看看吧:
.386
.model small
.data
val1 sdword 1
val2 sdword ?
.code
START:
mov eax,val1
mov val2,eax
MOV AH,4CH
INT 21H
END START
[/Quote]
还是不行啊!你的代码编译后错误:
Assembling: E:\masm32\myfile\2.asm
E:\masm32\myfile\2.asm(8) : error A2074: cannot access label through segment registers
E:\masm32\myfile\2.asm(9) : error A2074: cannot access label through segment registers
E:\masm32\myfile\2.asm(12) : warning A4023: with /coff switch, leading underscore required for start address : START
驱动器 E 中的卷是 软件
卷的序列号是 D803-AE24

E:\masm32\myfile 的目录

2010-03-31 19:50 131 2.asm
1 个文件 131 字节
0 个目录 163,715,723,264 可用字节
BAYNPU 2010-03-31
  • 打赏
  • 举报
回复
;看看吧:
.386
.model small
.data
val1 sdword 1
val2 sdword ?
.code
START:
mov eax,val1
mov val2,eax
MOV AH,4CH
INT 21H
END START
harizu76 2010-03-31
  • 打赏
  • 举报
回复
.386
.data
val1 sdword 1
val2 sdword ?
.code
mov eax val1
mov val2 eax
end

不知道怎么改。我觉得是这样。

21,458

社区成员

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

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