Төмендегі құрастыру коды; кодтың әрбір жолы не істеп жатқанын түсіндіру үшін түсініктемелерді қосыңыз; бір сөйлеммен бұл процедураның не істеуге тырысатынын түсіндіріңіз.
new-proc:
sll $a0, $a0, 16
srl $a0, $a0, 16
add $v0, $a0, $zero
jr $ra
«new-proc» процедурасы a0 регистрінің мәнін 16 битке солға жылжытады, содан кейін оны 16 битке оңға жылжытады, v0 мәнін a0 мәніне орнатады және шақырушы функцияға қайта оралады.
Төмендегі құрастыру кодын оқыңыз; кодтың әрбір жолы не істеп жатқанын түсіндіру үшін түсініктемелерді қосыңыз; a0 және a1 кіріс аргументтерінің функциясы ретінде v0 қайтару мәнін өрнектеу үшін қарапайым теңдеуді қамтамасыз етіңіз. (30 points)
new-proc:
blt $a1, $zero, loop2
loop1:
beq $a1, $zero, proc-end
sll $a0, $a0, 1
addi $a1, $a1, -1
j loop1
loop2:
beq $a1, $zero, proc-end
srl $a0, $a0, 1
addi $a1, $a1, 1
j loop2
proc-end:
add $v0, $a0, $zero
jr $ra
«new-proc» процедурасы a1 регистріндегі мәннің нөлден аз екенін тексереді. Егер солай болса, ол «2 цикліне» өтеді. Әйтпесе, ол «loop1» ішіне кіреді және a0 мәнін 1-ге солға жылжытады және a1 мәні нөлге айналғанша азайтады, содан кейін «proc-end» мәніне өтеді. "2 циклінде" процедура a0 мәнін 1-ге оңға жылжытады және a1 мәнін нөлге айналғанша арттырады, содан кейін "proc-end" мәніне өтеді. "proc-end" кезінде ол v0 мәнін a0 мәніне орнатады және шақыру функциясына қайта оралады. v0 қайтару мәнін v0 = a0 * 2^(a1_init-a1_final) түрінде көрсетуге болады, мұндағы a1_init – a1 регистріндегі бастапқы мән және a1_final – a1 тізіліміндегі соңғы мән.
Төмендегі (псевдо) құрастыру коды үшін стекке мәндерді сақтау/қалпына келтіру және стек көрсеткішін жаңарту үшін X, Y, P және Q нұсқауларының ең кіші жиынтығымен ауыстырыңыз. procA және procB қоңырау шалушы сақтаған және қоңырау шалушы сақтаған регистрлерге арналған MIPS нұсқауларын орындайтын екі түрлі бағдарламашымен тәуелсіз жазылған деп есептейік. Басқаша айтқанда, екі бағдарламашы кіріс аргументтерін өңдейтін және procB мәнін қайтаратын регистрлер туралы келіседі, бірақ олар басқа адам жазған кодты көре алмайды. $fp procA немесе procB пайдаланбайды делік. Қоңырау шалушы және қоңырау шалушы сақтаған тіркелімдерге арналған MIPS нұсқауларын түсіну үшін алдымен сынып жазбаларын оқып шығыңыз.
Достарыңызбен бөлісу: |