Основные понятия цифровой логики
Дополнительные материалы для объединенного семинара MIPSfpga и Connected MCU от Imagination Technologies
Октябрь-Ноябрь 2016
Контрольная работа 3.2. Компиляция с языка C в MIPS Ассемблер
Имя ___________________________________________________________________
1. Для чего используют программный стек при программировании на ассемблере?
a) Стек необходим для хранения адресов возврата для вложенных вызовов функций
b) Стек используется для передачи параметров функции когда не хватает места в регистрах
c) Стек используется для выделения места для временных переменных, при отсутствии места в регистрах
d) Стек используется для сохранения на время значений регистров при вызове функции
e) Все вышеизложенное
2. Какой код MIPS Ассемблера соответствует следующему C коду?
int e;
void f (int a, int b, int mask)
{
e = (a & mask) | (b & ~ mask);
}
////////// a //////////
f:
li $3,1
beq $4,$3,.L3
li $3,2
beq $4,$3,.L6
nop
bne $4,$0,.L9
nop
lw $2,%gp_rel(a)($28)
j $31
sltu $2,$0,$2
.L3:
li $2,2
lw $3,%gp_rel(b)($28)
j $31
movz $2,$0,$3
.L6:
move $2,$0
.L9:
j $31
nop
////////// b //////////
f:
addiu $sp,$sp,-24
sw $31,20($sp)
sw $16,16($sp)
move $16,$4
beq $4,$0,.L2
li $2,1
jal f
addiu $4,$4,-1
mul $2,$2,$16
.L2:
lw $31,20($sp)
lw $16,16($sp)
j $31
addiu $sp,$sp,24
////////// c //////////
f:
slt $3,$5,$4
bne $3,$0,.L5
nop
addu $2,$2,$4
.L4:
addiu $4,$4,1
slt $3,$5,$4
beq $3,$0,.L4
addu $2,$2,$4
subu $2,$2,$4
.L5:
j $31
nop
////////// d //////////
f:
nor $2,$0,$6
and $5,$2,$5
and $4,$4,$6
or $2,$5,$4
j $31
sw $2,%gp_rel(e)($28)
////////// e //////////
f:
lui $3,%hi(a)
addiu $3,$3,%lo(a)
addiu $5,$3,40
.L3:
lw $4,0($3)
addiu $3,$3,4
bne $3,$5,.L3
addu $2,$2,$4
j $31
nop
///////////////////////
Контрольная работа составлена Юрием Панчулом