如何通过大菱鲆调试器了解地址? ASM

时间:2014-01-15 21:39:14

标签: debugging assembly

我想了解 Turbo Debugger 是如何工作的。所以,例如我有消息,我把它移动到 DX 注册。

(我告诉你它在调试器中的样子):

MOV DX,09E    ;This is a version which debugger shows me in debugger mode;
              ;It takes all information from this code: MOV DX,OFFSET MSG.

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

我知道代码更合适,但这次屏幕更合适:

enter image description here

如您所见,我标记了2个地址,但它们不一样。实际上我可以看到我的MSG从上面标记的地址(A0)开始,但调试器将其理解为9E并将其移至DX有人可以解释一下,怎么可能?

*顺便说一句,程序可以正常运行并打印一切,目的是了解调试器如何理解地址。

MSG代码很简单:

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

1 个答案:

答案 0 :(得分:0)

我相信如果您将单步执行代码,逐条指令,您将看到

  • 您的信息始于DS:00A0
  • ,这是正确的
  • Turbo Debugger也正确,它在
  • 之前开始两个字节

仔细查看位于DS:009E的内容。

你在那看到什么?两个字节:0A0D

这是一个ascii“Line Feed”和一个Ascii“Carriage Return”。

通过了解历史观点可以减少你的困惑......

当打印机使用墨水和纸张,以及电话以1200 BPS的速度传输调制解调器信号时,你支付了一个小时的最低工资,一个小时的连接到一个城市只有三个州,这真的是经济上必须选择将小打印头向左移动,或者只是在打印头停留在相同位置时将压板向下顶起。

我的意思是,你真的在​​手机账单中看到了它。

不开玩笑,使用0A字节而不使用0D字节进行此更改可能意味着您的电话帐单有10或20美元的差异;并且记得当时的通货膨胀因素。

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

凭借Turbo Debugger的奇迹,您可以单步执行此操作并观察它。

所以,当你在00A0写下你的消息“开始”时,你是正确的,但是当它告诉你消息在那之前两个字节开始时,Turbo Debugger也是正确的。