Другие языки программирования и технологии

Как перевести число из восьмеричной системы счисления в двоичную в Ассемблер (tasm) Программа должна быть простой!

.286
.model small

.code
N186606359:
    mov ax, @data
    mov ds, ax
    mov es, ax
    jmp Start
Error:
    mov ah, 9
    lea dx, ErrMsg
    int 21h
Start:
    lea dx, Prompt
    mov ah, 9
    int 21h
    lea dx, OctBuff
    inc ah
    int 21h
   
; Начало преобразования
    lea si, OctBuff + 2
    lea di, BinBuff
    xor ch, ch
    mov cl, [si - 1]
    jcxz Error
    cmp byte ptr [si], "-"
    jne DoLoop
    movsb
    dec cx
    jz Error
DoLoop:
    mov dl, 3
    lodsb
    sub al, "0"
    cmp al, 8
    jae Error
    shl al, 5
    mov dh, al
BitLoop:
    rol dh, 1
    mov al, 1
    and al, dh
    or al, "0"
    stosb
    dec dl
    jnz BitLoop
    loop DoLoop
    mov byte ptr [di], "$"
; Преобразование закончено

    lea dx, BinMsg
    mov ah, 9
    int 21h
    lea dx, BinBuff
    int 21h
   
    xor ah, ah
    int 16h
    mov ah, 4Ch
    int 21h

.data
  OctBuff db 27, ?,27 dup (?)
  BinBuff db 80 dup (?)
  Prompt db "Введите восьмеричное число: ", 10, 36
  BinMsg db 10, "Двоичное число: ", 10, 36
  ErrMsg db 10, "Ошибка! $"
  WaitWsg db 10, 10, "Для продолжения нажмите любую клавишу... $"

.stack 100h

    end N186606359

ИО
Имидж Окна
51 590
Лучший ответ
100р
Vasiliy Sinyavsky
Vasiliy Sinyavsky
20 058
Попробуй сначала перевести число в 10-ую систему, а потом 2-ую

Похожие вопросы