его определяет как :
snprintf(errbuf,16,”Error”)
а в листинге выглядет это так:
la $t9,snprintf
la $a0,errbuf
addiu $a2,$s1,0x24FA ; “Error”
jalr $t9
li $a1,0x10
Вопрос, почему в регистр а1, 16 заносится после вызова snprintf?
А не до
Это не ляп. В мипсе и в некоторых других RISC-процессорах есть такая штука, как delay slot. Пока выполнялся джамп, конвейер процессора уже загрузил следующую за ним инструкцию. Но конвейер вроде бы надо сбрасывать, потому что мы перешли по новому адресу. А инструкцию терять жалко. Поэтому пока грузится первая инструкция по новому адресу, процессор выполняет уже загруженную — ту, которая шла за джампом. Иногда, если выполнять ничего не нужно, там стоит nop.
Переводя на простой язык, можно в коде поставить команду после jaump и процессор ее выполнит в то время, пока выполняетcя jaump?
Да. Можно в уме переставлять их местами.
а если там стоит джамп?
Да какая разница, английский же не нужно знать для программирования
Jump конечно. А идея дать линейному участку кода "последнее слово", раз уж все равно все готово - великолепна!
Обсуждают сегодня