Методическое пособие по решению задач лабораторного практикума по курсу "ЭВУ и системы" (изучение архитектуры и системы команд INTEL-совместимых микропроцессоров). Коршунов А.Д. - 16 стр.

UptoLike

Составители: 

16
Предпочтительнее определять области данных как обычные переменные Паскаля с
использованием стандартного раздела VAR. Как это делать, было показано
при демонстрации примеров прямой адресации. В дальнейшем для краткости будем
ссылаться на встроенный ассемблер системы Turbo Pascal как на TP-ASM.
5. Примеры разработки программ
А. Работаем с регистрами. Записать во все РОН целое число 5050.
Рассуждаем так. Данное нам число - это константа. Для записи констант в какие-
либо регистры в нашем распоряжении есть команда MOV (Таблица 1). Число 5050
превосходит максимальное значение для байта (255), но меньше максимального значения
для машинного слова (65535). Следовательно, придётся использовать 16-разрядные
регистры. Программа для модели AsmEd будет выглядеть так:
MOV AX, 5050
MOV BX, AX
MOV CX, AX
MOV DX, AX
HLT
Набрав эту программу в редакторе модели, оттранслируем и запустим ее. В регистрах
общего назначения появится изображение константы 5050.
В. Вычисляем арифметическое выражение.
Вычислить выражение (25 * 7 + 137 * 5 - 60) и результат оставить в регистре
AX (для AsmEd) или вывести на экран (для TP-ASM).
Из рассмотрения данного выражения следует, что нам понадобятся команды ADD
(сложить), MUL (умножить), SUB (вычесть), приведённые в Таблице 2, а также MOV
(переслать). Получим сначала произведение 25*7 и сохраним его; затем получим
произведение 137*5 и сложим оба частичных результата; вычтем 60 из того, что
получилось. Приходим к программе:
Для системы AsmEd
MOV AL, 25
MOV DL, 7
MUL DL ; теперь AX = 25*7
MOV BX, AX ; теперь BX = 25*7
MOV AL, 137
MOV DL, 5
MUL DL ; AX = 137*5
ADD AX, BX ; AX = 25*7 + 137*5
SUB AX, 60 ; AX уменьшен на 60
HLT
Для системы TP-ASM
Program Example_B;
Var otvet : Integer;
Begin
Asm
MOV AL, 25
MOV DL, 7
MUL DL
MOV BX, AX
MOV AL, 137
MOV DL, 5
MUL DL
ADD AX, BX
SUB AX, 60
MOV otvet, AX
End;
writeln(otvet); readln
End.
                                                                                    16
      Предпочтительнее определять области данных как обычные переменные Паскаля с
использованием стандартного раздела VAR. Как это делать, было показано
при демонстрации примеров прямой адресации. В дальнейшем для краткости будем
ссылаться на встроенный ассемблер системы Turbo Pascal как на TP-ASM.

                    5. Примеры разработки программ

А. Работаем с регистрами. Записать во все РОН целое число 5050.
      Рассуждаем так. Данное нам число - это константа. Для записи констант в какие-
либо регистры в нашем распоряжении есть команда MOV (Таблица 1). Число 5050
превосходит максимальное значение для байта (255), но меньше максимального значения
для машинного слова (65535). Следовательно, придётся использовать 16-разрядные
регистры. Программа для модели AsmEd будет выглядеть так:

      MOV   AX, 5050
      MOV   BX, AX
      MOV   CX, AX
      MOV   DX, AX
      HLT

Набрав эту программу в редакторе модели, оттранслируем и запустим ее. В регистрах
общего назначения появится изображение константы 5050.

В. Вычисляем арифметическое выражение.
       Вычислить выражение (25 * 7 + 137 * 5 - 60) и результат оставить в регистре
AX (для AsmEd) или вывести на экран (для TP-ASM).
       Из рассмотрения данного выражения следует, что нам понадобятся команды ADD
(сложить), MUL (умножить), SUB (вычесть), приведённые в Таблице 2, а также MOV
(переслать). Получим сначала произведение 25*7 и сохраним его; затем получим
произведение 137*5 и сложим оба частичных результата; вычтем 60 из того, что
получилось. Приходим к программе:

Для системы AsmEd                          Для системы TP-ASM

MOV AL, 25                                 Program Example_B;
MOV DL, 7                                  Var otvet : Integer;
MUL DL            ; теперь AX = 25*7       Begin
MOV BX, AX        ; теперь BX = 25*7       Asm
MOV AL, 137                                   MOV AL, 25
MOV DL, 5                                     MOV DL, 7
MUL DL             ; AX = 137*5               MUL DL
ADD AX, BX         ; AX = 25*7 + 137*5        MOV BX, AX
SUB AX, 60         ; AX уменьшен на 60        MOV AL, 137
HLT                                           MOV DL, 5
                                              MUL DL
                                             ADD       AX, BX
                                             SUB       AX, 60
                                             MOV otvet, AX
                                           End;
                                           writeln(otvet); readln
                                           End.