Многобайтовое сложение и вычитание целых чисел - Assembler
Формулировка задачи:
Составьте программу, выполняющую многобайтовое сложение и вычитание целых чисел
Сложение выполнить с использованием 32-разрядных регистров, вычитание без использования 32-разрядных регистров.
A:="BF82D9569B425443H"
B:="88ABCDCADDB78822H"
Решение задачи: «Многобайтовое сложение и вычитание целых чисел»
textual
Листинг программы
.model small .386 .stack 100h .data A dq 0BF82D9569B425443h B dq 088ABCDCADDB78822h C db 9 dup(?) .code start: mov ax,@data mov ds,ax clc lea si,A lea di,B lea bx,C mov cx,4 minus: mov dx,word ptr [si] mov ax,word ptr [di] sbb dx,ax lahf mov word ptr [bx],dx add bx,2 add si,2 add di,2 sahf loop minus sbb byte ptr C+8,0 mov ah,4Ch int 21h end start
Объяснение кода листинга программы
- Установка сегмента данных на сегмент, на который указывает переменная
ax. - Установка сегмента стека на 100h.
- Объявление переменных
A,BиC. - Начало выполнения кода с метки
start. - Переменная
axполучает значение сегмента данных. - Переменная
dsполучает значение сегмента данных. - Очистка флага переноса ввода-вывода.
- Переменная
siполучает смещение строкиA. - Переменная
diполучает смещение строкиB. - Переменная
bxполучает смещение строкиC. - Переменная
cxполучает значение 4. - Начало цикла с метки
minus. - Переменная
dxполучает значение из памяти по смещениюsi. - Переменная
axполучает значение из памяти по смещениюdi. - Вычитание значения
dxизaxс использованием флага переноса. - Очистка флага переноса ввода-вывода.
- Запись значения
dxв память по смещениюbx. - Увеличение
bxна 2. - Увеличение
siна 2. - Увеличение
diна 2. - Запись значения
ahв память по смещениюC+8. - Ввод значения 4Ch в
ah. - Вызов прерывания 21h.
- Конец выполнения кода с метки
start.