注册 登录
编程论坛 汇编论坛

关于 masm2012.5,w764 位系统,按照书上写的打入一个 asm 程序,结果生成 obj 文件时,说 start 符号无定义?

blacker50 发布于 2014-04-19 09:54, 3281 次点击
datarea segment
    string1    db 'Move the cursor backward.'
    string2 db 'Move the cursor backward.'
    mess1    db 'Match.',13, 10, '$'
    mess2   db 'No match.',13, 10, '$'
datarea ends
prognam segment
main    proc    far
        assume cs:prognam,ds:datarea,es:datarea
start:
        push    ds
        sub        ax,ax
        push    ax
        
        mov        ax, datarea
        mov        ds,ax
        mov        es,ax
        
        lea        si,string1
        lea     di,string2
        cld
        mov        cx,25
        repz    cmpsb
        jz        match
        lea        dx,mess2
        jmp        short disp
match:
        lea        dx,mess1
disp:
        mov     ah,9
        int        21h
        ret
main    endp
prognam ends
         end     start

 
只有本站会员才能查看附件,请 登录
只有本站会员才能查看附件,请 登录

8 回复
#2
半江渔火2014-04-20 17:44
masm在64位上能用吗,不过这个问题好像对程序调试没什么影响
#3
wwssff3332014-05-15 18:32
MASM64的格式不是这样吧? 比如:

.DATA
szText     BYTE  "欢迎进入WIN64汇编语言的世界!",0
#4
xkwy00002014-05-16 16:04
无影响,但是按照新的规范可以写成:
END MAIN
END PROGNAM
#5
blacker502014-05-19 16:00
回复 2 楼 半江渔火
masm在64位机上可以使用,masm for windows2012.5好像集成了dosbox的虚拟环境供调试,另外,start符号无定义好像是软件的兼容性问题,在64位和32位的w7好像都会出现这种情况,可以将start:移到main proc far前面就可以通过运行,虽然在语法上是错误的
#6
blacker502014-05-19 16:12
回复 4 楼 xkwy0000
好像不可以通过我把最后写成
end  start
end  main
end  prognam
   
结果提示main块嵌套不匹配,前后段名不相同。。不过可以看看我给2楼的回复,谢谢哈
#7
zhu2240392014-06-01 21:12
注意  标号的 作用域
main是一个函数声明


#8
zhu2240392014-06-01 21:13
标号好像是不用 end  start的把
你不是segment
#9
apiqqz2014-06-26 07:50
end start 是表示从start标号处开始执行,不过里面用了两个lea 指令,为什么不用offset呢,这个不是在编译时就可以确定地址的么?
1