Многобайтовое сложение и вычитание целых чисел - 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
.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д