diff --git a/uk-ua/mips-ua.html.markdown b/uk-ua/mips-ua.html.markdown index 20fa7638..8d4517fe 100644 --- a/uk-ua/mips-ua.html.markdown +++ b/uk-ua/mips-ua.html.markdown @@ -8,9 +8,9 @@ translators: lang: uk-ua --- -Мова асемблера MIPS (англ. Microprocessor without Interlocked Pipeline Stages) була написана для роботи з мікропорцесорами MIPS, парадигма яких була описана в 1981 році [Джоном Геннессі](https://uk.wikipedia.org/wiki/Джон_Лерой_Геннессі). Ці RISC процесори використовуються у таких вбудованих системах, як маршрутизатори та мережеві шлюзи. +Мова ассемблера MIPS (англ. Microprocessor without Interlocked Pipeline Stages) була написана для роботи з мікропроцесорами MIPS, парадигма яких була описана в 1981 році [Джоном Геннессі](https://uk.wikipedia.org/wiki/Джон_Лерой_Геннессі). Ці RISC процесори використовуються у таких вбудованих системах, як маршрутизатори та мережеві шлюзи. -[Read More](https://en.wikipedia.org/wiki/MIPS_architecture) +[Детальніше](https://en.wikipedia.org/wiki/MIPS_architecture) ```asm # Коментарі позначені як'#' @@ -22,7 +22,7 @@ lang: uk-ua .data # У цьому розділі дані зберігаються у пам'яті, виділеній в RAM, подібно до змінних # в мовах програмування вищого рівня - # Змінна оголошується наступним чином: [назва]: .[тип] [значенння] + # Змінна оголошується наступним чином: [назва]: .[тип] [значення] # Наприклад: hello_world: .asciiz "Hello World\n" # Оголосити текстову змінну num1: .word 42 # word - це чисельний тип 32-бітного розряду @@ -39,7 +39,7 @@ lang: uk-ua _float: .float 3.14 # 4 байти _double: .double 7.0 # 8 байтів - .align 2 # Вирівнення пам'яті даних, де число + .align 2 # Вирівнювання пам'яті даних, де число # показує кількість байтів, вирівнених # у степені 2. (.align 2 означає # чисельне (word) вирівнювання оскільки @@ -63,15 +63,15 @@ lang: uk-ua syscall # Виконує зазначену системну команду # з обраним аргументом ($a0) - # Регісти (використовуються, щоб тримати дані протягом виконання програми) + # Регістри (використовуються, щоб тримати дані протягом виконання програми) # $t0 - $t9 # Тимчасові регістри використовуються # для проміжних обчислень всередині # підпрограм (не зберігаються між # викликами функцій) - # $s0 - $s7 # Збережені регісти, у яких значення - # збегіраються між викликами підпрограм. - # Зазвичай збегрігаються у стеку. + # $s0 - $s7 # Збережені регістри, у яких значення + # зберігаються між викликами підпрограм. + # Зазвичай зберігаються у стеку. # $a0 - $a3 # Регістри для передачі аргументів для # підпрограм @@ -82,28 +82,28 @@ lang: uk-ua la $t0, label # Скопіювати адресу в пам'яті, де # зберігається значення змінної label # в регістр $t0 - lw $t0, label # Скопівати чисельне значення з пам'яті - lw $t1, 4($s0) # Скопівати чисельне значення з адреси - # пам'яті ресгіста зі зміщенням в + lw $t0, label # Скопіювати чисельне значення з пам'яті + lw $t1, 4($s0) # Скопіювати чисельне значення з адреси + # пам'яті регістра зі зміщенням в # 4 байти (адреса + 4) lb $t2, label # Скопіювати буквений символ в частину # нижчого порядку регістра $t2 lb $t2, 0($s0) # Скопіювати буквений символ з адреси # в $s0 із зсувом 0 - # Подіне використання і 'lh' для halfwords + # Подібне використання і 'lh' для halfwords - sw $t0, label # Збегігти чисельне значення в адресу в + sw $t0, label # Зберегти чисельне значення в адресу в # пам'яті, що відповідає змінній label - sw $t0, 8($s0) # Збегігти чисельне значення в адресу, - # зазначеній у $s0, та зі зсувом у 8 байтів + sw $t0, 8($s0) # Зберегти чисельне значення в адресу, + # що зазначена у $s0, та зі зсувом у 8 байтів # Така ж ідея використання 'sb' та 'sh' для буквених символів та halfwords. # 'sa' не існує ### Математичні операції ### _math: - # Пам'ятаємо, що попередньо потрібно завантажити данні в пам'ять - lw $t0, num # Із розділа з данними + # Пам'ятаємо, що попередньо потрібно завантажити дані в пам'ять + lw $t0, num # Із розділа з даними li $t0, 5 # Або безпосередньо з константи li $t1, 6 add $t2, $t0, $t1 # $t2 = $t0 + $t1 @@ -114,39 +114,39 @@ lang: uk-ua div $t0, $t1 # Виконує $t0 / $t1. Отримати частку можна # за допомогою команди 'mflo', остаток - 'mfhi' - # Bitwise Shifting - sll $t0, $t0, 2 # Побітовий здвиг вліво з безпосереднім - # значенням (константою) 2 - sllv $t0, $t1, $t2 # Здвиг вліво зі змінною кількістю у + # Бітовий зсув + sll $t0, $t0, 2 # Побітовий зсув вліво на 2. Біти вищого порядку + # не зберігаються, нищого - заповнюються 0 + sllv $t0, $t1, $t2 # Зсув вліво зі змінною кількістю у # регістрі - srl $t0, $t0, 5 # Побітовий здвиг вправо (не збегігає - # знак, знак розширюється 0) - srlv $t0, $t1, $t2 # Здвиг вправо зі змінною кількістю у - # регістрі - sra $t0, $t0, 7 # Побітовий арифметичний збвиг вправо - # (зберігає знак) - srav $t0, $t1, $t2 # Здвиг вправо зі змінною кількістю у + srl $t0, $t0, 5 # Побітовий зсув вправо на 5 (не зберігає + # біти, біти зліва заповнюються 0) + srlv $t0, $t1, $t2 # Зсув вправо зі змінною кількістю у # регістрі + sra $t0, $t0, 7 # Побітовий арифметичний зсув вправо + # (зберігає біти) + srav $t0, $t1, $t2 # Зсув вправо зі змінною кількістю у + # регістрі зі збереження значеннь бітів - # Bitwise operators + # Побітові операції and $t0, $t1, $t2 # Побітове І (AND) - andi $t0, $t1, 0xFFF # Побітове І з беспосереднім значенням - or $t0, $t1, $t2 # Побітове АЛЕ (OR) - ori $t0, $t1, 0xFFF # Побітове АЛЕ з беспосереднім значенням + andi $t0, $t1, 0xFFF # Побітове І з безпосереднім значенням + or $t0, $t1, $t2 # Побітове АБО (OR) + ori $t0, $t1, 0xFFF # Побітове АБО з безпосереднім значенням xor $t0, $t1, $t2 # Побітова виключна диз'юнкція (XOR) - xori $t0, $t1, 0xFFF # Побітове XOR з беспосереднім значенням + xori $t0, $t1, 0xFFF # Побітове XOR з безпосереднім значенням nor $t0, $t1, $t2 # Побітова стрілка Пірса (NOR) ## Розгалуження ## _branching: - # В овсновному інструкції розгалуження мають наступну форму: + # В основному інструкції розгалуження мають наступну форму: #