Определить сумму нечётных цифр числа - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите с заданиями. Поступил в универ после технаря, а тут Assembler, а я кроме С++,С# и python в руках ничего не держал) Задано натуральное число, диапазон значений слово. Определить сумму нечётных цифр числа.

Решение задачи: «Определить сумму нечётных цифр числа»

textual
Листинг программы
.model small
.8086
 
.data
digit dw 12345
    
.stack 100h
    
.code
start:
mov ax,@data
mov ds,ax
 
mov ax,digit
xor cx,cx
mov bx,10
one:
xor dx,dx
div bx
push dx
inc cx
 
or ax,ax
jnz one
 
xor dl,dl
next:
pop ax
 
test ax,1
jz skip
 
add dl,al
 
skip:
loop next
 
mov ah,4Ch
mov al,00h
int 21h
end start

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

  1. В первой строке кода подключается модель памяти small и указывается, что код будет исполняться на процессоре 8086.
  2. .data - сегмент данных, в котором хранится переменная digit, содержащая число 12345.
  3. .stack 100h - сегмент стека размером 100 байт.
  4. .code - сегмент кода.
  5. start: - точка входа в программу.
  6. mov ax,@data - перемещение регистра ax в сегмент данных.
  7. mov ds,ax - установка сегмента данных равным сегменту регистра ax.
  8. mov ax,digit - перемещение регистра ax значение переменной digit.
  9. xor cx,cx - инициализация счётчика цифр в числе равным 0.
  10. mov bx,10 - установка счётчика десятков равным 10.
  11. one: - метка начала цикла.
  12. xor dx,dx - инициализация регистра dx для хранения остатка от деления.
  13. div bx - деление регистра ax на 10 и сохранение остатка в регистре dx.
  14. push dx - сохранение значения регистра dx в стеке.
  15. inc cx - увеличение счётчика цифр на 1.
  16. or ax,ax - проверка, есть ли ещё цифры в числе (если ax=0, то все цифры уже обработаны).
  17. jnz one - если ax не равно 0, то переход на метку one для обработки следующей цифры.
  18. xor dl,dl - инициализация регистра dl для хранения суммы нечётных цифр.
  19. next: - метка начала цикла обработки суммы нечётных цифр.
  20. pop ax - восстановление значения регистра ax из стека.
  21. test ax,1 - проверка, является ли текущая цифра нечётной (если ax=1, то текущая цифра нечётная).
  22. jz skip - если ax=0, то переход на метку skip (пропуск нечётной цифры).
  23. add dl,al - добавление текущей цифры к сумме нечётных цифр.
  24. skip: - метка окончания обработки текущей цифры.
  25. mov ah,4Ch - установка регистра ah для функции 4Ch (закрытие программы).
  26. mov al,00h - установка регистра al для передачи в функцию 4Ch.
  27. int 21h - вызов функции 4Ch.
  28. end start - точка окончания программы.

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

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