Debugging 如何通过Turbo调试器知道地址在哪里?
我想了解Turbo调试器是如何工作的。例如,我有一条消息,我把它移到了Debugging 如何通过Turbo调试器知道地址在哪里?,debugging,assembly,dos,x86-16,Debugging,Assembly,Dos,X86 16,我想了解Turbo调试器是如何工作的。例如,我有一条消息,我把它移到了DX寄存器中 (我向您展示了它在调试器中的外观): 事实上,消息的第一个元素地址是9E(调试器就是这样理解的)。但实际上,在调试器屏幕中,我可以看到在DS寄存器中,MSG地址位于A0。怎么可能呢 我知道代码更可取,但这次屏幕截图更合适: 如您所见,我标记了两个地址,但它们不相同。实际上,我可以看到我的MSG从上面标记的地址A0开始,但是调试器像9E一样理解它,并将其移动到DX。有人能给我解释一下这是怎么回事吗 顺便说一句,程
DX
寄存器中
(我向您展示了它在调试器中的外观):
事实上,消息的第一个元素地址是9E(调试器就是这样理解的)。但实际上,在调试器屏幕中,我可以看到在DS
寄存器中,MSG地址位于A0。怎么可能呢
我知道代码更可取,但这次屏幕截图更合适:
如您所见,我标记了两个地址,但它们不相同。实际上,我可以看到我的MSG从上面标记的地址A0开始,但是调试器像9E一样理解它,并将其移动到DX
。有人能给我解释一下这是怎么回事吗
顺便说一句,程序可以正常工作并打印所有内容,目的是了解调试器如何理解地址
MSG代码很简单:
MSG db 'Hello, how do you do!!!!,'$'
我相信,如果你能一步一步地编写代码,一条指令接一条指令,你会看到这一点
- 您的消息从DS:00A0开始是正确的
- Turbo调试器也正确,它在此之前启动两个字节
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!!!!,'$'