Перевод числа из десятичной системы счисления в двоичную - 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 ...
Объяснение кода листинга программы
- Переменная NUM содержит число для перевода в двоичную систему счисления.
- Результат перевода числа в двоичную систему счисления будет храниться в регистре AX.
- Флаг AH будет использоваться как промежуточный регистр.
- Флаг AL будет использоваться для хранения младшего полубайта результата.
- Флаг BL будет использоваться для хранения старшего полубайта результата.
- Команда AND используется для маскирования чисел и получения только младшего полубайта числа.
- Команда SHIFT используется для сдвига полубайтов вправо.
- Команда ADD используется для сложения полубайтов.
- Результат перевода числа в двоичную систему счисления будет храниться в регистре AL.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д