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

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

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

Ребят, нужно дополнить код, нужно, чтобы результат выполнения программы , то есть двоичный код преобразовался в десятичную СИ, при этом не используя стандартные функции.
;   Prg_6_1.  asm   
;Источник: В.И.Юров. Assembler. Учебник для ВУЗОВ.  
;Программа~преобразования двузначного шестнадцатеричного числа
;в символьном виде в двоичное представление.
;Вход: исходное шестнадцатеричное число из двух цифр,
;вводится с клавиатуры.
;Выход: результат преобразования помещается в регистр dl.
;         
;   -----------------------------
data segment para public "data"   ;сегмент данных
message db    "Input two hexadecimal digits$"
data ends
stk segment stack
db   256 dup  ("?") ;сегмент стека
stk ends
code segment para public "code" ;начало сегмента кода
main proc; начало процедуры main
assume cs:code,ds:data,ss:stk
mov ax,data ;адрес сегмента данных в регистр ах 
mov ds,ax   ;ax в ds
mov ah,9
mov dx,offset message
int 21h
xor ax,ax   ;очистить регистр ax
mov ah,1h   ;1h в регистр ah
int 21h     ; генерация прерывания с номером 2lh
mov dl,al   ; содержимое регистра al в регистр dl
sub dl,30h  ; вычитание:   (dl) = (dl)-30h
cmp dl,9h   ; сравнить (dl) с 9h
jle M1      ;перейти на метку Ml, если dl<9h или dl=9h
sub dl,7h   ;вычитание: (dl)=(dl)-7h
M1:     ;определение метки M1
mov cl,4h   ;пересылка 4h в регистр cl
shl dl,cl   ;сдвиг содержимого dl нa 4 разряда влево
int 21h     ;вызов прерывания с номером 21h
sub al,30h  ;вычитание: (dl)=(dl)~30h
cmp al, 9h  ; сравнить (al) с 9h
jle M2      ; перейти на метку M2, если al<9h или al=9h
sub al,7h   ; вычитание: (al) = (al)-7h
M2: ;определение метки М2
add dl,al   ;сложение: (dl)=(dt)+(al)
mov ax,4c00h    ;пересылка 4c00h в регистр ах
int 21h     ;вызов прерывания с номером 2lh
main endp   ;конец процедуры main
code ends   ; конец сегмента кода
end main    ; конец программы с точкой входа main

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

textual
Листинг программы
mov ax,  <-двоичный код
mov bx,10
xor cx,cx
cnv:
xor dx,dx
div bx
push dx
inc cx
or ax,ax
jnz cnv
    
mov ah,02h
print:
pop dx
add dl,30h
int 21h
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
Похожие ответы