【发布时间】:2016-02-18 05:12:46
【问题描述】:
我正在阅读教科书Computer Systems 4th Edition。下面的问题是在 Pep/8 虚拟计算机的上下文中。在练习中,我得到了这个问题:
将以下汇编语言伪操作转换为十六进制机器语言:
- .ASCII "熊\x00"
- .BYTE 0xF8
- .WORD 790
我正在尝试将这些值转换为十六进制,但我无法理解教科书对该过程的解释,而且我觉得这本书没有给出太多解释。
对于第一个答案,我认为这是在 ASCII 转换表中的简单查找:
42 65 61 72 00
本题答案如下:
- 42 65 61 72 00
- F8
- 0316
尽管知道这些答案,但我不知道如何获得 2 和 3 的答案
这里是 Pep/8 汇编器和模拟器的download link。 这是汇编程序的source code。
【问题讨论】:
-
将它们输入汇编程序可能会有所帮助,然后查看 hexdump。您可以使用
nasm -fbin test.asm/hexdump -C test(或任何您最喜欢的十六进制转储工具)。 “bin”格式没有任何头文件或结构:汇编器只是将字节组装成一个平面输出文件。 -
@PeterCordes 这个问题基于 Pep/8 架构(不幸的是没有这样标记)。问题来自Computer Systems这本书。我记得 Pep/8 是 Big-Endian(如果我错了,有人可以纠正我)。如果要使用 NASM 为
.WORD生成输出,则其字节将被反转,因此可能无法呈现 OP 正在寻找的答案。 -
@MichaelPetch 我刚刚添加了一个指向 GitHub 上的页面以及下载页面的链接。它来自计算机系统。第 4 版。
-
BYTE 0xF8表示您要在机器码中生成一个值为 0xF8 的单个字节。 0x 表示后面的值是十六进制的。所以从字面上看,答案是F8。由于 790 没有基本前缀,因此它被视为十进制。您需要将十进制转换为十六进制,即 0x0316。在像 Pep/8 这样的大端架构的情况下,机器语言生成的十六进制字节将为03 16。 -
哦!行!比书上的解释好多了!谢谢你,@MichaelPetch
标签: assembly data-conversion machine-language pep8-assembly