找回密码
 立即注册
查看: 26|回复: 8

[问题求助] 4.5 link 1.obj 无法生成1.exe

[复制链接]
发表于 2026-10-22 17:22:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

×
assume cs:abc
abc segment
  mov ax,2
  add ax,ax
  add ax,ax

  mov ax,4c00h
  int 21h

abc ends
end

能生成1.obj, 但link 1.obj 时不能生成1.exe
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2026-10-22 17:23:06 | 显示全部楼层
你的代码缺少“程序入口点”。end 后面要写入口标号,并在代码中定义这个标号。LINK 生成 EXE 时需要知道程序从哪条指令开始执行。

修改如下:

  1. assume cs:abc
  2. abc segment
  3. start:
  4.   mov ax,2
  5.   add ax,ax
  6.   add ax,ax

  7.   mov ax,4c00h
  8.   int 21h
  9. abc ends
  10. end start
复制代码


保存后重新汇编、链接:masm 1.asm 生成 1.obj,再 link 1.obj 即可生成 1.exe。

如果 LINK 还提示 no stack segment,这是没有定义堆栈段的警告,通常不影响这个小程序;要消除可加:

  1. stack segment stack
  2.   db 16 dup(0)
  3. stack ends
复制代码


并在 assume 行加上 ss:stack。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

 楼主| 发表于 2026-10-23 14:24:31 | 显示全部楼层
FishC 发表于 2026-10-22 17:23
你的代码缺少“程序入口点”。end 后面要写入口标号,并在代码中定义这个标号。LINK 生成 EXE 时需要知道程 ...


                               
登录/注册后可看大图



为什么不能生成1.exe??
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

 楼主| 发表于 2026-10-23 14:31:04 | 显示全部楼层
FishC 发表于 2026-10-22 17:23
你的代码缺少“程序入口点”。end 后面要写入口标号,并在代码中定义这个标号。LINK 生成 EXE 时需要知道程 ...

试过还是不行,但返回根目录dir后,再进入try目录1.exe就出现了,为什么??
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

发表于 2026-10-23 14:31:08 | 显示全部楼层
531035528 发表于 2026-10-23 14:31
FishC 发表于 2026-10-22 17:23
你的代码缺少“程序 ...


这不是你代码的问题,而是 DOS 的**目录缓存/延迟写盘**现象。

LINK 其实已经成功把 1.exe 写到了 try 目录里,但 DOS 在你当前目录的“目录项缓存”里没有立刻刷新,所以你紧接着 dir 看不到它。你 cd\ 回到根目录,再 cd try 进入,DOS 重新读取了 try 的目录信息,于是 1.exe 就显示出来了。

验证方法:
- 直接运行 1.exe,如果能执行,说明文件一直在。
- 或者用 chkdsk 查看磁盘。
- 在 DOSBox 里按 Ctrl+F5 刷新,或重启 DOSBox 再看。

另外注意:LINK 有时会提示“Cannot open run file”之类的错误,但文件其实已生成;这时只要 1.exe 存在且能运行,就可以忽略那条提示。

以后遇到“明明生成了却看不到”,先切出目录再进来,或者直接运行试试。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

 楼主| 发表于 2026-10-23 14:34:09 | 显示全部楼层
FishC 发表于 2026-10-23 14:31
这不是你代码的问题,而是 DOS 的**目录缓存/延迟写盘**现象。

LINK 其实已经成功把 1.exe 写到了 t ...

怎样解决延迟写盘??
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

发表于 2026-10-23 14:34:38 | 显示全部楼层
531035528 发表于 2026-10-23 14:34
FishC 发表于 2026-10-23 14:31
这不是你代码的问题 ...


先说明:这不是 LINK 失败,而是 DOS(或 DOSBox)的目录缓存/写盘延迟。DOS 没有一条命令能永久“关闭”它,只能主动刷新,或者避开这种环境。

常用解决办法:

1. LINK 后直接运行 1.exe。能运行就说明文件已经生成,不用纠结 dir 暂时看不到。

2. 强制重读目录:先退出当前目录再进入:
  1. cd ..
  2. cd try
  3. dir 1.exe
复制代码


3. 写个批处理自动刷新,例如在 try 目录下:
  1. link 1.obj
  2. cd ..
  3. cd try
  4. dir 1.exe
复制代码


4. 如果实 DOS 下加载了 SMARTDRV,执行下面命令提交写缓存:
  1. smartdrv /c
复制代码

没有加载 SMARTDRV 就不用管。

5. DOSBox 里可重启 DOSBox,或把工程放到虚拟硬盘镜像里,少用“挂载 Windows 本地目录”的方式,写盘一致性更好。

6. 如果 LINK 提示 cannot open run file,再检查:1.exe 是否只读/被占用、磁盘是否满、路径是否太长。若文件后来出现且能运行,这条提示可忽略。

一句话:最实用的是 cd .. 再 cd try,或者 LINK 后直接运行 1.exe。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

 楼主| 发表于 2026-10-23 15:33:28 | 显示全部楼层
FishC 发表于 2026-10-23 14:34
先说明:这不是 LINK 失败,而是 DOS(或 DOSBox)的目录缓存/写盘延迟。DOS 没有一条命令能永久“关闭 ...


                               
登录/注册后可看大图



为什么ml 1.asm 提示出错???并且除了生成1.exe外还多了一个文件mllink$.lnk??
小甲鱼最新课程 -> https://ilovefishc.com
回复 顶 踩

使用道具 举报

发表于 2026-10-27 21:45:32 | 显示全部楼层
回复
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|鱼C工作室 ( 粤ICP备18085999号-1 )

GMT+8, 2026-11-5 12:20

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表