Микропроцессорные средства и системы 1987 №3 1986 г.

Снежко Е. М„ Тихомиров А. Е. - компактный мобильный кроссассемблер.


программное обеспечение

УДК 681.3.06

Е. М. Снежко, А. Е. Тихомиров

компактный мобильный кроссассемблер для
микропроцессора кр580вм80

Существует несколько систем отладки программ мик-»
ропроцессора КР580ВМ80 на ЭВМ различных клас-
сов, Предлагаемый кроссассемблср отличается, преж-
де всего, компактностью и наглядностью, может быть
введен по листингу с терминала любой ЭВМ, рабо-
тающей с языком Паскаль, и предназначен для ас-
семблирования небольших программ. Результат рабо-
ты ассемблера — листинг исходного текста и резуль-
тирующей программы с диагностикой ошибок, а также
объектный модуль. Особое внимание уделено сокраще-
нию размеров ассемблера, поэтому в нем отсутствуют
директивы условной трансляции и макросы. Выбрана
двухпроходная схема ассемблирования с записью про-
межуточного файла на магнитный диск [1, 2]. Так как
операции ввода-вывода связаны с использованием
конкретных операционных систем, описывается вари-
ант ассемблера, работающий в системах РАФОС и
ОС РВ СМ ЭВМ. В системе РАФОС использовался
компилятор Паскаль V1-564, в ОС РВ — Паскаль-2
V2.0/RSX. Исходный текст занимает 23 блока на ди-
ске, а загрузочный модуль — 32 блока в системе
РАФОС. Для работы программы в РАФОС необхо-
димо минимум 22К байт оперативной памяти.

Исходная программа для микропроцессора записы-
вается с помощью любого редактора текста на маг-
нитный диск в файл с расширением .ASM. Каждая
строка программы состоит из полей метки, команды
или директивы, операндов, комментариев. Данные и
команды могут иметь метки длиной до 6 знаков; сим-
волический адрес в команде LXI — до 4 знаков. Ас-
семблер распознает общепринятые директивы [3]:
ORG — задание начального адреса (4-разрядное 16-рич-
ное число); EQU — присваивание произвольного 4-раз-
рядного 16-ричного значения; END — конец програм-
мы; DS — резервирование заданного числа байтов
(в десятичной системе счисления); DW — определение
двухбайтовой адресной константы (в поле операндов
стоит символический адрес); DB — определение одно-
байтовой 2-разрядной 16-ричной константы.

В процессе ассемблирования производится: присвое-
ние адресов командам и данным с помощью адресно-
го счетчика; перевод команд в 16-ричные машинные
коды; перевод символических адресов в 16-ричные по
таблице адресов; выдача листинга программы и со-
общений об ошибках, а также объектного модуля. При
первом проходе вводится программа построчно, за-
носится символический код в строку для печати, со-
ставляется таблица имен с распределением адресов,
обрабатываются директивы ассемблера и операндов,
содержащих код регистра, записывается промежуточ-
ный файл на магнитный диск. Па втором проходе чи-
тается промежуточный файл, заменяются метки соот-
ветствующими адресами и заносятся строки листинга
в выходной файл, преобразуются и заносятся данные
в объектный файл,

Листинг ассемблера на Паскале (рис. 1J содержит
следующие основные переменные: Z — выходная стро-
ка программы, включающая машинный код и текст
исходной строки; NALI — таблица меток и их адресов,
число которых в данной реализации NA^200. Это
число можно увеличить, повышая размерность массива
в разделе описания переменных. В таблице VORB со-
держится список команд, для которых необходим сдвиг
адреса операнда в код команды, а в таблице COD —
список команд и соответствующий код [4]. Для ком-
пактности листинга таблица COD вводится с термина-
ла как массив из 61 строки по 40 символов, а в ос-
новной программе используется как массив из 244 строк
следующего формата: 6 байт — команда, 2 байта —
код команды, 2 байта — разделители (--).

На рис, 2 приведено назначение полей используе-
мых записей. Для однобайтовых команд без операн-
дов производится непосредственное кодирование; для
двухбайтовых команд с операндом адрес операнда
сдвигается в мнемокод команды. Двухбайтовые коман-
ды с константой содержат в первом байте код коман-
ды, во втором — константу. Если двухбайтовая команда
содержит код регистра, он сдвигается в первый байт.
Трехбайтовые команды с адресом ОЗУ содержат в
первом байте — код команды, во втором — младшие и
в третьем — старшие разряды адреса. В трехбайтовой
команде код регистра сдвигается в первый байт. Со-
общения в листинге: CODE — недействительный ' код
команды, U12 — не найдена метка в поле DW, U23—
не найдена метка в поле команды.

Пример работы ассемблера приведен на рис. 3. Для
ассемблирования необходимо запустить программу со-
ответствующей командой монитора, по запросу ввести
имя файла с исходной программой (до 6 знаков). Вы-
ходной файл с листингом имеет то же время, но с
расширением 580, а объектный модуль — с расши-
рением .ОВМ, он начинается служебной информацией:
код 53Н, начальный адрес программы, ее конечный
адрес; далее следуют коды [5]. При использовании за-
грузчика другого типа процедуры WRITEOBECTHEAD
и WRITEOBJECT должны быть соответственно изме-
нены. Выходные файлы могут быть просмотрены или
распечатаны стандартными программами операционной
системы. Промежуточный файл TEMP. ТМР не сохра-
няется. После ассемблирования указанной программы
управление передается монитору.

Приведенный кроссассемблер содержит минимальный,
но достаточный для трансляции небольших программ
набор директив. Язык Паскаль позволяет получить
«прозрачную» программу ассемблера, которую легко
ввести, отладить и модернизировать. При необходимо-
сти несложно включить дополнительные возможности,
например расширение списка директив, включение ус-
ловной трансляции и др. Для использования макро-

3>R06RAH KR035? WPBtfc « АССЕМБЛЕР Ш МИКРОПРОЦЕССОРА КР580 *>
CONST BLANK

1ГРЕ WORD * PACKED ARRAY CI..43 ОГ CHAR?
CHAR40 = PACKED ARRAY Cl..403 OF CHAR?
CHAR42 = PACKED ARRAY CI..423 OF CHAR/
' CHAR2 = PACKED ARRAY CI..2 3 OF CHAR?
CHAR13 = ARRAY(C1..133 OF WORD*

7ABLESTRIN6 - RECORD A i WORD; В, С : CHAR2 END/
CODETAfiLE K RECORD CASE CHAR OF

»E's(E:ARRAY CI..2443 OF TABlESTRING)}
'D':(D;ARRAY CI..613 OF CHAR40) END;
JRADIX16 « RECORD CASE INTEGER OF

1 :<ft: PACKED ARRAY C1..163 OF CHAR)?
16 :(B: ARRAY CO..153(OF CHAR ) END;

С * RECORD CASE INTEGER OF

1 i(AsARRAY CI..213 OF WORD)Г

2 ;(В:ARRAY Cl..33 OF CHAR42) END?
В * RECORD CASE INTEGER OF

X ; (A:CHAR2); 2 (B:WORD) END?

m

COD i CODETABIEJ FbF2»F3»F4 i TEXT? CODE : D; VORB : С,*
NA>N»I/BZ>J»NBYTE»ERRORiSTART :INTEGER?

NALI s ARRAY Cl. .2,1. .2003 OF WORD? Z : CHAR 13; SYS : RADIXU?
FILNAM»NAME»FUNK/OPER : WORD?
PROCEDURE FILENAME; (*ВВОД ИМЕНИ(ФАЙЛА Ш ОБРАБОТКИ *)
VAR I : INTEGER; BEGIN
WRITELN ('КРОСС-АССЕМБЛЕР КР580»)? WRITE (»ИМЯ ФАЙЛА -> ')?
I:=lJ WHILE (NOT EOLN) AND (I<=6> DO

BEGIN READ(FILNAMCI3)J I:=I+i END; URITELN END («FILENAME»)?
PROCEDURE READSTRING (VAR F:TEXT; VAR Z:CHAR13? N:INTEGER);
(* ЧИТАЕТ СТРОКУ ИЗ ТЕКСТОВОГО ФАЙЛА НА ДИСКЕ.

ПАРАМЕТРЫ: Р:ФАЙЛ» Z: ЧИТАЕМАЯ СТРОКА, N- НОМЕР ПОЛЯ ЛИСТИНГА/
НАЧИНАЯ С КОТОРОГО В ПЕРЕМЕННУЮ Z ЗАНОСИТСЯ СТРОКА *)
VAR I;J:INTEGER; BEGIN FOR I;-N TO 13 DO ZU3;=BLANK|
I:=N; WHILE <NOT EOLN(F)) AND (I<=13) DO
BEGIN J: =1; WHILE (NOT EOLN (F)> AND (J<=<$) DO
■ BEGIN READ (FtZCI3CJ3)J Ji-J+l END; I:=I+1; END*

READLN (F) END («READSTRING*)'

PROCEDURE WRITESTRING (VAR FsTEXT; VAR ZsCHAR13? N:INTEGER);
С* ЗАПИСЫВАЕТ СТРОКУ В ФАЙЛ.(F-ФАЙЛ, Z-CTPOKA ДЛЯ ВЫВОДА/

N- НОМЕР СТРОКИ ЛИСТИНГА; ЕСЛИ N=0> ВЫВОД ВО ВРЕМЕННЫЙ ФАЙЛ *>
VAR IsINTEGER; BEGIN IF N О О THEN WRITE (F»N>1. »);
FOR Is-1 TO 13 DO WRITE (F»ZCI3); WRITELN (F) END («WRITESTRING*)/
PROCEDURE HEXADECIMAL (VAR D:UORD;W;INTEGER); VAR P>I;J : INTEGER;
<* ПРЕОБРАЗУЕТ ЧИСЛО W В ПОСЛЕДОВАТЕЛЬНОСТЬ В 16-ЗИЧНЫХ ЗНАКОВ *)
BEGIN J;=ABS (W); I:=4; IF W<0 THEN D s='FFFF » ELSE D:='0000 »;
REPEAT P:=J MOD 1(5; IF U(0 THEN D CI3:=SYS.BC15-ABS(P-1)M0D 163

ELSE DCI3:=SYS.BCPJ; J;=J DIV 16? I;=I-1
UNTIL (J=Q) OR (1=0) END («HEXADECIMAL*)*

PROCEDURE JUSTIFY (VAR AiWORD; HsINTEGER); VAR BiWORD; K;J.IsINTEGER;
(* ВЫРАВНИВАЕТ ПОЛЕ А ПО ПРАВОЙ (11=2) ЛИБО ЛЕВОЙ UI=J) ГРАНИЦЕ *)
BEGIN B;=BLANK> CASE II OF

J.:BEGIN Jj=l; FOR IB-1 TO 6 DO IF AC13<>' » THEH

BEGIN BCJ3:=ACI3; J:=J+1 END END?
2:BEGIN J:=6; FOR I:=6 DOUNTO 1 DO IF ACI3<>' 1 THEM

BEGIN BCJ3:=ACI3; J:=J-i; END END END; As=B END I*JUSTIFY*)t
FUNCTION CONVERSION (OPER:WORD; B;INTEGER)-.INTEGER, VAR It J»K:INTEGERJ
(* ПРЕОБРАЗУЕТ СИМВОЛЬНОЕ ПРЕДСТАВЛЕНИЕ OPER В ЧИСЛО ПО ОСНОВАНИИ В *)
BEGIN JUSTIFY'(0PER/2)"; К:=0? FOR 1:*1""Т0'б ДО BEGIN Ji-'l/
3F OPER ИЗО» ' THEN REPEAT J:=J+i;

IF OPERCI3=SYS,ВСJ3 THEN K:=K«B+J
UNTIL (J>=B)OR(OPER. CI3=SY9.BCJ3) END; CONVERSION:^ END («CONVERSION*)1
PROCEDURE LISTING (I:INTEGER» VAR J:INTEGER? 21>Z2»Z3,Z4:«0RD),*
<» ФОРМИРУЕТ СТРОКУ ЛИСТИНГА» I УКАЗЫВАЕТ ДЛИНУ КОМАНДЫ* J- ЗНАЧЕНИЕ

СЧЕТЧИКА КОМАНД/ Z1-Z4 - ПОЛЯ СТРОКИ Z *>

BEGIN ZCUssZl; HEXADECIMAL (ZC23»J)7 NBYTE|=NBYT£+I?
JUSTIFY (ZC23,1); ZC33:=Z3? ZC43;=Z4; J:=J+I END («LISTING*)J
PROCEDURE SHIFT (I:INTEGER);

<* СДВИГ ИЗ ПОЛЯ ОПЕРАНДОВ В ПОЛЕ КОМАНД ДВУХ (1-2) ИЛИ ТРЕХ РАЗРЯДОВ *>
BEGIN CASE I OF

2: BEGIN FUNK C53:=0PERtl3? FUNK m:=0PERC23;

OPER C13s»' ' » OPER C23;=■' » ENDf
3: BEGIN FUNK C43:=OPERL13; FUNK C53:=0PERC23; FUNK C63:=0PERC33;

OPER » J OPER » I OPER C33: = ' » END

END; JUSTIFY(OPER, 1> END (*SKIFT*);

PROCEDURE SHARING (AB:U0RDJ VAR A?B :WORD)?

(* ПЕРЕПИСЫВАЕТ ИЗ ПОЛЯ AB СИМВОЛ 1>2 В ПОЛЕ Bf СИМВОЛ 3»4 -В ПОЛЕ А *>
BEGIN A;=BLANK; B;=BLANK? ВС13:=АВС13; ВС23:=АВС23?

AC13:=ABC33; AC23i=ABC43 END («SHARING*)?

PROCEDURE URITEOBJECT; VAR NsCHARj D:3NTEGER; («• ФОРМИРУЕТ ОВЬЕКТНЫИ ФАЙЛ v)
BEGIN IF (ZC3DC13<>> ') AND (ZC13L13()'U') THEN BEGIN
N:=CHR (CONVERSION (ZC33f 16)); WRITE (F4»N)? IF ZC43C130* ' THEN
BEGIN N:=CHR(CONVERSIONCZC43,16))J WRITE (F4,N); IFZC53C130' » THEN
BEGIN N:=CHR(CONVERSION(ZC53/16))? WRITE (F4rN) END END END END WUTEOSJ*);
PROCEDURE WRITEOBJECTHEAD; VAR N:INTEGER; AjBJC-.UORD;
(* ВЫВОД ЗАГОЛОВКА ОБЬЕКТНОГО ФАЙЛА *)
BCGIN HEXADECIMAL (C/START);

WRITE (F4»CHR(CONVERSION(т 53M6))); SHARING (С»А,В)?

WRITE (F4>CHR(CONVERSION (A>16))); WRITE (F4»CHR(C0NVERSI0N(B;U))) ;

N:=START+NBYTE; HEXADECIMAL (C»N)J SHARING (CjA»B);

WRITE (F4rCHR(CONVERSION(A;16))); WRITE (F4;CHR(CONVERSION{St 16)))

END (*WRITEOBJECTHEAD*);

(«НАЧАЛО ПРОГРАММЫ»),

BEGIN FILENAME; RESET (FlrFILNAM;'ASMf »I)?
IF КО THEN WRITELN ('ФАЙЛ > »FILNAM, * .ASM HE НАЙДЕН') ELSE
BEGIN REWRITE (F2;FILNAM>'580')» REWRITE (F31'TEMP/TEMPf}fTUP *)|
REWRITE (F4/FILNAM;'OBM');

BZ:=0; SYS.,A := '0123456789ABCDEF'; ERR0Rt=0; NBYTE:=Oj?
VORB.BC13:='MOV LDAX POP LXI STAX PUSH MVI 1i
VORB.ВС:3:='INR DCR INX DCX ADD ADC DAD ';
VORB.SUB SBB ANA ORA XRA CMP RST 'j

COD.Dtil OO-STAXB flMMX В бВ

C0D.DC23 :='DCR В OS—RLC 07—DAD В 09—LDAXB OA—19
C0D.DC33 :='DCX В OB—INR С ОС—DCR С OD—RRC OF—'?
C0D.DC43 :='STAXD 12—INX D 13—INR D 14—DCR D 15—
CQD.DC53 :='RAL 17—DAD D 19—LDAXD 1A—DCX D IB—'I
C0D.DC63 ?efINR E 1С—DCR E ID—RAR IF—INX H 23—";
C0D.DC73 ;='INR H 24—DCR H 25—DAA 27—DAD H 29—»?
COD.DC83 ; = 'DCX H 2B—INR L 2C—DCR L 2D--CW 2F—
CQD.DC93 :='INX S 33—INR D 34—DCR M 35—STC 37—'?
C0D„DC103:='DAD S 39—DCX S 3B—INR A 3C—DCR A 3D—'?
C0D.DC113:='CNC 3F—M0VBrB40—M0VB;C4L—M0VB»D42—'?
COD.DL123:='M0VB»£43—MOVB;H44—MOVB»L45—NOVb»L46—' ?
C0D.DC133:='M0VB>A47—MQVC;B48—M0VC;C49—M0VC»D4A—19
C0D.DC14J:='M0VC»E4B—M0VC»H4C—M0VC»L4jD—M0VC»M4E—' ?
*rOD.DC153: = 'MOVC?A4F—M0VD»B50—MOV0rC5l—M0VD»D52—* J
COD.DC163:=' MOVD» E53—MOVD, H54—MOVD»L55—MOVD» M56~' ?
COD.DC173: = 'MOVD,A57—M0VE»B58~-M0VE»C59--M0VE»D5A—'?
COD.DC 18 3;MOVE » E5B—MOVE » H5C—MOVE > L5D—MOVE t M5E'—' 9
C0D.DC193 s^'MOVE» A5F—MOVH» B60—M0VH>C61—M0VH»D62—' J
COD.DC201i ='MOVH»E43—MOVH,H64--MOVH»L65 --MOVH > M66--';
, COD.DC213:=' MOVH» A67—J1GVL/ B68—MOVL? C69—MOVL/D6A—' r
COD.DC: 23 :='MOVL,E6B—MOVL,H6C—MOVLt L6D" -MOVL»M6E—' 9
C0D„DC233;='M0VL»A6F—M0VM»B704~M0VM>C71—MQVMfD7£—'7
COD. DC243 :='MO VH»E73—MO VM»H74 "MOVH, L75—MOVM»A77—
•CQD.DC25n:='M0VArB78—M0VA»C79—M0VA>D7A~M0VA;E7E—
C0D.DC263;i='M0VAjH7C—M0VA>L7D—M0AA»M7E—M0VA»A7F—'Г
C0D.DC27I!:='ADD В 80—ADD С 81—ADD D 82—ADD E 83—'?
•C0D.DC283:='ADD H 84—ADD L 85—ADD M 86—ADD A 87—';
C0D,DC293s='ADC В 88—ADC С 89—ADC D 8A—ADC E 8B—»?
:COD,DC303:='ADC H 8C—ADC L 8D—ADC M 8E—ADC A 8F—'?
C0B.DC313:='SUB В 90—SUB С 91—SUB D 92—6UB E 93—'?
CQD„DC323:='SUB H 94—SUB L 95—SUB M 96—SUB A 97—'?
C0D.DC333:='8B8 В 98—8BB С 99—SBB D 9A—SBB E 9B—
C0D.DC343i^'SBB H 9C—6BB U 9D—CBB M 9E—SBB A 9F—
COD,DC351 s- ' A&/A В AO—АЫА С Al— ANA D A2—ANA E A3—'?
C0D.DC363:='ANA H A4—ANA L A5—ANA M A6—ANA A A7—»?
C0D,DC373:='XRA В A8—XRA С A9—XRA D AA—XRA E AB—'?
C0D.DC381:='XRA H AC—XRA L AD—XRA M AE—XRA A AF—'?
C0D„DC393:='0RA » BO—ORA С Bl—ORA D B2—ORA E B3—'?
COD„DC403:='0RA H B4—ORA L B5—ORA M B6—ORA A B7—П
CODfDC413:='CMP В B8~CMP С B9—CMP D BA—CMP E BB—'?
C0D.DC423:='CMP H ВС—CMP L BD—CMP M BE—CMP A BF—>?
C0D.DC433:='HLT 76—RNZ CO—POP В CI— PUSHB C5—'?
C0D.DC441:='RST О C7—RZ C8—RET C9—RST 1 CF—';
C0D.DC453:='RNC DO—POP D Dl—PUSHD D5—RST 2 D7--'?
C0D„DC461: = 'RC D8—RST 5 DF—RPO EO—POP H El—'?
C0D.DC473;='XTHL E3—PUSHH E5--RST 4 E7—RPE ES—»?
COD.D C483:='PCHL E9—XCHG EB—RST 5 EF—RP FO—'?
C0D.DC49j:='P0P PSF1—DI F3—PUSHPSF5—RST 6 F7—'?
C0D.DC503:='RM F8—SPHL F9—EI FB—RST 7 FF—'?
C0L.DC513:='MVI B»06—MVI CfOE-HVl D,16—MVI ErlE—'?
C0D.DC52H;='MVI H»26—MVI L»2E—MVI flr36—MVI A?3E—
C0D.DC533:='ADI C6~~ ACI CE—OUT D3—SUI D6—'?
C0D.DC54D:='IN DB—SBI DE—ANI E6—XRI EE--' 1
C0D.DC55H:='0RI F6—CPI FE—LXI B»01—LXI D>11 —
C0D.DC563:='LXI H'21—LXI S»31—SHLD 22--LHLD 2A—
*C0D.DC57Di='STA 32—LDA ЗА—JNZ C2—JMP C3—
C0D.DC58Ds = 'CNZ C4~JZ CA—CZ CC -CALL CD—'?
C0D.DC593 JNC D2—CNC D4--JC DA—CC DC—'?
C0D.DL601:='JP0 E2—СРО E4—JPE EA—CPE EC—»?
C0D.DC613:='JP F2—CP F4—JN FA—CM FC— '7
WRITELN <F2,» 'КРОСС-АССЕМВЛЕР ЛЛЯ МИКРОПРОЦЕССОРА KP580?);
URITELN (F2)} NAs=l; N:=0; START;=0*

WRITELN(F2,' i > АДРЕС»» 'ОПЕРАНД')?
REPEAT FOR I:=l TO 5 DO ZCI3s=BLANK?

READSTRING (F1 tZT6)f N:=N<-1? NANE:=ZСёЗ? FUNK:=ZC7J;0PER:^ZC83?
JUSTIFY(NAME»D f JUSTIFY (FUNK» 1) ? JUSTIFY (QPER»1); IF NAM^OBLANK ТНЕЙ
'BEGIN NALI CI »NA3:=NAME? HEXADECIMAL (NALIC2»NA3,BZ)NAj=NA+l END?
IF FUNK=BLANK THEN С* ДЕЙСТВИЕ АССЕМБЛЕРОМ HE ПРОИЗВОДИТСЯ *)
ELSE IF FUNK3'ORG ' THEN BEGIN BZ:=COWVERSION (0PER»16};

IF START=Q THEN START:-BZ END
ELSE IF FUNK»'DB f THEN LISTING (1 ,BZ,Zi:l]»ZC23,0PER»ZC43)
fLSE,IF. ' JHCM. иШШ-U'^t2JrZtW/0PER}

ELSE IF FUNK='DS ' THEN LIST I N3 (CONVERSION (OPER» 10} »BZ;ZQ.l;Zi:23/Zi:3:^ZL43>
ELSE IF FUNK='EQU ' THEN NALI C2»NA-13:=0PER
ELSE IF FUNK='END » THEN BEGIN

(*• ВТОРОЙ ПРОХОД *)

URITESTRIN6 <F3/ZfO); RESET (F3); URITEOBJECTHEAD? HAs=NA-l?
FOR I:=l TO N DO BEGIN READSTRING ttZtlfl)}
J:=0; IF ZC13C1J='U' THEN REPEAT J:=J+1?
IF (ZC43=NALKbj:)- THEN BEGIN CASE ZCHCJI OF

y2':SHARING (NALIC2>J3»ZC?3»ZC43); '3':SHARING (NALIC2»J3/Zt4J;ZC53)?
'V:ZC43:=NALIC2,J3 END; ZC13:=BLANK END'

UNTIL <J>=NA) OR (ZC43«NALIC1,J3)? IF ZC13C33=»4' THEN ZL13:=BLANK?
IF ZC13C130 ' ' THEN ERROR:=ERR0R+1; WRITESTRING(F2»Z,I)J URITEOBJECT END/
WRITELN (F2); WRITELN <F2/' ОБНАРУЖЕНО ОШИБОК: '»ERROR)?

WRITELN (F2>' ВСЕГО БАЙТОВ : '>NBYTE);

URITELN COFHAP/IEHO ОШИБОК: »fERROR)?

URITELN ('ВСЕГО БАЙТОВ : »»NBYTE> END (* КОНЕЦ РАБОТЫ *>

(* ПРОДОЛЖЕНИЕ ПЕРВОГО ПРОХОДА*-)
ELSE BEGIN <* ОБРАБОТКА КОМАНД АССЕМБЛЕРА КР580 *) J:=0?
REPEAT J;=J+1? IF FUNK=VORB.AtJ3 THEN IF J=1 THEN SHIFT(3> ELSE SHIFT(2)
UNTIL (FUNK=VORB,ACJ3) OR U >= 21>;Js=0? JC13;='C0flE '; CODE.B:=BLANK/
REPEAT J:=J+1;

IF FUNK«C0D.ECJ3.A THEN BEGIN C0DE.A«=C0D.ECJ3.B; ZC13:=B|.AMK?
IF (J>=1) AND <J<=200) THEN LISTING (l»BZ,Zi:i3aC23>C0DE,B?iCW
ELSE IF J<=218 THEN LISTING (2fBZf'U34 '»ZC23fCODE.B>OPER}
ELSE LISTING (3fBZ»'U23 '>ZC23,CODE.B»OPER) END
UNTIL (J>*244> OR (FUNK=C0D.ECJ3.A)
END» WRITESTRING (F3»Z»0)

UNTIL(EOF(Fl)) ENDf CL0SE(F1); CLOSE(F2)J CLOSE<F3); CLOSE(F4) END. (*KRQSS*)

С труп my per переменных палей типа „П "

Л*-

CHAR

CHAR

в-

CHAR

CHAR

CHAR

CHAR

CHAR

CHAR

команд можно организовать дополнительный файл на

диске или динамически выделяемую память. Изменяя
таблицу кодов, легко создать кроссассемблеры для
других 8-разрядных микропроцессоров.

Телефон для справок: 3-14-01, г. Днепропетровск.

ЛИТЕРАТУРА

1. Баррон Д. Ассемблеры и заг-
рузчики.—М: МИР, 1974.—78 с.

2. S с h m i 11 G. Einfacher Cross-As-
sembier fur Mikroprozessoren //
Elektronik.—1978.— N 5. — S. 69—
72.

3. Григорьев В. Л.— Програм-
мное обеспечение микропроцессор-
ных систем.—М.: Энергоатомиздат,
1983.

4. Микропроцессоры: системы
программирования и отладки / Под
ред. В. А. Мясниковэ, М. Б. Иг-
натьева.— М.: Энергоатомиздат,
1985.—272 с.

5. А л е к с е н к о А. Г., Га ли-
ц ы н А. А., И в а н н и к о в А, Д.
Проектирование радиоэлектронной
аппаратуры на микропроцессорах.—
М.: Радио и связь, 1984.—270 с.

Статья поступила 1 ноября 1985 г.




СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Обзор - новые игры: RETURN TO HOME 4, CITADEL, KLADEMINER, BRIDGE PLAYER, CRUSHER, AMERICAN TURBO KING, RAD RAMP RACER, KUNG FU MASTER, CHOY LEE, SIDERAL WAR, ARKARUM, DIRT TRACK RACER, DOUBLE DRAGON 2, NIGHT BREED, THE CYCLES, MOONTORC, KOMMANDO 2.
Дискуссия - о том, кто же придумал наш журнал, кто дал название и кто был идейным воплотителем.
AD&D - Тексты на тематику AD&D.
От редактора - в пocлeднee вpeмя кaк бyдтo бы для вceгo миpa нacтyпилa "чepнaя пoлoca"...
BBS NEWS - Графика работы станций.

В этот день...   22 мая