Задано натуральное число, диапазон значений слово. Определить количество цифр кратных 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 выполняется завершение работы программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д