我正在尝试将 4 位二进制序列初始化为汇编程序。
.data
x: .byte 00001111
我相信这应该可以解决我的问题,但我想知道是否有办法将其限制为仅是 4 个最低有效位。
是否有仅 4 位的特定数据类型?
最佳答案
任何内容的最小大小都是 1 个字节。没有办法将两个单独的汇编器指令组合成一个字节。您正在使用 GNU as
语法,但这适用于所有汇编程序:它们将 bytes 汇编到输出中。
汇编器的当前输出位置(GNU语法中的.
,NASM语法中的$
)总是一个整数字节,而不是N字节+M位。没有 .nibble
或 .bit
指令。
此汇编器设计决策独立于(但相关)内存在现代硬件中是字节可寻址但不可位寻址的事实。 (即,如果你想要一点,你必须加载包含的字节并 shift + 屏蔽它)。
如果你想将两个独立的半字节打包成一个字节,你需要将它们组合为一个带有表达式的 .byte
指令(或 .long 或其他)的参数。例如
x: .byte 0bABCD <<4 | 0bEFGH
将 ABCDEFGH 生成为位串。请注意,00001111
是 an octal constant (because of the leading 0 and no radix character) ,不是二进制。为此,您需要 0b
。
一些汇编器,如 NASM,也接受 010101b
(后缀),而一些汇编器仅支持后缀形式。
关于Assembly .Data 初始化 4 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38755642/