在书上看到的一个汇编题

TABLE DW 25,36,-1,-16,10000,13
PYL DW 7
MOV BX,OFFSET TABLE
ADD BX,PYL
MOV DX,[BX]
答案是10FF
请问为什么

TABLE DW 25,36,-1,-16,10000,13
这是 16 位的内存定义,换成 8 位的定义如下
----------------00--01---02---03---04---05----06---07----08--09---10---11
TABLE DB 19H,00H,24H,00H,FFH,FFH,F0H,FFH,10H,27H,0DH,00H
MOV BX,OFFSET TABLE
ADD BX,PYL
;这是后 BX 的值是 OFFSET TABLE+7
MOV DX,[BX];把第7第8个数给DX,
TABLE 中第7个数是FF是低直接,第8个数是10 是高字节
DX就等于10FFH

结合chatgpt回答
根据提供的汇编代码,我们可以进行以下的解释和分析:

在汇编代码中,TABLE DW 25,36,-1,-16,10000,13 表示定义了一个名为 TABLE 的数据段,其中包含了六个字(16位)。这六个字的十六进制表示分别为:19,24,FFFF,FFF0,2710,0D。

接下来,PYL DW 7 表示定义了一个名为 PYL 的数据段,包含一个字(16位),其十六进制表示为 0007。

然后,MOV BX,OFFSET TABLETABLE 的偏移地址(首地址)加载到寄存器 BX 中。

接着,ADD BX,PYLPYL 的值(0007)加到 BX 寄存器中,此时 BX 的值为 TABLE 的偏移地址 + PYL 的值。此处是将指针指向 TABLE 中的第 PYL 个元素。

最后,MOV DX,[BX]BX 寄存器指向的内存位置(TABLE 中的第 PYL 个元素的地址)的值加载到寄存器 DX 中。

因此,最终 DX 的值应为 TABLE 中第 PYL 个元素的值,即 10FF

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 以下回答由chatgpt基于相关博客总结生成:

    根据给定的汇编代码,执行过程和结果的计算方式如下:

    1. 首先,定义了一个数据表TABLE,其中包含了6个双字(2字节)的数据:25, 36, -1, -16, 10000, 13。
    2. 然后,定义了一个名为PYL的双字数据,其值为7。
    3. 接下来,MOV BX,OFFSET TABLE将数据表TABLE的起始地址存储到寄存器BX中。
    4. ADD BX,PYL将寄存器BX与PYL的值相加,也就是将PYL的值7加上TABLE的起始地址。
    5. 最后,MOV DX,[BX]将BX寄存器中的地址指向的数据读取到DX寄存器中。

    因此,根据给定的汇编代码和数据,执行MOV DX,[BX]时,DX寄存器中的值为TABLE中地址为10FF的数据。

    需要注意的是,具体的结果取决于数据表TABLE在内存中的地址分配情况,以及编译和加载代码的环境。所以无法直接通过代码和数据来得出结果,需要进一步了解代码和数据被加载的环境和情况。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^