program per;
label 1,2,3;
var k:char;
i,j,b:byte;
c:word;
sc:array [1..16] of byte;
vs:array [1..16] of char;
procedure goto_xy(x,y:byte); assembler;
asm
mov ah,2
xor bh,bh
mov dh,y
mov dl,x
dec dh
dec dl
int 10h
end;
procedure clrscreen; assembler;
asm
mov ax,600h
mov bh,7
xor cx,cx
mov dx,184fh
int 10h
mov ah,2
xor bh,bh
xor dx,dx
int 10h
end;
begin
2: clrscreen; write('Введите число [0..65535]: '); readln(c);
1: goto_xy(1,2); write('Введите основание системы счисления: '); readln(b);
if (b<2) or (b>16) then goto 1;
for i:=1 to 16 do sc[i]:=0; i:=0;
repeat
inc(i); sc[i]:=c mod b; c:=c div b
until c<1;
for j:=1 to 16 do
case sc[j] of
0..9:vs[j]:=chr(sc[j]+48);
10..15:vs[j]:=chr(sc[j]+87)
end;
for j:=i downto 1 do write(vs[j]);
3: goto_xy(1,4); write('Продолжим, (Y/N)? '); readln(k);
case k of
'Y','y': goto 2;
'N','n': halt
else goto 3
end
end.