【问题标题】:Translate PEP/8 assembly pseudo-ops to hexadecimal machine language将 PEP/8 汇编伪操作转换为十六进制机器语言
【发布时间】:2016-02-18 05:12:46
【问题描述】:

我正在阅读教科书Computer Systems 4th Edition。下面的问题是在 Pep/8 虚拟计算机的上下文中。在练习中,我得到了这个问题:

将以下汇编语言伪操作转换为十六进制机器语言:

  1. .ASCII "熊\x00"
  2. .BYTE 0xF8
  3. .WORD 790

我正在尝试将这些值转换为十六进制,但我无法理解教科书对该过程的解释,而且我觉得这本书没有给出太多解释。

对于第一个答案,我认为这是在 ASCII 转换表中的简单查找:

42 65 61 72 00

本题答案如下:

  1. 42 65 61 72 00
  2. F8
  3. 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


【解决方案1】:

所以数字 2... 是十六进制形式。

只需将其更改为 8 位二进制形式

例如....

如果你有 0xA7....

在十进制中,这是 167

答案是…… 在无符号二进制中 10100111

这是对问题的解释,这是您的意思吗?你还有信息吗?

【讨论】:

  • 谢谢!我没想到这么简单。这本书根本不清楚转换过程。
  • 没问题,我相信它们的意思是 32 位大小的二进制字,对吧?
  • 书中说,“.WORD 命令为加载程序生成代码。它总是生成一个字(两个字节)的代码,而不是任意数量的字节。”他们使用 .WORD 5 的示例表示 .WORD 0x0030,这意味着“生成一个值为 0030(十六进制)的单词。”
  • 这是汇编语言?它今天在生产中使用吗?还是为学习目的而创建的?
  • 这本书使用最多的语言似乎是 Pep\8。
猜你喜欢
  • 2019-05-16
  • 1970-01-01
  • 2014-03-24
  • 2021-11-08
  • 1970-01-01
  • 2012-06-02
  • 2020-07-21
  • 2014-05-15
  • 2015-07-17
相关资源
最近更新 更多