masm能否支持多个masm文件生成obj,link成一个程序? 我测试不成功

weirueii 2016-07-06 03:44:39
我定义了两个文件,m.asm内容:

assume cs:code,ds:data
code segment
start:
mov ax,20h
call s
mov ah,4ch
int 21h
code ends
end start

里面有一个标号s是为定义的
然后有一个n.asm,里面有s标号:

code segment
s:
mov bx,4h
div bx
code ends

编译m.asm失败告诉我标号找不到符号s

怎么解决这个问题呢,能否跨源文件编译?
谢谢。
...全文
225 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
啊,应该这样连接: link m.obj+n.obj,m.exe 或者 link m.obj n.obj 它默认输出exe名和第一个目标文件相同,当然你也可以手工输入
weirueii 2016-07-08
  • 打赏
  • 举报
回复
引用 1 楼 DelphiGuy 的回复:
m.asm

assume cs: code

  extrn s: near

code segment
start:
  mov ax,20h
  call s
  mov ah,4ch
  int 21h
code ends

  end start
n.asm

  assume cs: code

  public s

code segment
s:
  mov bx,4h
  div bx
  ret
code ends

  end
masm m.asm masm n.asm link m.obj+n.obj m.exe
谢谢,这样改了以后,编译没有问题了,但是链接那一步出了问题:

    M.EXE : fatal error L1011: invalid object module
     pos: 1 Record type: 4D
这是怎么回事呢,如何解决? 我使用dosbox+masm 5.0在win7上面做的实验。 谢谢。
赵4老师 2016-07-06
  • 打赏
  • 举报
回复
引用 2 楼 zara 的回复:
1. 上面的代码里需要声明 s 是外部定义的,即程序前面加上 extrn s:near 2. 下面的代码,没有应有的 ret 指令吧,虽然这并影响程序的编译和链接。 3. 以常用的 masm6 及以后版本的约定来说吧,下面的代码要将 s 声明为 public 即程序前面加上 public s。 4. 两个代码里,要将 code 声明为 public 即code segment public
zara 2016-07-06
  • 打赏
  • 举报
回复
1. 上面的代码里需要声明 s 是外部定义的,即程序前面加上 extrn s:near
2. 下面的代码,没有应有的 ret 指令吧,虽然这并影响程序的编译和链接。
3. 以常用的 masm6 及以后版本的约定来说吧,下面的代码要将 s 声明为 public 即程序前面加上 public s
4. 两个代码里,要将 code 声明为 public 即code segment public
  • 打赏
  • 举报
回复
m.asm

assume cs: code

  extrn s: near

code segment
start:
  mov ax,20h
  call s
  mov ah,4ch
  int 21h
code ends

  end start
n.asm

  assume cs: code

  public s

code segment
s:
  mov bx,4h
  div bx
  ret
code ends

  end
masm m.asm masm n.asm link m.obj+n.obj m.exe

21,453

社区成员

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

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