C语言 如何将一个16位的数分解为两个8位的数?



我在C中有这段代码,我想在nasm中,将16位分解为两个8位,我该怎么做?C

uint16_t data = 0xCAFE; // global
uint8_t result[2];
...
decompose();
printf(
"result %d %d n", 
result[0], result[1]
);

ASM

global decompose
decompose:
enter 0,0
movzx ax, word[data],
movzx al, [ax]
leave
ret

首先:创建具有全局副作用的函数是非常糟糕的设计,例如通过全局变量获取其参数或传递其结果。
second:绝对没有理由在这上面使用汇编。特别是当您将结果传递给相当慢的打印例程时。

如果你真的想有这样的函数,我建议引入小的内联函数

static inline uint8_t u16High(uint16_t v){ return (uint8_t)(v >> 8); }
static inline uint8_t u16Low (uint16_t v){ return (uint8_t)(v);      }

另一个选项(在我看来很难看)是:

static inline uint8_t* u16decompose(uint16_t* v){ return (uint8_t*)v; }

但要注意:这只允许uint8_t*,你不能使用它来将uint32_t"分解"为uint16_t,因为这违反了严格的混叠规则。

最新更新