@xverizex

Объясните кусок кода?

изучаю ассемблер mips на примере своей программы. я приведу комментарии что понятно, а что нет.
0x0040093c      lw gp, (arg_18h)       ; зачер в gp загружать аргумент 18?
0x00400940      sw v0, (sock)            ; перед этим кодом вызывалась функция socket, и результат был в v0; это сохраняет в переменной sock значения сокета.
0x00400944      addiu v0, zero, 1      ; присвоить v0 число 1
0x00400948      sw v0, (optval)         ; и сохранить в переменной optval
0x0040094c      addiu v1, fp, 0x28    ; вот это не ясно что делает.
0x00400950      addiu v0, zero, 4      ; это на этапе компиляции sizeof ( optval ) вычисляет как int число 4 байта
0x00400954      sw v0, (var_68h)       ; и сохранить его в переменной
0x00400958      move a3, v1             ; вот это четвертый аргумент в setsockopt, это указатель на optval, но как он получился?
0x0040095c      addiu a2, zero, 0x200 ;  это третий аргумент
0x00400960      ori a1, zero, 0xffff ;  ; это второй аргумент
0x00400964      lw a0, (sock)  ; это первый аргумент
0x00400968      lw v0, -_MIPS_STUBS_(gp) ; 0x411088   ; загрузить в v0 указатель на функцию.
0x0040096c      move t9, v0 ; зачем перемещать в временную переменную
0x00400970      jalr t9     ; выполнить функцию

и вообще мне не понятно как передается пятый аргумент. последнее где была работа с пятым аргументом это
0x00400954      sw v0, (var_68h)       ; и сохранить его в переменной

но он только сохраняет в переменную, а она врядли передается функции. объясните пожалуйста.
  • Вопрос задан
  • 53 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы