Многобайтовое сложение и вычитание целых чисел - 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

Объяснение кода листинга программы

  1. Установка сегмента данных на сегмент, на который указывает переменная ax.
  2. Установка сегмента стека на 100h.
  3. Объявление переменных A, B и C.
  4. Начало выполнения кода с метки start.
  5. Переменная ax получает значение сегмента данных.
  6. Переменная ds получает значение сегмента данных.
  7. Очистка флага переноса ввода-вывода.
  8. Переменная si получает смещение строки A.
  9. Переменная di получает смещение строки B.
  10. Переменная bx получает смещение строки C.
  11. Переменная cx получает значение 4.
  12. Начало цикла с метки minus.
  13. Переменная dx получает значение из памяти по смещению si.
  14. Переменная ax получает значение из памяти по смещению di.
  15. Вычитание значения dx из ax с использованием флага переноса.
  16. Очистка флага переноса ввода-вывода.
  17. Запись значения dx в память по смещению bx.
  18. Увеличение bx на 2.
  19. Увеличение si на 2.
  20. Увеличение di на 2.
  21. Запись значения ah в память по смещению C+8.
  22. Ввод значения 4Ch в ah.
  23. Вызов прерывания 21h.
  24. Конец выполнения кода с метки start.

Оцени полезность:

9   голосов , оценка 4.444 из 5
Похожие ответы