Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 用于取消对字符指针的引用并返回结果的汇编指令_Assembly_X86_X86 64_Att - Fatal编程技术网

Assembly 用于取消对字符指针的引用并返回结果的汇编指令

Assembly 用于取消对字符指针的引用并返回结果的汇编指令,assembly,x86,x86-64,att,Assembly,X86,X86 64,Att,我的CS书中的一个练习要求为一个函数提供一个简短的(x86-64)汇编代码段,该函数将char指针作为参数并返回它所指向的(第一个)字符 书中提出的解决方案如下: movq (%rdi), %rax movb (%rax), %al 我本以为一个指示就足够了: movb (%rdi), %al 两者是否相等?我遗漏了什么?在您的第一个代码段中,出现了两个指针取消引用: movq (%rdi), %rax movb (%rax), %al 也就是说,rdi指向的8字节内存位置被加载到rax中

我的CS书中的一个练习要求为一个函数提供一个简短的(x86-64)汇编代码段,该函数将char指针作为参数并返回它所指向的(第一个)字符

书中提出的解决方案如下:

movq (%rdi), %rax
movb (%rax), %al
我本以为一个指示就足够了:

movb (%rdi), %al

两者是否相等?我遗漏了什么?

在您的第一个代码段中,出现了两个指针取消引用:

movq (%rdi), %rax
movb (%rax), %al
也就是说,
rdi
指向的8字节内存位置被加载到
rax
中。然后,将
rax
指向的1字节内存位置加载到
al
中。您可以将其视为完全取消对指向
char
(即
char**
)的指针的引用


而在第二个代码段中,
movb(%rdi),%al
,存在一个单指针解引用,即,
rdi
指向的1字节位置加载到
al
。你可以把它看作是对一个指向
char
(即
char*
)的指针的解引用。

第一个指针进行两次解引用,就像你有一个双指针一样。这是哪本书,所以被同一本书中的相同错误所迷惑的未来读者可以更容易地找到它?哦,所以它不是
char*
arg.:或者它通过引用,而你忘了提到这一点。不知道如何解决这个误导性的问题。可能包括书中的实际措辞,然后答案可以纠正你对它的解释为
char*
。依我看,这要糟糕得多;你的新头衔没有那么具体。人们搜索和浏览问题标题时,不会知道问题是关于什么指令序列的。在问题主体中,“除其他外”并没有修改arg被声明为char指针的事实,我想我们还是把它留下吧。既然事实证明这不是一本书中的错误,那么来源就不那么重要了,我们不妨把它留下。有了这个特定的标题和一个有用的答案,也许它会有一些用处。