当前位置: 代码迷 >> 汇编语言 >> 这程序错哪了
  详细解决方案

这程序错哪了

热度:3479   发布时间:2013-02-26 00:00:00.0
这程序哪里错了?
以下的程序哪里错了?这是我学汇编以来的写的第二个程序,不知道哪里错了,郁闷了一个下午,连课也听不进。哪位帮改一下啊?帮改成能编译通过并能运行的,并且说一下有没有固定的格式的?就像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 可用字节


------解决方案--------------------------------------------------------
.386
.data
val1 sdword 1
val2 sdword ?
.code
mov eax val1
mov val2 eax
end

不知道怎么改。我觉得是这样。
------解决方案--------------------------------------------------------
;看看吧:
.386
.model small
.data
val1 sdword 1
val2 sdword ?
.code
START:
mov eax,val1
mov val2,eax
MOV AH,4CH
INT 21H
 END START
------解决方案--------------------------------------------------------
你是编dos程序还是编win32程序?
如果是dos程序,前面要加.model small,最后调用int 21h的4ch功能退出;如果是win32程序,前面加.model flat,最后调用ExitProcess退出。另外,masm32好像不能编译dos程序,我没试过不确定。
代码要写在.code段中,mov指令的两个操作数要用逗号分隔:mov eax, val1。
程序最后要有END伪指令。
你可以搜索一下参考别人的代码看看。
------解决方案--------------------------------------------------------
Win32 程序,最简单的大致是:
Assembly code
;  .386 语句必须在 .model 语句之前;   这是 Masm32 编译器对模式的个约定; 没有使用任何的 API; 编译: ml /c /coff xx.asm; 链接:link /subsytem:windows xx.obj; 运行,当然是没有任何表示,虽然可以在调试程序中看到结果.386.model  flat, stdcalloption  casemap:none.dataval1 dword 1val2 dword ?.codestart:  mov eax val1  mov val2 eax  retend  start
------解决方案--------------------------------------------------------
建议楼主先找本书,或者资料看看。
把汇编的程序框架搞清楚

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

Windows下32位汇编的程序框架

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

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

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

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

等等
  相关解决方案