gpt4 book ai didi

assembly - PUSH CS 适用于 TASM 1.01,但使用 TASM 5.4 会产生非法索引 -- 如何修复?

转载 作者:行者123 更新时间:2023-12-03 06:26:34 25 4
gpt4 key购买 nike

我有旧版(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com