Debugging 如何通过Turbo调试器知道地址在哪里?

Debugging 如何通过Turbo调试器知道地址在哪里?,debugging,assembly,dos,x86-16,Debugging,Assembly,Dos,X86 16,我想了解Turbo调试器是如何工作的。例如,我有一条消息,我把它移到了DX寄存器中 (我向您展示了它在调试器中的外观): 事实上,消息的第一个元素地址是9E(调试器就是这样理解的)。但实际上,在调试器屏幕中,我可以看到在DS寄存器中,MSG地址位于A0。怎么可能呢 我知道代码更可取,但这次屏幕截图更合适: 如您所见,我标记了两个地址,但它们不相同。实际上,我可以看到我的MSG从上面标记的地址A0开始,但是调试器像9E一样理解它,并将其移动到DX。有人能给我解释一下这是怎么回事吗 顺便说一句,程

我想了解Turbo调试器是如何工作的。例如,我有一条消息,我把它移到了
DX
寄存器中

(我向您展示了它在调试器中的外观):

事实上,消息的第一个元素地址是9E(调试器就是这样理解的)。但实际上,在调试器屏幕中,我可以看到在
DS
寄存器中,MSG地址位于A0。怎么可能呢

我知道代码更可取,但这次屏幕截图更合适:

如您所见,我标记了两个地址,但它们不相同。实际上,我可以看到我的MSG从上面标记的地址A0开始,但是调试器像9E一样理解它,并将其移动到
DX
。有人能给我解释一下这是怎么回事吗

顺便说一句,程序可以正常工作并打印所有内容,目的是了解调试器如何理解地址

MSG代码很简单:

MSG db 'Hello, how do you do!!!!,'$'

我相信,如果你能一步一步地编写代码,一条指令接一条指令,你会看到这一点

  • 您的消息从DS:00A0开始是正确的
  • Turbo调试器也正确,它在此之前启动两个字节
仔细查看DS:009E上的内容

你在那里看到了什么?两个字节:
0A
0D

这是一个ascii“换行”和一个ascii“回车”

理解历史的观点可以减少你的困惑

很久以前,打印机使用墨水和纸张,电话以1200 BPS的速度传输调制解调器信号,你花了大约10小时的最低工资来连接一个只有三个州的城市,在让小打印头回到左边之间进行选择确实是一种经济上的需要,或者在打印头保持不变的情况下,将压盘向下顶一行

我是说,你真的在电话账单上看到了

别开玩笑了,这一个变化,使用
0A
字节而不使用
0D
字节,可能意味着你的电话账单上有10或20美元的差额;记得要考虑到当时的通货膨胀

您正确看到消息的原因是,在将消息放到屏幕上之前,您的机器首先放置“换行”(即光标可能会下降到下一行)和“回车”(即光标跳回到左边缘)。这比你的眼睛所能看到的要快得多

有了Turbo调试器的奇迹,您可以单步完成这项工作并观察它的发生


因此,当您编写消息“开始”于
00A0
时,您是正确的,但当Turbo Debugger告诉您消息开始时间比该时间提前两个字节时,您也是正确的。

显示定义
MSG
的代码。此外,在此消息之前,我描述了大约6条具有不同内容(长度)的消息.请你幽默一下,给我们看看原始代码(你的源代码)。我不相信给出的答案是正确的。我想知道您是否在开始时正确设置DS寄存器,使其指向您的数据段。从输出来看,这几乎肯定是一个DOS EXE而不是COM程序。他没有在
MSG
中定义任何类似
\r\n
的内容。我的怀疑是DS没有正确设置。我忘了在留言之前提到我使用了10,13代码。它将光标移到下一行。我想,我现在明白了。谢谢
MSG db 'Hello, how do you do!!!!,'$'