Лабораторна робота з «Архітектура комп’ютерів»
Автор: Hack Net • Декабрь 10, 2021 • Лабораторная работа • 7,496 Слов (30 Страниц) • 304 Просмотры
МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ
ДЕРЖАВНИЙ ВИЩИЙ НАВЧАЛЬНИЙ ЗАКЛАД
«УЖГОРОДСЬКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ»
ІНЖЕНЕРНО-ТЕХНІЧНИЙ ФАКУЛЬТЕТ
КАФЕДРА КОМП’ЮТЕРНИХ СИСТЕМ ТА МЕРЕЖ
Лабораторна робота №5
з дисципліни «Архітектура комп’ютерів»
студента 2-ст курсу
спеціальності 123 –
«комп’ютерна інженерія»
Рикавця Едуарда Васильовича
Ужгород – 2021р
Глава 25
Bare Machine OFF, Allow Pseudo Instructions ON, Load Trap File ON, Delayed Branches ON, Delayed Loads ON, Mapped IO ON, Quiet OFF
Завдання 1
Напишіть програму для оцінки 3ab - 2bc - 5a + 20ac - 16
Запросіть користувача про значення a, b, та c. Намагайтеся використовувати невелику кількість регістрів. Використовуйте стек для утримання проміжних значень. Запишіть остаточне значення на монітор.
Лістинг програми:
.data
aa: .word 2
bb: .word 3
cc: .word 4
.text
.globl main
main:
lw $t0,aa
lw $t1,bb
mul $t0, $t0, $t1
mul $t0, $t0, 3
subu $sp, $sp, 4
sw $t0, 0($sp)
lw $t0, bb
lw $t1, cc
mul $t0, $t0, $t1
mul $t0, $t0, 2
subu $sp, $sp, 4
sw $t0, 0($sp)
lw $t0, aa
mul $t0, $t0, 5
subu $sp, $sp, 4
sw $t0, 0($sp)
lw $t0, aa
lw $t1, cc
mul $t0, $t0, $t1
mul $t0, $t0, 20
subu $t0, $t0, 16
lw $t1, 0($sp)
addu $sp, $sp, 4
subu $t0, $t0, $t1
lw $t1, 0($sp)
addu $sp, $sp, 4
subu $t0, $t0, $t1
lw $t1, 0($sp)
addu $sp, $sp, 4
addu $t0, $t0, $t1
li $v0, 1
move $a0, $t0
syscall
li $v0, 10
syscall
[pic 1]
Рис.1. Результат програми
Завдання 2
Напишіть програму, яка запитує у користувача рядок. Зчитайте рядок у буфер, а потім поверніть рядок за допомогою стека. Однак, на відміну від прикладу в главі, не натискайте нульовий символ у стеку. Слідкуйте за кількістю символів у стеку, збільшуючи кількість під час кожного натискання символу та зменшуючи його щоразу, коли символ вискакує. Випишіть зворотний рядок.
Лістинг програми:
.data
buffer: .space 1024
.text
.globl main
main:
li $v0,8
la $a0,buffer
li $a1,1024
syscall
li $t0, 0
startPushInStack:
lbu $t2, buffer($t0)
beqz $t2, stackFull
subu $sp, $sp, 4
sw $t2, 0($sp)
addu $t0, 1
j startPushInStack
stackFull:
li $t1, 0
startPushInBuffer:
blez $t0, exitPushInBuffer
lw $t2, 0($sp)
addu $sp, $sp, 4
sb $t2, buffer($t1)
addu $t1, 1
subu $t0, $t0, 1
j startPushInBuffer
exitPushInBuffer:
li $v0, 4
la $a0, buffer
syscall
li $v0, 10
syscall
[pic 2]
Рис.2. Результат програми
Завдання 3
Напишіть програму, яка запитує у користувача рядок. Прочитайте рядок у буфер. Тепер відскануйте рядок справа наліво, починаючи з крайнього правого символу (це той, що знаходиться безпосередньо перед нульовим завершенням.) Натисніть кожен неголосний символ на стек. Пропустіть голосні.
Тепер поверніть стек символ за символом назад у буфер. Вставте символи в буфер справа наліво. Завершіть рядок нульовим байтом. Буфер тепер міститиме рядок у правильному порядку без голосних.
...