Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Процедура очистка области результата






Z10XMUL PROC

Mov PRODUCT, 0000; Обнулить

Mov PRODUCT+2, 0000; ячейки

Mov PRODUCT+4, 0000; памяти.

Mov PRODUCT+6, 0000;

Ret; Вернуться в основную программу.

Z10XMUL Endp; Конец процедуры.

CODESG Ends; Конец кодового сегмента.

end BEGIN; Конец программы.

5.2 Сложение чисел в ASCII-формате. (СОМ – программа)

 

TITLE ASCADD (COM) Сложение чисел в ASCII-формате

CODESG SEGMENT PARA 'Code'

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

Org 100H

BEGIN: Jmp SHORT MAIN

ASC1 DB '578'; Символьные элементы данных.

ASC2 DB '694'

ASC3 DB '0000'

MAIN PROC NEAR

Clc

Lea si, asc1+2; Переслать в регистры адреса ASCII-чисел.

Lea di, asc2 +2

Lea bx, aasc1+3

Mov сх, 03; Задаем количество циклов.

A20:

Mov ah, 00; Очистить регистр AH.

Mov al, [si]; Загрузить ASCII-байт.

Adc al, [di]; Сложение (с переносом).

Aaa; Коррекция для ASCII.

Mov [bx], al; Сохранение суммы.

Dec si

Dec di

Dec bx

Loop А20; Циклиться 3 раза.

Mov [bx], ah; Сохранить перенос.

Ret

MAIN Endp

CODESG Ends

End BEGIN

5.3 Многословное сложение (ЕХЕ – программа)

Максимально возможное значение знакового числа в регистрах процессора равное + 32767 и -32768, ограничивает возможности компьютера при выполнении арифметических операций. Потому арифметические операции сложения двухсловных и более чисел выполняют с помощью небольших процедур, которые обеспечивают сначала сложение крайних правых слов с сохранением результата в переменной. А затем складывают левые слова и суммируют результат с переменной, использую команду ADC, так как сумма может превышать емкость шестнадцатиразрядных регистров процессора.

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

.Model small

.stack

.data

SDD1 dd 56745890

SDD2 dd 63247659

REZ1 dd (?)

REZ2 dd (?)

.code

beg: Mov ax, @data; Пересылка начального адреса сегмента данных в АХ.

Mov ds, ax; Инициализация сегментного регистра DS.

Call M1; Вызов процедуры сложения двойных слов.

Call M2; Вызов процедуры сложения чисел любой длины.

Jmp M3; Переход на команды выхода из программы.

M1 PROC

Mov ax, word ptr sdd1; Пересылка в АХ правой части 1-го слагаемого.

Add ax, word ptr sdd2; Сложение с правой частью 2-го слагаемого.

Mov word ptr rez1, ax; Пересылка суммы в память.

Mov ax, [sdd1+2]; Пересылка в АХ левой части 1-го слагаемого.

Adc ax, [sdd2+2]; Сложение с левой частью 2-го слагаемого и

содержимым регистра CF.

Mov word ptr [rez1 + 2], ax; Сохранение суммы в памяти.

Ret; Выход из процедуры.

M1: Endp; Конец процедуры.

M2: PROC

Clc

Mov cx, 2

Lea si, word ptr sdd1

Lea di, word ptr sdd2

Lea bx, word ptr rez1

E2: Mov ax, [si]

Adc ax, [di]

Mov [bx], ax

Dec si

Dec si

Dec di

Dec di

Dec bx

Dec bx

Loop E2

Ret

M3: Mov ax, 4c00h

Int 21h

End beg






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.