![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Процедура очистка области результата
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
|