小编Sea*_*ean的帖子

为什么在将 unsigned char 转换为有符号数据类型时在汇编中使用 movzbl?

我正在学习MOV汇编中的数据移动()。
我尝试编译一些代码以查看 x86_64 Ubuntu 18.04 机器中的程序集:

typedef unsigned char src_t;
typedef xxx dst_t;

dst_t cast(src_t *sp, dst_t *dp) {
    *dp = (dst_t)*sp;
    return *dp;
}
Run Code Online (Sandbox Code Playgroud)

哪里。src_tunsigned char至于,dst_t我试过了char,,shortintlong结果如下所示:

// typedef unsigned char src_t;
// typedef char dst_t;
//  movzbl  (%rdi), %eax
//  movb    %al, (%rsi)

// typedef unsigned char src_t;
// typedef short dst_t;
//  movzbl  (%rdi), %eax
//  movw    %ax, (%rsi)

// typedef unsigned …
Run Code Online (Sandbox Code Playgroud)

c assembly casting mov zero-extension

5
推荐指数
1
解决办法
1495
查看次数

为什么函数`strtoll` 给出错误值并将errno 设置为34?

这是我的 C 代码:

    char *ptr = "0xfff1342809062Cac";
    char *pEnd;
    long long value = strtoll(ptr, &pEnd, 0);
    printf("%lld\n", value);
    printf("errno: %d\n", errno);
Run Code Online (Sandbox Code Playgroud)

我是用gcc-8.3.0编译的,输出是:

9223372036854775807
errno: 34
Run Code Online (Sandbox Code Playgroud)

我很困惑 strtoll 给出了一个意想不到的值并将 errno 设置为 34。

c strtol

3
推荐指数
1
解决办法
50
查看次数

标签 统计

c ×2

assembly ×1

casting ×1

mov ×1

strtol ×1

zero-extension ×1