gpt4 book ai didi

linux - `xorb %b1, %b1` 中的 %b1(b one,不是 b L) 是什么?

转载 作者:太空宇宙 更新时间:2023-11-04 05:39:48 25 4
gpt4 key购买 nike

我正在阅读copy_from_user函数,在copy_from_user函数中,使用了宏__get_user_asm

linux中有一个mmap系统调用,mmap系统调用会调用函数copy_from_user。如果大小不变,此函数将使用宏__get_user_asm__get_user_asm的内容是

#define __get_user_asm(x, addr, err, itype, rtype, ltype, errret)   \
asm volatile("1: mov"itype" %2,%"rtype"1\n" \
"2:\n" \
".section .fixup,\"ax\"\n" \
"3: mov %3,%0\n" \
" xor"itype" %"rtype"1,%"rtype"1\n" \
" jmp 2b\n" \
".previous\n" \
_ASM_EXTABLE(1b, 3b) \
: "=r" (err), ltype(x) \
: "m" (__m(addr)), "i" (errret), "0" (err))

当我尝试翻译时__get_user_asm(*(u8 *)dst, (u8 __user *)src, ret, "b", "b", "=q", 1); 到真实来源,

1: movb %2,%b1\n
2:\n
.section .fixup, "ax" \n
3: mov %3, %0 \n
**xorb %b1, %b1\n**
jmp 2b\n
.previous\n

: "=r" (ret), =q(dst)
:"m"(dst), "i"(1), "0"(ret)

.quad "1b", "2b"\n
.previous\n```

,有些地方不明白。

1,在xorb %b1, %b1中,%b1是什么(b 1,而不是 b L)?

2、jmp 2b中,2b是标签还是memroy地址?如果2b是一个标签,我怎样才能找到这个标签?

3、.quad "1b", "2b"的作用是什么?

从哪里可以获得使我理解linux内核源码语义层的知识?

最佳答案

阅读docs对于 gcc 的扩展 asm,我们看到 %1 指的是第二个参数(因为参数编号是从零开始的)。在您的示例中,这是 dst

描述了添加b(即%b1)here :

Modifier Description                             Operand  masm=att  masm=intel
b Print the QImode name of the register. %b0 %al al

jmp 2b 表示向后查找名为 2 的标签。

定义了.quad指令here :

.quad expects zero or more bignums, separated by commas. For each bignum, it emits an 8-byte integer. If the bignum won't fit in 8 bytes, it prints a warning message; and just takes the lowest order 8 bytes of the bignum.

至于从哪里获取信息,希望我提供的链接有帮助。

关于linux - `xorb %b1, %b1` 中的 %b1(b one,不是 b L) 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39802077/

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