Техника - молодёжи 1990-08, страница 30

Техника - молодёжи 1990-08, страница 30

Клуб электронных игр

Толмач с машинного

■5ЁГ W>5»

Написать программу в машинных кодах без помощи Dl^D ESSS

самой ЭВМ, вручную, пользуясь только соответствующей ГГ« g gГГ-'

таблицей, дело довольно хлопотное. Не меньшего ГГГЛд g ГГ.|

усердия требует задача обратная расшифровать компью- В KlSS

терную цифирь, перевести ее на некий «сленг», понятный Г«<j><j>ГГГГ; щ щ

пользователю, на так называемый язык Ассемблера. <!><!><С> В BI

Программа, выполняющая этот перевод, называется, как [■■■<:><><>0 KSSSSS'E'S'S'S'S'S'S'S'S'ES

известно, Дизассемблером, сочиняется для конкретной системы, записывается опять же в кодах и потому с ЭВМ

иного типа несовместима. Представляет немалый практи- |£Г |£Г Z5P

ческий интерес написать такой Дизассемблер, который с незначительными поправками подошел бы к любой

доступной рядовому потребителю системе. Естественно, rjrjrjrjrjrjTjrjrjrjrjrjrjrjrjrjrjrjrjrjrjrjr^j!

речь идет о микрокомпьютере с восьмиразрядным ироцес- — — — ТjZ— — — — — — — — — "IL

сором. Естествен и выбор языка им вправе стать Бейсик Fri^X FSI и g"""""

с его стандартным для многих версий набором базовых ГЛл^ч FSL:игfff«гjt

операторов. """ Tffi Г = = =]

Предлагаемая программа возможно далеко не един- г!г; "^L" - —j

ственное и, вероятно, не лучшее решение поставленной r^Jr^jrjrjrjrjrjrjr^i —jм

задачи. Написанная для Энтерпрайза-128, она примени- ■ — — — ^jsjt — — ■ ——™

ма к любому другому компьютеру этого класса доста- тЕ?! rlsrL **

точно «перевести» с одного «диалекта» Бейсика на другой 555JL~~> — -»ш*^ISSL*mm—i^,——^ —— — .

те «выражения», которые не являются обще>потребитель- - — — — — — — — — — — — — — — — — — — — — — .

ными. В основном это операторы, обусловливающие вы- _

вод информации на монитор (см. строки 1020. 1120, 1240 и S— К! V Ihu

другие)

Возможны следующие режимы работы: 1=г> hex поочередный ввод чисел в шестнадцатеричной форме; для тех> кто собственными силами изготавливает игру «Соко 2=ф dec- то же в десятеричной: 3=^> mem «автоперевод» бан», воспроизводим еще два уровня.

1774 IF 2S1 THEN PRINT AT 3+I,24:'DB *;STRB<S):LET 2=#: 60T0 244Ф

178Ф IF Z=2 THEN PRINT AT 3+I,24:'DB STRK(S):LET Z=l: SOTO 244»

1794 IF SB="CB" OR SB='DD" OR SB='ED' OR SB='FD' THEN

LET H=lsLET DB=SB:60T0 2*4» IBM IF Se='C7" THEN LET Z=F4 1814 IF SB='CF* THEN LET Z=F1 1824 IF SB='D7" THEN LET Z=F2 1834 IF SB="DF' THEN LET Z=F3 1844 IF S»="E7" THEN LET Z=F4 1854 IF SB='EF* THEN LET Z=F5 1864 IF SB='F7* THEN LET Z=F6 1874 IF SB='FF" THEN LET Z=F7 1884 LET U=4:LET 0=INT<<N+1)/2)I2:LET D,F,6,H,K,P=4 1894 LET V=INTUU+0)/2) 1944 IF SB<CB(V) THEN LET 0=V:G0T0 1934 1914 IF SB>CB(V> THEN LET U=V+I:60T0 1934 1924 60T0 1974 1934 IF U>=0 THEN LET D=D+l 1944 IF D=2 THEN 1964 1954 Б0Т0 1894

1964 PRINT AT 3+1,22:'not*:GOTO 2444

1974 LET ZB=CZB(V):PR1NT AT 3+I,24:ZB;TAB<32);'-'

1984 IF V<=L THEN PRINT AT 3+I,3l:CKB(V);

1994 IF R=2 THEN LET R=4:60T0 2444

2444 IF P0S(ZB,"z,)>4 THEN LET F=F+1

2414 IF P0S(ZB,V)>4 THEN LET 6=G+1

2424 IF P0S(ZB,V>>4 THEN LET K=K+1

2434 IF P0S(ZB,'n'>>4 THEN LET P=P+1

2444 LET 1—1*1:6DTD 1294

2454 TEXT 44

2464 DATA 4,4,2,4,4,4,1,4 2474 DATA 44,NOP,NOP 2484 DATA 41,'LD BC.z'.'LXI B,z' 2494 DATA 42,'LD (BCl.A'.STA* В

2154 DATA 48,"EI AF.AF",,

4464 DATA C7.RST 44H.RST 4

5214 DATA CB 46,'BIT 4,(HL)'

7174 DATA DD 36,'LD <II+x>,y'

7784 DATA ED B4.LDIR

8864 DATA FD CB II FE.'SET 7,(IY+x)»

1364 IF LEN(NB)>4 THEN LPRINT CHRB(14);NB:LPRINT

1374 LET NB=":C0PY

1J84 IF A=2 THEN 1584

П94 60T0 1284

1444 END IF

1414 LET B=B+l

1424 LET S=INT(B/256):LET IB=TB(S)IHB(SJ:LFT S-M)D(B,

256 :LET IB=IB&TB(S)MW«S) 1434 DEF T0(S)

1444 LFT T=INT(S/16):LET TB-STRB T) 1454 IF T>9 THEN LET TB=CHRft(T+55) 1464 END DEF 1474 DEF Mt(S)

14B4 LFT N=M0D(S,16):LET HB=STRB(N) 1494 IF H>9 THEN LET HB=CHRB(N+55) 1544 END DFF 1514 IF A=4 THEN 1544

1524 IF B>B2 OR INKEYB=CHRB(27) THEN LET I=21:LET A=2:

LET SB=-«':60T0 1294 1534 LET SB=STRB(PEEK(B)):PRINT AT 3+I,l:STRB(B);TAB<7)

;IB;TAB(12);SB:60T0 1644 1544 PRINT AT 3+1,1:STRB(B) ;TAB(7); 111; 1554 PRINT AT 3*1,12sfl_a:INPUT AT 3+I,12,PR0HPT ":SB 1564 LFT SB=UCASEB(SB)

1574 IF SB='P' THEN PRINT AT 3+1,1:' ":60T0

1354

1584 IF SB='H' THEN LFT A,E,F,6,H,K,P,R,Z=4:60T0 1124 1594 IF LENISBX2 THEN • ET SB='44SB 1644 IF E=4 THEN

1614 IF LEN(SB)>2 OR SB(1)>'F' OR SB(2)>'F' THEN 1554 1624 LET S=ORD(HEIH(SK)):PRINT AT 3+I,l6:STRI(S):60T0

1664 1634 END IF

1644 IF SXUKV AND Sft(21<-:' AND VAL(Sit)<=255 THFN LET S«VAL(SBI:LET S«=TB(S)M»B(S):PRINT AT 3*1,16: SB.-6PT0 1664 1654 60T0 1554 1664 I FT S4=S

1674 IF S>127 THEN LET S4=S-256

1684 IF R=1 THEN PRINT AT 3+I,?4:"x=';STRB(S4):LET R»2:

GOTO 2444 1694 IF H=l THEN 1 ET SB=DBI' '(SB 1744 IF LEN(SB)=5 AND P0S(SB,'CB')=4 THEN LET DB=SBI'

H'sLET R-1:60T0 2444 1714 IF F=1 THEN LET S1=S:G0T0 2444 1724 IF F=2 THEN IET S2=S1+256IS:PRINT AT 3+I,24:.'z='; STRfi(S2);'=';TB(S)lHfi<SHTB<Sl)MIB<Sl);'H':60T0 2444

1734 IF Ml THEN 1754

1744 IF K=2 THEN PRINT AT 3+I.24:'y=';STFB(S4):60T0 2444

1754 IF 6=1 THEN PRINT AT 3+I.24:'*=':STRB(S4):60T0 2444

1764 IF P=1 THFN PRINT AT 3+I,24:'n=';STRB(S):G0T0 2444

1444 PR06RAH 'DISASSEMBLER' 1414 !by A.Vershinsky

1424 TEIT 44:PRINT AT 12,16:'Pltase Mit':LET L=252:LET H-684

1434 STRIN6 CB(N)«11,CZ»(N)I12,CKB(L)IB,BII5,B2BI5,DBI

8,NBI26,0BI7,SBI11,UBI37,ZBI12 1444 READ F4,F1,F2,F3,F4,F5,F6,F7 1454 FOR 1=1 TO L 1464 READ C«(I),CZK<I),CKB(I) 1474 NEXT

1484 FOR I=L+1 TO N 1444 READ CB(I),CZB(I) 1144 NEXT

1114 LET IX=":LET A,B,B2,D,E,F,6,H,K,H,0,P,R,8,S4,S1, S2,T,U, Z=4

1124 CLEAR TEXT:PRINT AT 8,16:'Й e n и :':PRINT AT 11, 16:'1 => h«':PRINT AT 13,16:'2 «> 4к':PRINT AT 15,16:'3 => m*':PRINT AT 17,16:'4 => tnd':LET 01= 'D.C H.C 1134 LET IS=VAL(1NKEYB> 1144 IF IS<1 OR IS 4 THEN 1134 1154 ON IS Б0Т0 1194,1244,1164,2454 1164 LET A,E=1:60SUB 1244 1174 INPUT AT 7,14,PR0M>T 'Next address: ':B2B 1184 LET B2B=UCASEH(B2B):LET UB='Press (ESC) to

interrupt the decoding':60T0 1224 1194 LET 0B='H.C D.C':60T0 1214 1244 LET E=1

1214 LET UB='Print to Cill aenu or 'p' to copy': 60SUB 1244

1224 IF BB(5)='H' AND B2B(5)='H' THEN LET B=0RD(HEII(BI (l:2)))l256+0RD(HEXB(Bk(3:4))):LET B2=0RD(HEIX(B2M (1:2)))t256+0RD(HEXB B2B(3:4))):60T0 1264 1234 LET B=VAL(BBt:LET B2«VAL(B2B):60T0 1264 1244 CLEAR TEXT:PR1NT AT ll,9:'Bec-forHt: 4 - 65535": PRINT AT 13,9:'He*-Fornt: 44ИН - FFFFH':PRINT AT 15,17:'(or 444th - <fffh)':lET B2B='FFFFH':INPUT AT 5,9,PROMPT 'First address: *:BB 1254 LET B(=UCASEfl(BB>:RETURN

1264 LET B=B-1:INPUT AT 24,9,PR0M>T 'Progru nue: ":NB 1274 LET NB=UCASEB(NB):LET NB='Progr« 'ICHRH(34)INB( CHRB(34)

1284 CLEAR TEXT:LET I=4:PRINT 'D.Ad H.Ad *;0B;TAB(24);

'Ass.Z84';TAB(34);'Ass.KR584';:PRINT AT 24,2:UB; 1294 IF 1=21 THEN

1344 PRINT AT 24,2:' Press <p> to copy or press <

SPACE) :PIN6 1314 LET Ifl=INKEYB 1324 IF IB='p' THEN 1354 1334 IF IBO" ' THEN 1314 1344 Б0Т0 1384 1354 PRINT AT 24,1:"

";:LPRINT CHRBI27);'e';CHR«(27);'I'?CHRB( 24I;CHRB(27);'3';CHRB(32»;

28