Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Assembler 01.doc
Скачиваний:
19
Добавлен:
09.11.2019
Размер:
727.04 Кб
Скачать

1. Сложение и вычитание.

1.1. Запишите в текстовом редакторе NORTON программу exadd.asm в СОМ-формате:

.286

TITLE EXADD (COM) Сложение и вычитание

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

ORG 100H ;Начало в конце PSP

BEGIN: JMP SHORT MAIN ;Обход через данные

;-------------------------------------------------------

BYTEA DB 64H ;Элементы данных

BYTEB DB 40H

BYTEC DB 16H

WORDA DW 4000H

WORDB DW 2000H

WORDC DW 1000H

;--------------------------------------------------------

MAIN PROC NEAR ;Основная процедура

CALL B10ADD ;Вызвать сложение ADD

CALL C10SUB ;Вызвать вычитание SUB

RET

MAIN ENDP

; Пример сложения байт

; --------------------

B10ADD PROC

MOV AL,BYTEA

MOV BL,BYTEB

ADD AL,BL ;Регистр и регистр

ADD AL,BYTEC ;Память и регистр

ADD BYTEA,BL ;Регистр и память

ADD BL,10H ;Непосредств. и регистр

ADD BYTEA,25H ;Непосредств. и память

RET

B10ADD ENDP

; Пример вычитания слов

; ---------------------

C10SUB PROC

MOV AX,WORDA

MOV BX,WORDB

SUB AX,BX ;Регистр из регистра

SUB AX,WORDC ;Память из регистра

SUB WORDA,BX ;Регистр из памяти

SUB BX,1000H ;Непосредств. из рег.

SUB WORDA,256H ;Непосредств. из пам.

RET

C10SUB ENDP

CODESG ENDS

END BEGIN

Команды ADD и SUB выполняют сложение и вычитание байтов или слов, содержащих двоичные данные. В процедуре B10ADD используется команда ADD для сложения байтов, а в процедуре C10SUB команда SUB вычитает слова.

1.2. Выполнить ассемблирование и компоновку программы. Записать листинг программы в отчет. Вызвать отладчик DEBUG на выполнение программы.

1.3. Просмотреть сегмент кодов с помощью команды D CS:100 и определить в каких ячейках памяти записаны элементы данных программы. Выполнить трассировку программы, записывая выводы в отчет о выполнении каждой команды ADD и SUB. Для определения результатов выполнения команд: ADD BYTEA,BL , ADD BYTEA,25H , SUB WORDA,BX и SUB WORDA,256H необходимо просмотреть сегмент кодов.

2. Многословное сложение.

2.1. Запишите в текстовом редакторе NORTON программу exdbad.asm в СОМ-формате:

.286

TITLE EXDBAD (COM) Пример сложения двойных слов

CODESG SEGMENT PARA 'Code'

ASSUME CS:CODESG,DS:CODESG,SS:CODESG,ES:CODESG

ORG 100H ;Начало в конце PSP

BEGIN: JMP SHORT MAIN ;Обход через данные

;-------------------------------------------------------

WORD1A DW 0123H ;Элементы данных

WORD1B DW 0BC62H

WORD2A DW 0012H

WORD2B DW 553AH

WORD3A DW ?

WORD3B DW ?

;--------------------------------------------------------

MAIN PROC NEAR ;Основная процедура

CALL D10DWD ;Вызвать сложение 1

CALL E10DWD ;Вызвать сложение 2

RET

MAIN ENDP

; Пример сложения двойных слов

; ----------------------------

D10DWD PROC

MOV AX,WORD1B

ADD AX,WORD2B ;Сложить правые слова

MOV WORD3B,AX

MOV AX,WORD1A

ADC AX,WORD2A ;Сложить левые слова с переносом

MOV WORD3A,AX

RET

D10DWD ENDP

; Сложение чисел любой длины

; --------------------------

E10DWD PROC

CLC ;Очистить флаг переноса

MOV CX,2 ;Установить счетчик

LEA SI,WORD1B ;Левое слово WORD1B

LEA DI,WORD2B ;Левое слово WORD2B

LEA BX,WORD3B ;Левое слово суммы

E20: MOV AX,[SI] ;Поместить слово в АХ

ADC AX,[DI] ;Сложить с переносом

MOV [BX],AX ;Сохранить слово

DEC SI

DEC SI

DEC DI

DEC DI

DEC BX

DEC BX

LOOP E20 ;Повторить цикл

RET

E10DWD ENDP

CODESG ENDS

END BEGIN

Процедура D10DWD демонстрирует простой способ сложения содержимого одной пары слов (WORD1A и WORD1B) с содержимым второй пары слов (WORD2A и WORD2B) и сохранения суммы в третьей паре слов (WORD3A и WORD3B). Сначала выполняется сложение правых слов BC62 и 553A. Полученная сумма превышает емкость регистра АХ. Переполнение вызывает установку влага переноса в 1. Затем выполняется

сложение левых слов, но в данном случае вместо команды ADD используется команда сложения с переносом ADC. Эта команда складывает два значения, и если влаг CF уже установлен, к сумме прибавляется 1.

Процедура E10DWD демонстрирует подход к сложению значений любой длины. Действие начинается со сложения самых правых слов складываемых полей. В первом цикле складываются правые слова, во втором - слова, расположенные левее. При этом адреса в регистрах SI, DI и ВХ уменьшаются на 2. По две команды DEC выполняют эту операцию для каждого регистра. Перед циклом команда CLC устанав-

ливает нулевое значение флага переноса, а также устанавливается счетчик слов.

Для многословного вычитания вместо команды ADC в процедуре E10DWD необходимо установить команду SBB.

2.2. Выполнить ассемблирование и компоновку программы. Записать листинг программы в отчет. Вызвать отладчик DEBUG на выполнение программы.

2.3. Просмотреть сегмент кодов с помощью команды D CS:100 и определить в каких ячейках памяти записаны элементы данных программы. Выполнить трассировку программы, записывая выводы в отчет о выполнении каждой команды. При трассировке отслеживать признак переноса CF (если NC - то 0, признака переноса нет, если CY – то 1, признак переноса есть). Для определения результатов выполнения команд: MOV WORD1B,AX и MOV WORD3A,AX необходимо просмотреть сегмент кодов.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]