
Лабораторные работы / 4 / Лабораторная работа №4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ
Ордена Трудового Красного Знамени
Федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Математическая Кибернетика и Информационные технологии»
Лабораторная работа №4
Язык ассемблера
Выполнил: Студент группы
Москва
2024
Цель работы:
Изучение языка ассемблера.
Задание:
Выполнение практических задач в программе ЛамПанель, чтобы научиться работать с регистрами, используя арифметические и логические операции.
Ход работы:
Код программы:
MOV F000, R0
MOV FF00, R1
MOV FFF0, R2
MOV FFFF, R3
STOP
-
Регистр
Десятичные значения
без учета знака
с учетом знака
R0
61440
-4096
R1
65280
-256
R2
65520
-16
R3
65535
-1
Код программы:
MOV 5, R0
SUB 1, R0
NOT R0
MOV A, R1
SUB 1, R1
NOT R1
MOV 19, R2
SUB 1, R2
NOT R2
STOP
-
До
После
без учета знака
с учетом знака
5
65531
-5
10
65526
-10
25
65511
-25
Алгоритм выполняет операцию умножения на -1
Код программы:
MOV FFFA, R0
ADD 9, R0
MOV 7FF8, R1
ADD 9, R1
MOV 8, R2
SUB A, R2
STOP
-
Выражение
Результат
без учета знака
с учетом знака
65 530 + 9
3
3
32 760 + 9
32769
-32767
8 - 10
65534
-2
В первом случае, число 65 530 считается отрицательным (-6), так как старший бит = 1, поэтому получается выражение -6+9=3.
Во втором случае после сложения положительных чисел, бит N=1 и бит O=1, происходит переполнение, и из-за него результат с учётом знака является неверным. Результат без учёта знака является верным.
В третьем случае из меньшего вычитаем большее, получаем отрицательный результат (бит N=1).
Код программы:
MOV 7FF8, R0
ADD 7FF0, R0
MOV 8008, R1
SUB 7FF0, R1
MOV 0100, R2
SUB 0100, R2
STOP
Выражение |
Результат |
Знаковый бит |
Биты состояния |
||||
без учета знака |
с учетом знака |
O |
C |
Z |
N |
||
32 760 + 32 752 |
65512 |
-24 |
1 |
1 |
0 |
0 |
1 |
-32 760 - 32 752 |
24 |
24 |
0 |
1 |
0 |
0 |
0 |
256 - 256 |
0 |
0 |
0 |
0 |
0 |
1 |
0 |
Код программы:
MOV 0, R0
MOV 64, R1
m:
ADD R1, R0
SUB 1, R1
JNZ m
STOP
Код программы:
MOV 1, R0
MOV N, R1
m:
MUL R1, R0
SUB 1, R1
JNZ m
STOP
-
N
N!
без учета знака
с учетом знака
5
120
120
6
720
720
7
5040
5040
8
40320
-25216
9
35200
-30336
Старший бит чисел ≥ 32768 (800016) равен 1, поэтому результат с учётом знака не равен результату без учёта знака при N=8.
В регистре помещается положительное число ≤ 65535 (FFFF16), 9! = 362880. При N=9 происходит переполнение, поэтому результат неверный.
2.1. Код программы: MOV 31, R1 MOV 32, R2 MOV 33, R3 AND F, R1 MUL 64, R1 MOV R1, R0 AND F, R2 MUL A, R2 ADD R2, R0 AND F, R3 ADD R3, R0 STOP
2.2.
-
Команда
R0
1
MOV 1234, R0
1234
2
XOR ABCD, R0
B9F9
3
XOR ABCD, R0
1234
Результат будет равен числу, записанному в R0.
Результат также будет равен, числу записанному в R0.
Результат не будет равен, числу записанному в R0.
2.3.
-
Начальное
значение
255 (FF16)
254
(FE16)
252
(FC16)
-255
(FF0116)
-254
(FF0216)
-252
(FF0416)
SHR 2, R0
63
63
63
16320
16320
16321
SHL 2, R0
252
252
252
-256
-256
-252
Данные не изменяются, когда два младших бита равны 0.
2.4. Код программы: MOV A, R1 MOV B, R2 MOV C, R3 SHL 8, R1 MOV R1, R0 SHL 4, R2 OR R2, R0 OR R3, R0 STOP
2.5.
,
— логический сдвиг влево на 1 бит,
— логический сдвиг влево на 3 бита.
Код программы: MOV 2, R0 MOV R0, R1 SHL 1, R0 SHL 3, R1 ADD R1, R0 STOP
Вывод: Мы научились работать с регистрами, используя арифметические и логические операции.