Определить сумму нечётных цифр числа - 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
Объяснение кода листинга программы
- В первой строке кода подключается модель памяти small и указывается, что код будет исполняться на процессоре 8086.
- .data - сегмент данных, в котором хранится переменная digit, содержащая число 12345.
- .stack 100h - сегмент стека размером 100 байт.
- .code - сегмент кода.
- start: - точка входа в программу.
- mov ax,@data - перемещение регистра ax в сегмент данных.
- mov ds,ax - установка сегмента данных равным сегменту регистра ax.
- mov ax,digit - перемещение регистра ax значение переменной digit.
- xor cx,cx - инициализация счётчика цифр в числе равным 0.
- mov bx,10 - установка счётчика десятков равным 10.
- one: - метка начала цикла.
- xor dx,dx - инициализация регистра dx для хранения остатка от деления.
- div bx - деление регистра ax на 10 и сохранение остатка в регистре dx.
- push dx - сохранение значения регистра dx в стеке.
- inc cx - увеличение счётчика цифр на 1.
- or ax,ax - проверка, есть ли ещё цифры в числе (если ax=0, то все цифры уже обработаны).
- jnz one - если ax не равно 0, то переход на метку one для обработки следующей цифры.
- xor dl,dl - инициализация регистра dl для хранения суммы нечётных цифр.
- next: - метка начала цикла обработки суммы нечётных цифр.
- pop ax - восстановление значения регистра ax из стека.
- test ax,1 - проверка, является ли текущая цифра нечётной (если ax=1, то текущая цифра нечётная).
- jz skip - если ax=0, то переход на метку skip (пропуск нечётной цифры).
- add dl,al - добавление текущей цифры к сумме нечётных цифр.
- skip: - метка окончания обработки текущей цифры.
- mov ah,4Ch - установка регистра ah для функции 4Ch (закрытие программы).
- mov al,00h - установка регистра al для передачи в функцию 4Ch.
- int 21h - вызов функции 4Ch.
- end start - точка окончания программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д