Сборник по задачам и примерам Assembler

Как изготовить пуговицы для каретной стяжки тут. | Больших размеров вечерние платья читайте здесь. | Женские валенки на подошве на true-valenki.ru. | дешевое такси москва |

Сложение чисел размером N байт без учета знака



Сложение чисел размером N байт без учета знака

:add_unsign_N - процедура сложения чисел размером N байт без учета знака

:Вход: summand_1 и summand_2 - слагаемые. N - длина в байтах.

:Выход: summand_1или carry+summandj. - значение суммы с учетом переполнения.

.data

summand_1db ? ;первое слагаемое

N=$-surranand_1;длина в байтах значений summand_1и summand_2

carry db 0 :перенос сложения последних байтов

summand_2 db ? :второе слагаемое

.code

add_unsign_N proc

mov cl. N

хог si.si cycl: mov al ,summand_2[si]

adc summand_l[si].al

inc si

loop cycl

jnc end_p ;проверка на переполнение

adc carry. 0
end_p: ret

add_unsign_N endp

Программа учитывает возможное переполнение результата. Сегмент данных может быть задан, например, так:

.data

summand_1db 0.34.56.78.250 ; первое слагаемое

N=$-summand_1:длина в байтах значений summand_1и summand_2

carry db 0 ;перенос сложения последних байт

summand_2 db 0.43.65.230.250 : второе слагаемое

Далее при рассмотрении программы деления многобайтных двоичных чисел нам понадобится макрокоманда сложения без учета знака чисел размером N байт (порядок следования байтов не соответствует порядку следования байтов на процессорах Intel, то есть старший байт находится по младшему адресу). Приведем ее.

Сложение без учета знака чисел размером N байт (макрокоманда)

.data

:summand_ldb ? :первое слагаемое

;N=$-summand_1,:длина в байтах значений summand_1и summand_2

;carry db 0 :перенос сложения последних байтов

;summand_2db ? ; второе слагаемое

.code

.старший байт по младшему адресу

add_unsign_N macro carry.summand_l.summand_2.N

local cycl.end_p

:add_unsign_N carry,summand_1,sunmand_2.N - макрокоманда сложения без учета знака чисел :размером N байт

:Вход: summand_1l и summanct_2 - слагаемые. N - длина в байтах.

;Порядок следования байтов - старший байт по младшему адресу (не Intel).

;Выход: summand_1или carry+summand_1- значение суммы с учетом переполнения.

mov cl.N

mov si.N-1 cycl: moval,summand_2[si]

adc summand_l[si].al

dec si

loop cycl

jnc end_p

adc carry.0

end_p: пор

endm




- Начало -  - Назад -  - Вперед -