Assembly .Data 初始化 4 位值

标签 assembly x86

我正在尝试将 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 生成为位串。请注意,00001111an octal constant (because of the leading 0 and no radix character) ,不是二进制。为此,您需要 0b

一些汇编器,如 NASM,也接受 010101b(后缀),而一些汇编器支持后缀形式。

关于Assembly .Data 初始化 4 位值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38755642/

相关文章:

assembly - 无法将 8 位地址移动到 16 位寄存器

assembly - 从哪里获得硬件的 I/O 端口地址分配?

c++ - 试除法代码在 Windows 上运行 32 位比在 Linux 上运行 64 位快 2 倍

c++ - std::memory_order_XXX 是如何工作的

c++ - x86 上简单循环中的慢速指令

c - GCC 更改为小于或等于

c++ - 如何在汇编程序中增加指针字母?

x86 - X86 处理器中的辅助标志

assembly - 操作码的十六进制值

linux - 汇编代码不识别?和@data