PUSH CS 与 TASM 1.01 一起工作,但在 TASM 5.4 下提供非法索引——如何修复?
PUSH CS worked with TASM 1.01 but gives illegal indexing with TASM 5.4 -- How to fix?
我有旧版(DOS 时代)代码使用了:
push cs
pop ds
并且 assembled 适合 TASM v1.01
尝试使用 TASM v5.4 assemble 我得到 'illegal indexing mode' push cs
指令的错误。
我该如何解决?
(搜索 [tasm] illegal indexing mode
没有 return 此特定问题的任何结果。)
编辑:这是代码,减少到最少(废话)仍然会产生我正在谈论的错误。
assume cs:code
code segment
main proc
push cs
main endp
code ends
end
这里是 assembler 输出:
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 中的错误似乎是它无法识别 assume cs:code
是前向引用。)
我有旧版(DOS 时代)代码使用了:
push cs
pop ds
并且 assembled 适合 TASM v1.01
尝试使用 TASM v5.4 assemble 我得到 'illegal indexing mode' push cs
指令的错误。
我该如何解决?
(搜索 [tasm] illegal indexing mode
没有 return 此特定问题的任何结果。)
编辑:这是代码,减少到最少(废话)仍然会产生我正在谈论的错误。
assume cs:code
code segment
main proc
push cs
main endp
code ends
end
这里是 assembler 输出:
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 中的错误似乎是它无法识别 assume cs:code
是前向引用。)