ideal
model small
p286
codeseg
startupcode
mov ah, 9
mov dx, offset Prompt
int 21h
mov [EndMarker - 1], 0
mov [Count], 1
InpLoop:
mov ah, 8
int 21h
cmp al, 13
je Print
mov dl, al
sub al, 30h
cmp al, 2
jae InpLoop
lea si, [EndMarker - 1]
mov cl, [Count]
mov ah, 2
int 21h
rcr dl, 1
ShiftLoop:
rcl [byte si], 1
mov al, [si]
shl al, 5
dec si
dec cl
jnz ShiftLoop
jnc InpLoop
inc [Count]
mov [byte si], 1
jmp InpLoop
Print:
mov ah, 9
mov dx, offset Result
int 21h
xor cx, cx
mov cl, [Count]
mov si, offset EndMarker
sub si, cx
mov dx, si
PrintLoop:
lodsb
and al, 7
or al, 30h
int 29h
loop PrintLoop
mov dx, offset WaitPrompt
mov ah, 9
int 21h
mov ax, 0C08h
int 21h
mov ax, 4C00h
int 21h
exitcode
dataseg
Prompt db 'Введите двоичное число: ', 13, 10, 36
Result db 13, 10, 'Восьмеричное число: ', 13, 10, 36
WaitPrompt db 13, 10, 10, 'Для завершения работы нажмите любую клавишу... $'
Count db ?
OctBuff db 78 dup (?)
EndMarker db '$'
stack 100h
end
