Начальный курс программирования на языке Форт


ФОРТ-АССЕМБЛЕР - часть 7


Пока его значение не равно нулю, перемещаем символ из памяти, на которую ссылается указатель, в сумматор. Если код обрабатываемого символа больше 60 (строчная «а» и выше), вычитаем десятичное число 32, преобразуя символ в прописной, и записываем в память. Уменьшаем счетчик и увеличиваем адрес. Повторяем цикл. Передаем управление NEXT).

Преимущество работы на ассемблере такого вида заключается в том, что вы во время ассемблирования «находитесь в Форте». Если вам необходимо идентифицировать некоторое устройство с помощью имени, а не числа, вы можете определить его как обычную константу и присвоить ей имя внутри ассемблерного определения. Можно воспользоваться определением через двоеточие как макрокомандой или даже обратиться к переменной, поскольку она помещает в вершину стека свой адрес и поэтому может быть задействована в команде «непосредственной загрузки». Применение машинных команд раскрывает перед вами всю мощь языка Форт.

В основу описанного здесь ассемблера положен ассемблер 8080, разработанный Дж. Кассэди. Мы внесли в него изменения в соответствии со Стандартом-83 и для простоты изучения убрали некоторые зависимые от системы фрагменты. С оригиналом вы можете познакомиться в [1 ]. Ассемблер для других процессоров описан в [2], [3], [4].\ Ассемблер 8080 \ учебная версия ассемблера 8080,основанная на фигФорте; \ разработана Джоном Кэсседи HEX VOCABULARY ASSEMBLER : CODE CREATE HERE HERE 2- ! ASSEMBLER ; ASSEMBLER DEFINITIONS : END-CODE CURRENT @ CONTEXT ! ; 0 CONSTANT В 1 CONSTANT С 2 CONSTANT D 3 CONSTANT E 4 CONSTANT H 5 CONSTANT L 6 CONSTANT PSW 6 CONSTANT M

6 CONSTANT SP 7 CONSTANT A : 1MI CREATE C, DOES> C@ C, ; : 2MI CREATE C, DOES> C@ OR C, ; : 3MI CREATE C, DOES> С@ SWAP 8 * OR C, ; : 4MI CREATE C, DOES> С@ С, С, ; : 5MI CREATE С, DOES> С@ С, , ;

\ Ассемблер 8080 HEX 00 1MI NOP 76 1MI HLT F3 1MI DI FB 1MI ED 07 1MI RLC 0F 1MI RRC 17 1MI RAL 1F 1MI RAR E9 1MI PCHL F9 1MI SPHL E3 1MI XTHL EB 1MI XCHG 27 1MI DAA 2F 1MI CMA 37 1MI STC 3F 1MI CMC 80 2MI ADD 88 2MI ADC 90 2MI SUB 98 2MI SВВ А0 2MI ANA A8 2MI XRA B0 2MI ORA B8 2MI CMP B9 3MI DAD C1 3MI POP C3 3MI PUSH B2 3MI STAX 0А 3MI LDAX 04 3MI INR 05 3MI DCR 03 3MI INX 0B 3MI DCX C7 3MI RST D3 4MI OUT DB 4MI SBI E6 4MI ANI ЕЕ 4MI XRI F6 4MI ORI FE 4MI CPI 22 5MI SHLD 2A 5MI LHLD 32 5MI STA 3А 5МI LDA CD 5MI CALL

\ Ассемблер 8880 HEX C9 1MI RET C3 5MI JMP C2 CONSTANT 0= D2 CONSTANT CS E2 CONSTANT PE F2 CONSTANT 0< : NOT 8 OR ; : MOV 8 * 40 + + C, ; : MVI 8 * 6 + C, C, ; : LXI 8 * 1+ C, , ; : THEN HERE SWAP ! ; : IF C, HERE 0, ; : ELSE C3 IF SWAP THEN ; : BEGIN HERE ; : UNTIL C, , ; : WHILE IF ; : REPEAT SWAP JMP THEN ; : NEXT (NEXT) JMP ;




Начало  Назад  Вперед



Книжный магазин