СибГУТИ Лабораторная 1 Архитектура ЭВМ скачать бесплатно
ИССЛЕДОВАНИЕ АРИФМЕТИЧЕСКИХ ОПЕРАЦИЙ
1. ЦЕЛЬ РАБОТЫ
Получение практических навыков использования операций сложения, вычитания и умножения; освоение использования окон Module и Inspect программы TURBO DEBUGGER.
2. РЕКОМЕНДУЕМАЯ ЛИТЕРАТУРА
2.1. Абель П. Язык Ассемблера для IBM PC и программирования /Пер.c англ М.:Высш.шк., 1992,c 173-190.
2.2. Белецкий Я. Энциклопедия языка Си: Пер. c польск.-М.:Мир,1992, с 394-406.
3. ПОДГОТОВКА К РАБОТЕ
3.1. Изучить методические указания.
3.2. Подготовить ответы на контрольные вопросы.
3.3. Проанализировать приведенную ниже программу PROG4, написать комментарии ко всем командам сегмента кода, указав при этом тип используемых операндов и способ адресации.
3.4. Используя в качестве операндов переменные, определенные в сегменте данных, в соответствии с вариантом задания ( Таб 4.1.) написать команды для выполнения указанных в таблице операций, вставить их в соответствующий фрагмент программы PROG4.
Таблица 4.1.
№ вар. операция 1-ый операнд 2-ой операнд
8 умножение регистр регистр
Текст программы с комментариями
TITLE PROG4 АРИФМЕТИЧЕСКИЕ ОПЕРАЦИИ
; -------------------------------------------------------------------------------
DATASG SEGMENT PARA
X0 DB 64H
X1 DB 40H
X2 DB 16H
X3 DW 4000H
X4 DW 2000H
X5 DW 1000H
Z1 DD 0123BC62H
Z2 DD 0012553AH
REZ DD ?
DATASG ENDS
STACKSG SEGMENT 'Stack'
DB 12 DUP(?)
STACKSG ENDS
CODESG SEGMENT PARA 'Code'
BEGIN PROC FAR
ASSUME SS:STACKSG,CS:CODESG,DS:DATASG
PUSH DS ; корректное
SUB AX,AX ; завершение
PUSH AX ; программы.
MOV AX,DATASG ; инициализация
MOV DS,AX ; сегментного регистра DS.
;-------------------------------------------------
; ПРИМЕРЫ СЛОЖЕНИЯ
;-------------------------------------------------
MOV AL,X0 ; Сложение регистра и переменной в памяти (байты). Прямая адресация
MOV BL,X1 ; Сложение регистра и переменной в памяти (байты). Прямая адресация
ADD AL,BL ; Сложение регистров (байтовых). Регистровая адресация
ADD AL,X2 ; Сложение регистра и переменной в памяти (байты). Прямая адресация
ADD X0,BL ; Сложение переменной в памяти и регистра (байты). Прямая адресация
ADD BL,10H ; Сложение регистра и числа (байты). Непосредственная адресация
ADD X0,25H ; Сложение переменной в памяти и числа (байты). Прямая и непосредственная адресации
;-------------------------------------------------
; ПРИМЕРЫ ВЫЧИТАНИЯ
;-------------------------------------------------
MOV AX,X3 ; Запись в регистр значения переменной (слова). Прямая адресация
MOV BX,X4 ; Запись в регистр значения переменной (слова). Прямая адресация
SUB AX,BX ; Вычитание из регистра регистра (слова). Регистровая адресация
SUB AX,X5 ; Вычитание из регистра значения переменной (слова). Прямая адресация
SUB X3,BX ; Вычитание из переменной регистра (слова). Прямая адресация
SUB BX,1000H ; Вычитание из регистра числа (слова). Непосредственная адресация
SUB X3,256H ; Вычитание из переменной числа (слова). Прямая и непосредственная адресации
;----------------------------------------------------------
; ПРИМЕР СЛОЖЕНИЯ ДВОЙНЫХ СЛОВ
;----------------------------------------------------------
LEA SI, Z1 ;адрес первого двойного слова. Загрузка адреса переменной в регистр.
; Прямая адресация
LEA DI, Z2 ;адрес второго двойного слова. Загрузка адреса переменной в регистр.
; Прямая адресация
LEA BX, REZ ;адрес результата. Загрузка адреса переменной в регистр.
; Прямая адресация
MOV AX, [SI] ;загрузка младшего слова Z1. Косвенная адресация
ADD AX, [DI] ;сложение младших слов Z1 и Z2. Косвенная адресация
MOV WORD PTR [BX], AX ;сохранение младшего слова результата. Косвенная адресация
INC SI ; формирование адреса. Увеличение регистра на 1. Регистровая адресация
INC SI ; старшего слова Z1. Увеличение регистра на 1. Регистровая адресация
INC DI ; формирование адреса. Увеличение регистра на 1. Регистровая адресация
INC DI ; старшего слова Z2. Увеличение регистра на 1. Регистровая адресация
MOV AX, [SI] ; загрузка старшего слова Z1. Косвенная адресация
ADC AX, [DI] ; сложение старших слов Z1 и Z2. Косвенная адресация
; и возможного переноса.
MOV WORD PTR [BX+2], AX ;сохранение старшего слова результата.
; Базовая адресация
;---------------------------------------------------
; ПРИМЕР УМНОЖЕНИЯ MUL
;---------------------------------------------------
MOV AL,X0 ; Запись в регистр значения переменной (байты). Прямая адресация
MUL X1 ; Умножение (беззнаковое) AL на X1 (байты). Прямая адресация
MOV AX,X3 ; Запись в регистр значения переменной (слова). Прямая адресация
MUL X5 ; Умножение (беззнаковое) AX на X5 (слова). Прямая адресация
MOV CX, 20H ; Запись в регистр числа (слова). Непосредственная адресация
MUL CX ; Умножение (беззнаковое) AX на CX (слова). Регистровая адресация
; Примеры умножения регистра и регистра (вариант 3)
MOV AX, DX ; Копируем значение в регистре. Регистровая адресация
MUL CX ; Умножение (беззнаковое) AX на CX. Регистровая адресация
MOV AL, DL ; Копируем значение в регистре. Регистровая адресация
MUL CL ; Умножение (беззнаковое) AL на CL. Регистровая адресация
MOV AX, DX ; Копируем значение в регистре. Регистровая адресация
IMUL CX ; Умножение (знаковое) AX на CX. Регистровая адресация
;---------------------------------------------------
; ПРИМЕР УМНОЖЕНИЯ IMUL
;---------------------------------------------------
MOV AX,X3 ; Запись в регистр значения переменной (слова). Прямая адресация
IMUL X3 ; Умножение (знаковое) AX на X3 (слова). Прямая адресация
MOV CX, -5 ; Запись в регистр числа (слова). Непосредственная адресация
IMUL CX ; Умножение (знаковое) AX на CX (слова). Регистровая адресация
RET
BEGIN ENDP ;КОНЕЦ ПРОЦЕДУРЫ
CODESG ENDS ;КОНЕЦ СЕГМЕНТА
END BEGIN ;КОНЕЦ ПРОГРАММЫ
Контрольные вопросы
4.1. Сколько операндов могут иметь команды арифметических операций для процессора К1810ВМ86(I8086)? Арифметические операции могут иметь
от одного до трех операндов, которые могут быть заданы явно, как при сложении и вычитании, или неявно, как при делении или умножении.
4.2. Чем отличаются команды ADD и ADC? ADD (операнд1=операнд1+операнд2)
ADC(операнд1=операнд1+операнд2+CF)
Команда ADC служит для сложения длинных
чисел, размерность которых превышает размеры стандартных полей.
4.3. Где сохраняется перенос, возникающий при выполнении операции сложения? Во флаге переноса «СF» устанавливается, если при выполнении арифметической операции получается число, разрядность которого превышает разрядность выделенного для него поля результата.
4.4. Какие типы операндов могут использоваться в качестве dst и в качестве src в операциях сложения ивычитания? Восьмиразрядные и шестнадцатиразрядные.
dst src
r8 i8, r8, m8
m8 i8, r8
r16 i16, r16, m16
m16 i16, r16
4.5. Какую операцию выполняет команда SBB? SBB(операнд1=операнд1-операнд2-CF)
4.6. Какие операнды могут иметь команды INC и DEC? В этих командах допустимы следующие типы операнда: r8, m8, r16, m16
4.7. Можно ли использовать в команде сложения или вычитания операнды разной длины? Нет нельзя.
Пример:
add al,dx ; так делать нельзя! al- восьмиразрядный а Dx –шестнадцатиразрядный.
4.8. Какую операцию выполняет команда CMP? Команда CMP сравнивает два операнда. Вычитает из первого операнда второй операнд и, в зависимости от полученного результата, устанавливает флаги процессора. Значение первого операнда не изменяется.
4.9. Каким двум командам эквивалентна команда NEG? NOT и INC
Пример:
mov al,0Ah ; al=A или в двоичном виде 00001010
neg al ;al=F6 или в двоичном виде 11110110 -
4.10. Где могут располагаться операнды для выполнения умножения? r - регистр общего назначения
8 или 16 – разрядность регистра
m - переменная в памяти
4.11. Чем определяется длина произведения при умножении? Множителем. Если он восьмиразрядный, то произведение будет находиться в регистре AX. А если шестнадцатиразрядный - в DX:AX.
4.12. Чем определяются знаки частного и остатка при выполнении деления? Есть две команды деления: для чисел без знака - div, для чисел со знаком – idiv.
4.13. Как умножить и разделить на константу? Надо перед умножением или делением занести константу в регистр или память.