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

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

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

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

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

textual
Листинг программы
  1. .model small
  2. .8086
  3.  
  4. .data
  5. digit dw 12345
  6.    
  7. .stack 100h
  8.    
  9. .code
  10. start:
  11. mov ax,@data
  12. mov ds,ax
  13.  
  14. mov ax,digit
  15. xor cx,cx
  16. mov bx,10
  17. one:
  18. xor dx,dx
  19. div bx
  20. push dx
  21. inc cx
  22.  
  23. or ax,ax
  24. jnz one
  25.  
  26. xor dl,dl
  27. next:
  28. pop ax
  29.  
  30. test ax,1
  31. jz skip
  32.  
  33. add dl,al
  34.  
  35. skip:
  36. loop next
  37.  
  38. mov ah,4Ch
  39. mov al,00h
  40. int 21h
  41. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы