【问题标题】:Assembly Extended Registers not working装配扩展寄存器不起作用
【发布时间】:2014-11-09 13:16:22
【问题描述】:

我对 Assembly 和 TASM 还很陌生,我有以下问题。 我想使用寄存器的扩展版本,特别是 EBX。通过使用下面的代码,但没有“.386”指令,它不起作用,说“未定义符号EBX”。但是有了它,它无法识别 INT 21h 指令,据我了解,该指令终止了程序,并且在使用 TurboDebugger 调试它时很有用。 有人能告诉我如何避免这种情况吗?

PS:是的,我知道 TASM 和 TD 已经很老了,还有更新更好的,比如 NASM 或 MASM,但是我们在大学必须使用这个,所以请不要告诉我使用其他的.

代码如下:

.386
CODE  SEGMENT
        ASSUME  CS : CODE , DS : CODE , SS : CODE
        ORG  100H
    ENTRY:    JMP  L1
            ; data definitions come here
            ;.   .   .
    L1:

    MOV  EBX, 10H
    MOV  AX ,  4C00H
    INT  21H
    CODE  ENDS
    END  ENTRY

【问题讨论】:

  • .386 应该对int 21h 没有影响。 it doesn't recognize 是什么意思?
  • 这意味着当我在程序中包含 .386 并使用 TurboDebugger 对其进行调试时,它不会出现在日志中。同时,如果我删除 .386 并使用 TurboDebugger 再次运行它,它会出现在那里并且程序在执行后停止
  • 您的 turbo 调试器版本可能不理解 32 位前缀,因此它的反汇编器会混淆。如果我没记错的话,调试器有多个版本,其中之一是td386。试试看。

标签: assembly tasm


【解决方案1】:

.386放在哪里是相关的。在您的情况下,SEGMENT 指令将被解释为 USE32 段,但您需要 USE16 段。

改变

CODE  SEGMENT

CODE  SEGMENT USE16

或将.386 指令放在 CODE SEGMENT-line 之后。

【讨论】:

    猜你喜欢
    • 2022-07-18
    • 2015-02-06
    • 2014-06-06
    • 2014-01-04
    • 1970-01-01
    • 1970-01-01
    • 2013-08-25
    • 2018-01-21
    • 2011-03-12
    相关资源
    最近更新 更多