В вашем первом фрагменте происходят две разыменования указателя:
movq (%rdi), %rax
movb (%rax), %al
То есть 8-байтовая ячейка памяти, указанная rdi
, загружается в rax
.Затем 1-байтовая ячейка памяти, указанная rax
, загружается в al
.Вы можете думать об этом как о полном разыменовании указателя на указатель на char
(т. Е. char **
).
В то время как в вашем втором фрагменте, movb (%rdi), %al
, естьразыменование одного указателя, т. е. 1-байтовое местоположение, на которое указывает rdi
, загружается в al
.Вы можете думать об этом как о разыменовании указателя на char
(то есть, char *
).