изучаю ассемблер 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) ; и сохранить его в переменной
но он только сохраняет в переменную, а она врядли передается функции. объясните пожалуйста.