Задано натуральное число, диапазон значений слово. Определить количество цифр кратных 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

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

  1. В начале кода определены сегменты данных и стека, а также задан сегмент кода равным 8086.
  2. В сегменте данных определена переменная var типа dw (слово) со значением 12689.
  3. В сегменте стека выделена память под стек размером 255 байт.
  4. В сегменте кода определена точка входа в программу start.
  5. С помощью команды mov ax,@data в точку входа передаётся сегмент данных.
  6. С помощью команды mov ds,ax сегмент данных становится действующим сегментом.
  7. С помощью команды mov ax,var в переменную ax записывается значение переменной var.
  8. С помощью команды mov bx,10 в переменную bx записывается число 10.
  9. С помощью команды xor cx,cx в переменную cx записывается число 0.
  10. С помощью команды xor dx,dx в переменную dx записывается число 0.
  11. С помощью команды div bx выполняется деление переменной ax на переменную bx с сохранением частного в переменной dx и остатка в переменной ax.
  12. С помощью команды push dx в стек записывается число 0.
  13. С помощью команды inc cx значение переменной cx увеличивается на 1.
  14. С помощью команды or ax,ax выполняется побитовое ИЛИ между переменной ax и самим собой, результат сохраняется в переменной ax.
  15. С помощью команды jnz get выполняется переход к следующей итерации цикла, если переменная ax не равна 0.
  16. С помощью команды xor dx,dx в переменной dx записывается число 0.
  17. С помощью команды mov bl,3 в переменной bl записывается число 3.
  18. С помощью команды bring:... loop bring в цикле выполняется деление числа 10 на число 3 с сохранением частного в переменной ax и остатка в переменной dx.
  19. С помощью команды mov ah,02h в переменной ah записывается число 2.
  20. С помощью команды add dl,30h в переменной dl записывается число 30.
  21. С помощью команды int 21h выполняется вывод числа 30 на экран.
  22. С помощью команды mov ah,4Ch в переменной ah записывается число 4С.
  23. С помощью команды mov al,00h в переменной al записывается число 0.
  24. С помощью команды int 21h выполняется завершение работы программы.

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

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