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

HELP:FAIL TO LINK ERROR LNK1120

heikezzaass 发布于 2011-06-08 23:56, 683 次点击
额,那个,当初手贱,装了win7 x64,结果MS猥琐的把debug给阉割掉了,没办法,无奈下只好选择使用masm32,虽然界面比DOS下友好很多,但一直没让我安心过,前面就不赘述了,在做王爽老师的《汇编语言V2.0》第四章实验的时候就遇到了连接不能的问题,难道MSAM32也讲究残缺美?(残得我都凌乱了),具体表现嘛就是TXT照样弹出,但是后面的command窗口中有一条错误提示,就是fatal error LNK1120:1 unresolved externals.我去啊,足足瞪了代码三天了,从新输入过N遍,换过2台电脑,书第6章都快看完了,结果这个不明符号还是那么完全,好吧,它赢了,我只好厚着脸皮上来问这么小白的实验了,求指教啊,冰天雪地赤身裸体腾空360度双膝裸体跪求指教啊
程序代码:
assume cs:codesg

codesg segment

    mov ax,2000h
    mov ss,ax
    mov sp,0h
    add sp,10
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx
   
    mov ax,4c00h
    int 21h

codesg ends

end
4 回复
#2
obstratiker2011-06-09 07:31
这个我也只是大概明白粗的原理
dos 下的可执行文件的格式和 windows 下的可执行文件格式不同
你看汇编 pe 文件时不都要加上 ml /c /coff *.asm 吗
是因为 masm32 的连接器只认 coff 格式的文件
而王爽的 16位汇编生成的 .obj 不是那种格式的
#3
ansic2011-06-09 08:48
没有用过win7,我的masm也是6.15的。编译16位程序与编译32位程序不同,这是编译16位的dos程序的批处理,供楼主参考
程序代码:

d:\masm>type make.bat
@echo off
REM make16.bat, for assembling and linking 16-bit DOS programs (.EXE)
BIN\ML /c %1.asm                 
if errorlevel 1 goto terminate
BIN\LINK16 %1.obj;
if errorlevel 1 goto terminate
:terminate
@echo off
#4
heikezzaass2011-06-09 18:07
回复 2楼 obstratiker
多谢哈,masm32论坛上个哥们说要用16位的linker给了我思路哈,重新下了个overlay link 3.60就连接成功了说,也很感谢你哈
#5
heikezzaass2011-06-09 18:09
回复 3楼 ansic
我用的是masm32,是个人团体开发的说,所以有点瑕疵弄得我这么纠结,不过最后还是弄好了哈,重新下了个linker覆盖掉就OK了,还是很感谢你的热心帮助哈
1