Перевод числа из десятичной системы счисления в двоичную - Assembler

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

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

;Нужно написать программу по переводу из десятичной сс в двоичную
;Программа написана, но чего-то в ней не хватает
data segment
NUM DB "64"  ;исходное символьное число
BUF DB 8 DUP(0)  ;массив для результата
data ends
code segment
main proc
assume cs:code,ds:data
mov AX,DATA
mov DS,AX
 
call my_func
mov ax,4c00h
int 21h
main endp
my_func proc 
mov si,2
;mov cl,1
mov ax,word ptr num   ; загружаем значение переменной NUM в регистр AX
    M1: mov dx, 0            ; обнуляем регистр dx
        div si                 ; делим значение регистров dx:ax на 2 
        mov word ptr bx,dx
        cmp bx,1
        JE M3 
        cmp bx,0
        JE M4
        ;mov word ptr buf, dx   частное, отстаток в AX
        sar   buf,1   ; сдвиг вправо на 1
        mov bx,ax
        cmp bx,1              ; сравниваем BX с 1
        JNE M2
        JE NEXT
    M2: mov bx,ax
        cmp bx,0          ; если не равно 1, сравниваем с 0
        JNZ M1                 ; если не ноль повторить, если ноль закончить программу  
        JZ  NEXT_GO
        
    M3: mov cx,'1'
    mov word ptr buf,cx
   sar  buf,1     ; сдвиг вправо на 1
        mov word ptr bx,ax
        cmp bx,1              ; сравниваем BX с 1
        JNE M2
        JE NEXT
        cmp bx,0          ; если не равно 1, сравниваем с 0
        JNZ M1                 ; если не ноль повторить, если ноль закончить программу  
        JZ  NEXT
         mov bx,1
         cmp bx,0
         JNE M1
    M4: mov cx,'0'
    mov word ptr buf,cx
   sar   buf,1     ; сдвиг вправо на 1
        mov bx,ax
        cmp bx,1              ; сравниваем BX с 1
        JNE M2
        JE NEXT
        cmp bx,0          ; если не равно 1, сравниваем с 0
        JNZ M1                 ; если не ноль повторить, если ноль закончить программу  
        JZ  NEXT
        mov bx,1
         cmp bx,0
         JNE M1
  NEXT: mov cx,'1'
  mov word ptr buf,cx
  NEXT_GO:
  
ret
my_func endp
code ends
end main

Решение задачи: «Перевод числа из десятичной системы счисления в двоичную»

textual
Листинг программы
....
  mov   ax,word ptr NUM
  and   ax,0F0Fh
  mov   bl,al
  shl   al,3
  shl   bl,1
  add   al,bl
  add   al,ah  ;результат в AL
 ...

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

  1. Переменная NUM содержит число для перевода в двоичную систему счисления.
  2. Результат перевода числа в двоичную систему счисления будет храниться в регистре AX.
  3. Флаг AH будет использоваться как промежуточный регистр.
  4. Флаг AL будет использоваться для хранения младшего полубайта результата.
  5. Флаг BL будет использоваться для хранения старшего полубайта результата.
  6. Команда AND используется для маскирования чисел и получения только младшего полубайта числа.
  7. Команда SHIFT используется для сдвига полубайтов вправо.
  8. Команда ADD используется для сложения полубайтов.
  9. Результат перевода числа в двоичную систему счисления будет храниться в регистре AL.

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


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

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

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