gpt4 book ai didi

汇编语言 IA32 - 将 char 移至 int

转载 作者:行者123 更新时间:2023-12-02 22:10:45 28 4
gpt4 key购买 nike

CSAPP练习3.4中

src_t v;
dest_t *p;

*p = (dest_t) v;

src_tchardest_tint时,答案为

movsbl %al, (%edx)

(v 存储在 %eax%ax%al 中,p 存储在 %edx 中)。当src_tchardest_tunsigned时,答案是

movsbl %al, (%edx)

也是。

为什么当char类型为非负时我们必须使用movsbl而不是movzl

最佳答案

扩展指令的选择反射(reflect)了字符类型的符号。

gcc 可以让您控制字符的符号,这样您就可以很容易地看到它会为每种可能性产生什么转换。

来源:

unsigned char_to_int(char *s) {
return *s;
}

默认输出:

movl    4(%esp), %eax
movsbl (%eax), %eax
ret

使用-funsigned-char输出:

movl    4(%esp), %eax
movzbl (%eax), %eax
ret

使用-fsigned-char输出:

movl    4(%esp), %eax
movsbl (%eax), %eax
ret

请记住,这只是一个平台上一个编译器的输出。对于不同的编译器或在不同平台上运行的 gcc,默认符号可能会有所不同。

关于汇编语言 IA32 - 将 char 移至 int,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27831346/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com