字节、字和双字之间的转换

nos*_*g17 5 x86 assembly

所以我正在做 x86 汇编课程的第一个作业,但我已经迷路了(太棒了)。也许我读错了,但看来我需要将一个字节转换为一个单词,我可以做到这一点,并将一个双字转换为一个单词,我完全不知道该怎么做。考虑到我已经进行了大量的环顾四周,我猜我误解了我需要做什么。这是提示:

假设 .data 段中有以下定义:

arrayB: db  170, 193, 57

arrayW: dw  0, 0, 0

arrayD: dd 517, 1045, 2000
Run Code Online (Sandbox Code Playgroud)

编写一个相当于以下高级语言语句的汇编程序:

arrayW[0] = arrayB[0] + arrayD[0];  

arrayW[1] = arrayB[1] + arrayD[1];

arrayW[2] = arrayB[2] + arrayD[2];
Run Code Online (Sandbox Code Playgroud)

提前致谢; 我不知道我在做什么(无论是在装配中还是在 SO 上,对此感到非常抱歉)。

Fra*_*ler 3

我认为高级语言会对此发出可怜的抱怨。(但是谁关心 HLL 做什么呢?)您对将双字转换为单词感到紧张是完全正确的。一般来说,你不可能在不丢失信息的情况下做到这一点。在这种情况下,我们可以通过检查看到双字数组中的所有三个数字都适合单词,因此我猜您可以截断它们并将其称为“转换”。(恕我直言,这是一项糟糕的任务)

可能会给您带来更多麻烦的是寻址三种不同大小的数组。索引 0 很容易。但对于索引 1,您需要从 获取一个字节[arrayB + 1],将其添加到从 截断为一个字的双字中[arrayD + 4],并将结果存储在[arrayW + 2]。您也许可以算出索引 2 是什么样子。你说你知道如何执行字节到字部分,所以你知道如果你执行“mov ax, [ArrayB]”,它将同时得到 170 和 193,对吧?

尝试一下,如果您的代码有问题,请回来。