我有旧版(DOS 时代)代码,使用过:
push cs
pop ds
并且与 TASM v1.01 组装得很好
尝试使用 TASM v5.4 进行汇编时,我收到 push cs
指令的“非法索引模式”错误。
我该如何解决这个问题?
(搜索[tasm]非法索引模式
未返回此特定问题的任何结果。)
编辑:这是代码,减少到最少(废话),但仍然会产生我正在谈论的错误。
assume cs:code
code segment
main proc
push cs
main endp
code ends
end
这是汇编器输出:
Turbo Assembler Version 5.4 Copyright (c) 1988, 2010 Embarcadero Technologies, Inc.
Assembling file: sample.ASM
**Error** sample.ASM(4) Illegal indexing mode
Error messages: 1
Warning messages: None
Passes: 1
最佳答案
该问题似乎与使用 ASSUME 和尚未定义的段有关。将 ASSUME 指令移至 code
段可消除错误,删除该指令也能消除错误。在 ASSUME 指令和 PUSH 指令中将 CS 寄存器更改为 DS 寄存器会导致相同的错误,因此使用的段寄存器似乎并不重要。
这似乎是汇编程序中的一个错误,但解决方法很简单。只需将 ASSUME 指令移至 code SEGMENT
指令之后即可。这是您通常想要的地方,因为您通常不希望假设 CS 是其他段内的 code
。
(您还可以通过让 TASM 使用至少两次传递来解决该问题。这需要使用 /m
选项,并且代码中至少有一个需要第二次传递的构造,就像前向引用。TASM 5.4 中的错误似乎是它无法识别假设 cs:code
是前向引用。)
关于assembly - PUSH CS 适用于 TASM 1.01,但使用 TASM 5.4 会产生非法索引 -- 如何修复?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58746137/