R0 CREW

Вопросы по mips

это наверное какой то пролог. и я не знаю где об этом всём узнать, чтобы понимать что же такое происходит и для чего. вот пример.

            ;-- main:
            0x00400890      27bdff88       addiu sp, sp, -0x78
            0x00400894      afbf0074       sw ra, 0x74(sp)
            0x00400898      afbe0070       sw fp, 0x70(sp)
            0x0040089c      03a0f025       move fp, sp
            0x004008a0      3c1c0042       lui gp, 0x42
            0x004008a4      279c9010       addiu gp, gp, -0x6ff0
            0x004008a8      afbc0018       sw gp, 0x18(sp)
            0x004008ac      afc40078       sw a0, 0x78(fp)
            0x004008b0      afc50024       sw a1, 0x24(fp)
            0x004008b4      8f828068       lw v0, -0x7f98(gp)          ; [0x411078:4]=0
            0x004008b8      8c420000       lw v0, (v0)
            0x004008bc      afc2006c       sw v0, 0x6c(fp)
            0x004008c0      00003025       move a2, zero
            0x004008c4      24050002       addiu a1, zero, 2
            0x004008c8      24040002       addiu a0, zero, 2
            0x004008cc      8f828040       lw v0, -sym.imp.socket(gp)  ; [0x411050:4]=0x400c60 sym.imp.socket
            0x004008d0      0040c825       move t9, v0
            0x004008d4      0320f809       jalr t9
            0x004008d8      00000000       nop

куча присвоений туда сюда, а для вызова сокета уже перед самим вызовом назначаются аргументы. можете построчно объяснить код? и что для чего. если кому не охота, то может материал посоветуете.

Гуглишь MIPS ISA (Instruction Set Architecture) и вперед.
Как вариант

В интернете нашел пример программы. там есть такой код.

loc_48:
		move	$s6, $a0
		addiu	$s5,$0,-1
		li	$s4, 0x10010
		addu	$s4, $sp
		addiu	$s7, $sp, 0x10
		addiu	$s1, $sp, 0x10

в начале стэк выделяет память.

addiu	$sp,-0x10

что тогда значит эта конструкция?

		addiu	$s1, $sp, 0x10

просто я изучаю одну программу, а там было выделено под стек -0x120. а потом в одном месте.

addiu s1, sp, 0x44

и не понятно что это имеется ввиду. если это присваивается переменная, то почему через стек, а не простое обращение по адресу? потом в эту переменную нужно с помощью memcpy копировать данные, и я не понимаю что это за переменная. объем скопированных данных большой - 160 байт вроде. я не могу воспроизвести код, не пойму как он на си пишется. попытки ни к чему не привели. как должен выглядеть этот код, который я последний привел пример?

Вам же лень в ЛС отвечать - так сами и допрёте. :grinning:

Ну так то я уже понял что как. сообщение уже не стал удалять, может вдруг кто что ещё подскажет по этому поводу.