Преобразовать двоичный код в десятичный - Assembler

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

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

Ребят, нужно дополнить код, нужно, чтобы результат выполнения программы , то есть двоичный код преобразовался в десятичную СИ, при этом не используя стандартные функции.
Листинг программы
  1. ; Prg_6_1. asm
  2. ;Источник: В.И.Юров. Assembler. Учебник для ВУЗОВ.
  3. ;Программа~преобразования двузначного шестнадцатеричного числа
  4. символьном виде в двоичное представление.
  5. ;Вход: исходное шестнадцатеричное число из двух цифр,
  6. ;вводится с клавиатуры.
  7. ;Выход: результат преобразования помещается в регистр dl.
  8. ;
  9. ; -----------------------------
  10. data segment para public "data" ;сегмент данных
  11. message db "Input two hexadecimal digits$"
  12. data ends
  13. stk segment stack
  14. db 256 dup ("?") ;сегмент стека
  15. stk ends
  16. code segment para public "code" ;начало сегмента кода
  17. main proc; начало процедуры main
  18. assume cs:code,ds:data,ss:stk
  19. mov ax,data ;адрес сегмента данных в регистр ах
  20. mov ds,ax ;ax в ds
  21. mov ah,9
  22. mov dx,offset message
  23. int 21h
  24. xor ax,ax ;очистить регистр ax
  25. mov ah,1h ;1h в регистр ah
  26. int 21h ; генерация прерывания с номером 2lh
  27. mov dl,al ; содержимое регистра al в регистр dl
  28. sub dl,30h ; вычитание: (dl) = (dl)-30h
  29. cmp dl,9h ; сравнить (dl) с 9h
  30. jle M1 ;перейти на метку Ml, если dl<9h или dl=9h
  31. sub dl,7h ;вычитание: (dl)=(dl)-7h
  32. M1: ;определение метки M1
  33. mov cl,4h ;пересылка 4h в регистр cl
  34. shl dl,cl ;сдвиг содержимого dl нa 4 разряда влево
  35. int 21h ;вызов прерывания с номером 21h
  36. sub al,30h ;вычитание: (dl)=(dl)~30h
  37. cmp al, 9h ; сравнить (al) с 9h
  38. jle M2 ; перейти на метку M2, если al<9h или al=9h
  39. sub al,7h ; вычитание: (al) = (al)-7h
  40. M2: ;определение метки М2
  41. add dl,al ;сложение: (dl)=(dt)+(al)
  42. mov ax,4c00h ;пересылка 4c00h в регистр ах
  43. int 21h ;вызов прерывания с номером 2lh
  44. main endp ;конец процедуры main
  45. code ends ; конец сегмента кода
  46. end main ; конец программы с точкой входа main

Решение задачи: «Преобразовать двоичный код в десятичный»

textual
Листинг программы
  1. mov ax,  <-двоичный код
  2. mov bx,10
  3. xor cx,cx
  4. cnv:
  5. xor dx,dx
  6. div bx
  7. push dx
  8. inc cx
  9. or ax,ax
  10. jnz cnv
  11.    
  12. mov ah,02h
  13. print:
  14. pop dx
  15. add dl,30h
  16. int 21h
  17. loop print

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

  1. mov ax, <-двоичный код Переменная ax получает значение двоичного кода.
  2. mov bx,10 Переменная bx устанавливается равной 10.
  3. xor cx,cx Переменная cx устанавливается равной 0.
  4. cnv: Это метка цикла.
  5. xor dx,dx Переменная dx устанавливается равной 0.
  6. div bx Деление переменной ax на переменную bx.
  7. push dx Значение dx сохраняется на стеке.
  8. inc cx Переменная cx увеличивается на 1.
  9. or ax,ax Переменная ax устанавливается равной 0.
  10. jnz cnv Если cx больше 0, то происходит переход к метке cnv.
  11. mov ah,02h Переменная ah устанавливается равной 2.
  12. print: Это метка цикла.
  13. pop dx Значение dx восстанавливается из стека.
  14. add dl,30h Значение dl увеличивается на 30.
  15. int 21h Вызов функции BIOS для вывода символа.
  16. loop print Переменная cx уменьшается на 1. Если cx больше 0, то происходит переход к метке print. Таким образом, код преобразует двоичный код в десятичный, используя цикл деления. Значение двоичного кода сначала делится на 10, затем выводится на экран. Процесс продолжается до тех пор, пока значение cx не станет равным 0.

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


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

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

12   голосов , оценка 4.5 из 5

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

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

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