LINUX.ORG.RU

История изменений

Исправление 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