История изменений
Исправление proud_anon, (текущая версия) :
если размеры их равны, то и там и там я должен идти или с шагом в 4байта или с шагом в 8байт.
int** у тебя лежит в регистре, размер которого 64 бита.
int* у тебя лежит в регистре, размер которого 64 бита. Попадает он туда из памяти по инструкции movq, которая перемещает 64 бита. Правда, у тебя в посте просто «mov», но если я правильно помню синтаксис AT&T, это либо опечатка, либо ассемблер сам догадывается, что должно быть movq.
Поэтому размеры их равны, оба занимают 64 бита.
Их размер никак не зависит от того, какие числа к ним нужно прибавлять или отнимать.
А чтобы понять, какие числа надо прибавлять и как куда надо шагать, ответь на такой вопрос.
В регистре %rbx лежит адрес массива из трёх int'ов, каждый из которых больше ноля. В регистре %rax лежит ноль. Я хочу, чтобы первый int из массива, адрес которого лежит в %rbx, попал в %rax. Как мне это сделать? Варианты ответа:
а) movq (%rbx), %rax
б) movl (%rbx), %eax
Исправление proud_anon, :
если размеры их равны, то и там и там я должен идти или с шагом в 4байта или с шагом в 8байт.
int** у тебя лежит в регистре, размер которого 64 бита.
int* у тебя лежит в регистре, размер которого 64 бита. Попадает он туда из памяти по инструкции movq, которая перемещает 64 бита. Правда, у тебя в посте просто «mov», но если я правильно помню синтаксис AT&T, это либо опечатка, либо ассемблер сам догадывается, что должно быть movq.
Поэтому размеры их равны, оба занимают 64 бита.
Их размер никак не зависит от того, какие числа к ним нужно прибавлять или отнимать.
А чтобы понять, какие числа надо прибавлять и как куда надо шагать, ответь на такой вопрос.
В регистре %rbx лежит адрес массива из трёх int'ов, которые больше нуля. В регистре %rax лежит 0. Я хочу, чтобы первый int из массива, адрес которого лежит в %rbx, попал в %rax. Как мне это сделать? Варианты ответа:
а) movq (%rbx), %rax
б) movl (%rbx), %eax
Исходная версия proud_anon, :
если размеры их равны, то и там и там я должен идти или с шагом в 4байта или с шагом в 8байт.
int** у тебя лежит в регистре, размер которого 64 бита.
int* у тебя лежит в регистре, размер которого 64 бита. Попадает он туда из памяти по инструкции movq, которая перемещает 64 бита. Правда, у тебя в посте просто «mov», но если я правильно помню синтаксис AT&T, это либо опечатка, либо ассемблер сам догадывается, что должно быть movq.
Поэтому размеры их равны, оба занимают 64 бита.
Их размер никак не зависит от того, какие числа к ним нужно прибавлять или отнимать.
А чтобы понять, какие числа надо прибавлять и как куда надо шагать, ответь на такой вопрос.
В регистре %rbx лежит адрес массива из трёх int'ов. В регистре %rax лежит 0. Я хочу, чтобы первый int из массива, адрес которого лежит в %rbx, попал в %rax. Как мне это сделать? Варианты ответа:
а) movq (%rbx), %rax
б) movl (%rbx), %eax