Bare Machine OFF, Allow Pseudo Instructions ON, Load Trap File ON, Delayed Branches OFF, Delayed Loads OFF, Mapped IO ON, Quiet OFF
Автор: Warfat • Май 17, 2023 • Лабораторная работа • 3,241 Слов (13 Страниц) • 171 Просмотры
Лабораторна робота №6
з дисципліни «Архітектура комп’ютерів»
Глава 31
Bare Machine OFF, Allow Pseudo Instructions ON, Load Trap File ON, Delayed Branches OFF, Delayed Loads OFF, Mapped IO ON, Quiet OFF
Завдання №1. Арифметичний вираз.
Напишіть програму, яка обчислює значення такого арифметичного виразу для значень x і y, введених користувачем:
5,4xy - 12,3y + 18,23x - 8,23
Лістинг програми:
.data
strEnterX: .asciiz "Enter x: "
strEnterY: .asciiz "Enter y: "
x: .float 1.0
y: .float 1.0
a: .float 5.4
bb: .float 12.3
c: .float 18.23
d: .float 8.23
.text
.globl main
main:
la $a0, strEnterX
li $v0, 4
syscall
li $v0, 6
syscall
mov.s $f1, $f0
la $a0, strEnterY
li $v0, 4
syscall
li $v0, 6
syscall
mov.s $f2, $f0
l.s $f3, a
l.s $f4, bb
l.s $f5, c
l.s $f6, d
mul.s $f7, $f3, $f1
mul.s $f7, $f7, $f2
mul.s $f0, $f4, $f2
sub.s $f7, $f7, $f0
mul.s $f0, $f5, $f1
add.s $f7, $f7, $f0
sub.s $f7, $f7, $f6
mov.s $f12,$f7
li $v0,2
syscall
li $v0, 10
syscall
[pic 1]
Рис.1. Результат роботи
Завдання №2. Гармонійний ряд.
Напишіть програму, яка обчислює суму першої частини гармонічного ряду:
1/1 + 1/2 + 1/3 + 1/4 + ...
Ця сума стає все більшою і більшою без обмежень у міру додавання нових термінів. Попросіть у користувача кількість термінів для підсумку, обчисліть суму та роздрукуйте її.
Лістинг програми:
.data
strEnter: .asciiz "Enter count: "
.text
.globl main
main:
la $a0, strEnter
li $v0, 4
syscall
li $v0, 5
syscall
li $t0, 0
li.s $f1, 1.0
li.s $f2, 1.0
loop:
beq $t0, $v0, exit
nop
div.s $f6, $f1, $f2
add.s $f7, $f7, $f6
add.s $f2, $f2, $f1
addiu $t0, $t0, 1
j loop
exit:
nop
mov.s $f12,$f7
li $v0,2
syscall
li $v0, 10
syscall
[pic 2]
Рис.2. Результат роботи
Завдання №3. Кольори RGB веб –сторінки.
Кольори на веб-сторінці часто кодуються як 24-розрядне ціле число наступним чином:
RRGGBB
При цьому кожен R, G або B є шістнадцятковою цифрою 0..F. Цифри R показують кількість червоного кольору, цифри G – кількість зеленого, а цифри B – кількість синього. Кожна сума знаходиться в діапазоні 0..255 (діапазон одного байта). Ось кілька прикладів:
[pic 3]
Інший спосіб, яким колір іноді виражається, — це три частки від 0,0 до 1,0 для кожного з червоного, зеленого та синього. Наприклад, чистий червоний - (1,0, 0,0, 0,0), середній сірий - (0,5, 0,5, 0,5) тощо.
Напишіть програму, яка має номер кольору, оголошений у розділі даних, і яка записує кількість кожного кольору, виражену у вигляді десяткового дробу. Вставте кожне число кольору в 32 біта, а старший байт встановіть нулями:
.data
color: .word 0x00FF0000 # pure red, (1.0, 0.0, 0.0)
Лістинг програми:
.data
color: .word 0x00FF0000
strComma: .asciiz ", "
.text
.globl main
main:
lw $t0, color
srlv $t1, $t0, 16
mtc1 $t1, $f1
cvt.s.w $f1, $f1 #інвертація з int в float
...