为什么以不对称的方式显示/存储值?

时间:2014-06-10 15:25:34

标签: debugging assembly masm tasm

我为大学作业撰写了一个小程序,该作业是关于通过3x7 Vector第二列来减去1x3 Matrix并将结果存储在1x3 VectorR

我已经完成了正确答案,但有些事情真正引起了我的注意:

使用 Turbo Debugger 我注意到数据段(十六进制值)中的结果存储(或者可能只是显示)与示例的结果不同老师给了:

教师的结果:

Teacher

我的结果:

Mine

我知道这些结果不同,但它们是正确的。我希望以下列方式存储值(例如):

0103
04FD
0606
0A0A
0B0B

但它存储像(例如)

0103
04FD06
06
0A0A
0B
0B

据我所知,到目前为止,ds:和值之间的值是内存方向,但我猜它们具有相同的长度(32位架构为32位),但似乎有些人有更多/更少的长度。当然这只是我的猜测。所以,我的问题是:

为什么这些值以这种方式存储?在某些方向上,050908和{+ 1}}等值是什么意思?或者......它是否依赖于调试器?

修改:这是05查看程序开头的方式:

At the start

  • 红色:一些变量
  • 黄色: ds
  • 黑色: Vector

2 个答案:

答案 0 :(得分:1)

但十六进制数的序列是相同的。一个按列格式化,另一个按照说明进行格式化,可以更长或更短。具有隐式或无寻址的指令比具有以下存储器地址的指令需要更少的空间。在第二种格式化指令列表的情况下,指令长度显示,在第一种情况下它不是。当加载到RAM中时,它并不重要 - 重要的是序列仍然是正确的。考虑到呈现给你时布局有所不同 - 但是内存是一维的,好像所有指令都写在一行上一样 - 这对你来说更难以阅读。

(注意:我在上面谈到"说明"由于所提供的证据只是转储的一小部分,采用子缩略图格式。然后显示的不明显数据可能不是说明。)

即使调试器试图从数据中理解,也可以对其进行格式化,使其可以以同一行上的数据打印在同一行上的方式呈现。调试器并不知道,并且从它看到的数据中获取线索。因此,不保证数据正确布局。当然,没有尝试将含义读入数据的调试器在那里不会失败。调试器可以使用的一个线索是"这是已知指令的操作码,因此我将其布局为使得该指令具有的字节数显示在一行"上。所以是的,特定于调试器。

答案 1 :(得分:0)

您正在查看Turbo Debugger代码部分中的数据。因此字节将被安排为机器指令。看看你的整个TD:

Turbo Debugger Screenshot

您在左上角的部分工作,但数据部分向左下方,您可以看到" ds:0000 ..."。执行前两个指令后,它将更改为" es:0000 ..."因为DS的值已更改。现在单击该部分中的任意位置或使用TAB直到光标在那里闪烁,然后按CTRL-G。输入" DS:0"并且该部分再次显示DS段的值。