Проверка трёх введённых чисел на кратность 7 - Assembler

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

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

Здравствуйте. Помогите пожалуйста сократить программу, направьте в нужное русло Задание: являются ли три введённые числа кратными семи Текст:
Листинг программы
  1. var o,l,g:byte;
  2. a,b,c:word;
  3. begin
  4. o:=0;
  5. writeln ('vvedite a');
  6. readln (a);
  7. asm
  8. mov ax,a
  9. mov cl,7
  10. div cl
  11. test ah,ah
  12. jnz @k
  13. mov o,1
  14. @k: nop
  15. end;
  16. writeln ('o=',o);
  17. begin
  18. l:=0;
  19. writeln ('vvedite b');
  20. readln (b);
  21. asm
  22. mov ax,b
  23. mov cl,7
  24. div cl
  25. test ah,ah
  26. jnz @k
  27. mov l,1
  28. @k:nop
  29. end;
  30. writeln ('l='l);
  31. end;
  32. begin
  33. g:=0;
  34. writeln ('vvedite c');
  35. readln (c);
  36. asm
  37. mov ax,c
  38. mov cl,7
  39. div cl
  40. test ah,ah
  41. jnz @k
  42. mov g,1
  43. @k: nop
  44. end;
  45. writeln ('g='g);
  46. end;
  47. end.
Пытаюсь сделать через цикл, но не получается. Не знаю как заменить итерации на переменные a,b,c

Решение задачи: «Проверка трёх введённых чисел на кратность 7»

textual
Листинг программы
  1. var a:array [0..2] of word;
  2. begin
  3. readln(a[0],a[1],a[2]);
  4.  asm
  5.  lea si,a
  6.  mov bx,7
  7.  mov cx,3
  8.   @Cycle:
  9.   lodsw
  10.   xor dx,dx
  11.   div bx
  12.   cmp dx,0
  13.   mov ah,2
  14.   mov dl,'N'
  15.   jnz @No
  16.   mov dl,'Y'
  17.   @No:
  18.   int 21h
  19.   mov dl,' '
  20.   int 21h
  21.   loop @Cycle
  22.  end;
  23. readln;
  24. end.

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

  1. Объявление переменной a типа array [0..2] of word
  2. Ввод трех чисел с помощью функции readln(a[0],a[1],a[2])
  3. Начинается ассемблерный блок
  4. Переменная si ссылается на первый элемент массива a
  5. Переменная bx содержит число 7
  6. Переменная cx содержит число 3
  7. Начинается цикл Cycle
  8. Чтение двух байтов из массива a в регистр dx
  9. Регистр dx делится на число 7
  10. Если результат деления равен нулю, то выполняется блок кода до инструкции jnz @No
  11. Если результат деления не равен нулю, то выполняется блок кода после инструкции jnz @No
  12. Вывод символа 'N' или 'Y' с помощью функции int 21h
  13. Вывод символа пробела с помощью функции int 21h
  14. Цикл повторяется до тех пор, пока не будет выполнено условие jnz @Cycle
  15. Код на ассемблере завершается
  16. Вывод символа 'N' или 'Y' с помощью функции readln
  17. Код на языке Pascal завершается
  18. Программа завершается

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

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

7   голосов , оценка 3.714 из 5

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

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

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