【问题标题】:Adding two’s complements of a negative HEXADECIMAL number添加负十六进制数的补码
【发布时间】:2016-10-22 07:38:30
【问题描述】:

我目前正在上一门汇编课,这门课的老师显然早就忘记了简单或复杂,因此倾向于直接跳过简单的例子,变成复杂的例子。

我们刚刚开始编写我们的第一个程序,一个 hello world 风格的开头。

A) 在这种情况下,我们如何声明一个以 null 结尾的字符串?可以使用什么命令来做到这一点?

B) 她从来没有在课堂上讲过 EXPORT 命令——它是如何工作的?

C) 当她说它必须与代码区命名不同时——数据区命名是免费的吗?还是我们必须使用某些词?

感谢任何可以帮助我的人-我觉得我在这里淹没在复杂性中,没有好的资源可以提供帮助。也就是说,作为最后一个问题 - 是否有任何好的在线资源可以自学 ArmV7 组装?很明显,她不会在课堂上把这个教到我能理解的水平(大部分课都掉了,但我负担不起),而且我在尝试从 Arm Docs 中自学时落后了——所以是对于试图通过基本上没有教授的课程的人,您有什么好的代码学院风格的汇编课程推荐吗?

【问题讨论】:

  • 仔细阅读她给你的代码——你的要点中的许多要求已经为你编写好了。 DATA 部分已经回答了您的问题 A。您的问题 B 在代码的 cmets 中显示了信息。问题 C 它们已经以不同的方式命名。首先让发布的代码正常工作,然后尝试根据要求的具体金额对其进行修改。

标签: assembly arm armv7


【解决方案1】:

A) 在这种情况下,以空字符结尾的字符串是指 ASCII 编码的字符串。 ASCII 编码确实每个字形使用 7 位(0-127 值),但为方便起见,使用了整个字节(8 位,0-255 值)。 “空终止”表示值 0 标记此类字符串的结尾。所以字节65, 0 形成字符串“A”,A 后面有零字节。

来自示例源:a DCB "86590", 0 - DCB 可能类似于“声明字节”,"86590" 是您的汇编程序从源中的 ASCII 字符串生成字节值的一种方式(每个字符都是一个值,例如最后一个'0' 等于48(参见ASCII 表),并且终止0 以经典方式作为数字附加。

示例中的那一行可以写成
a DCB 0x38, 0x36, 0x35, 0x39, 0x30, 0x00
^ 将产生相同的字节值,只是源以不同的方式写入。

B) EXPORT 将使生成的目标文件中的某些符号“公开”,因此链接器将看到它并可以将不同的目标文件与这些符号连接起来。如果您删除 EXPORT main,链接将失败,“main”未定义。

C) 从未见过这种特殊的汇编器,但从示例中代码区域的名称为“AddIntsIn2sComp”,数据区域的名称为“intData”,两者看起来都是任意的“人类”名称,只是避免使用空格。因此,只要您将 2-3 个单词连接在一起,它就可以工作(在最坏的情况下,请参阅您的编译器语法手册)。

【讨论】:

    猜你喜欢
    • 2013-10-20
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 2014-11-03
    • 2016-05-24
    • 2013-06-12
    • 1970-01-01
    • 2011-10-05
    相关资源
    最近更新 更多