Задано натуральное число, диапазон значений слово. Определить количество цифр кратных 3 в записи числа - Assembler
Формулировка задачи:
Помогите с выполнением задания:
Задано натуральное число, диапазон значений слово. Определить количество цифр кратных 3 в записи числа (число задано в самой программе)
Решение задачи: «Задано натуральное число, диапазон значений слово. Определить количество цифр кратных 3 в записи числа»
textual
Листинг программы
.model small .8086 .data var dw 12689 .stack db 255 dup(?) .code start: mov ax,@data mov ds,ax mov ax,var mov bx,10 xor cx,cx get: xor dx,dx div bx push dx inc cx or ax,ax jnz get xor dx,dx mov bl,3 bring: pop ax div bl or ah,ah jnz skip inc dx skip: loop bring mov ah,02h add dl,30h int 21h mov ah,4Ch mov al,00h int 21h end start
Объяснение кода листинга программы
- В начале кода определены сегменты данных и стека, а также задан сегмент кода равным 8086.
- В сегменте данных определена переменная var типа dw (слово) со значением 12689.
- В сегменте стека выделена память под стек размером 255 байт.
- В сегменте кода определена точка входа в программу start.
- С помощью команды mov ax,@data в точку входа передаётся сегмент данных.
- С помощью команды mov ds,ax сегмент данных становится действующим сегментом.
- С помощью команды mov ax,var в переменную ax записывается значение переменной var.
- С помощью команды mov bx,10 в переменную bx записывается число 10.
- С помощью команды xor cx,cx в переменную cx записывается число 0.
- С помощью команды xor dx,dx в переменную dx записывается число 0.
- С помощью команды div bx выполняется деление переменной ax на переменную bx с сохранением частного в переменной dx и остатка в переменной ax.
- С помощью команды push dx в стек записывается число 0.
- С помощью команды inc cx значение переменной cx увеличивается на 1.
- С помощью команды or ax,ax выполняется побитовое ИЛИ между переменной ax и самим собой, результат сохраняется в переменной ax.
- С помощью команды jnz get выполняется переход к следующей итерации цикла, если переменная ax не равна 0.
- С помощью команды xor dx,dx в переменной dx записывается число 0.
- С помощью команды mov bl,3 в переменной bl записывается число 3.
- С помощью команды bring:... loop bring в цикле выполняется деление числа 10 на число 3 с сохранением частного в переменной ax и остатка в переменной dx.
- С помощью команды mov ah,02h в переменной ah записывается число 2.
- С помощью команды add dl,30h в переменной dl записывается число 30.
- С помощью команды int 21h выполняется вывод числа 30 на экран.
- С помощью команды mov ah,4Ch в переменной ah записывается число 4С.
- С помощью команды mov al,00h в переменной al записывается число 0.
- С помощью команды int 21h выполняется завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д