Микропроцессорные средства и системы 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 г.




СОДЕРЖАНИЕ:


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

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



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

Похожие статьи:
Chaos Constructions '999 - отчёт.
Вступление - о новой Питерской газете.
Artique - Schafft: о том почему недостаток, невнимание, и иногда даже отрицательное отношение к ascii-art на Spectrum'е.

В этот день...   2 июля