Язык программирования Форт



Приложение Д. Ответы к упражнениям - часть 34


Блок 159 [159 :0] ( Глава 16. Упражнения 2. 02 из 04 ) ( 1. продолж. ) ( 8088 ) CODE DUP BX POP BX PUSH BX PUSH NEXT END-CODE CODE OVER BX POP CX POP BX PUSH CX PUSH BX PUSH NEXT END-CODE CODE ROT BX POP CX POP DX POP CX PUSH DX PUSH BX PUSH NEXT END-CODE CODE 2DUP BX POP CX POP BX PUSH CX PUSH BX PUSH CX PUSH NEXT END-CODE CODE NIP BX POP CX POP BX PUSH NEXT END-CODE CODE TUCK BX POP CX POP BX PUSH CX PUSH BX PUSH NEXT END-CODE CODE -ROT BX POP CX POP DX POP BX PUSH CX PUSH DX PUSH NEXT END-CODE

Блок 160 [160 :0] ( Глава 16. Упражнения 2. 03 из 04 ) ( 2. ) ASSEMBLER DEFINITIONS : PSH AX PUSH NEXT END-CODE ; ( 3. ) ASSEMBLER DEFINITIONS : PSH3 BX PUSH DX PUSH AX PUSH NEXT END-CODE ; ( 4. ) ASSEMBLER DEFINITIONS : ;C NEXT END-CODE ; ( 5. ) FORTH DEFINITIONS CODE @REGS DI PUSH SI PUSH SP PUSH DX PUSH CX PUSH BX PUSH AX PUSH NEXT END-CODE : .REGS @REGS 7 0 DO 8 .R LOOP ; ( 6. ) CODE - DX POP AX POP DX AX SUB AX PUSH NEXT END-CODE

Блок 161 [161 :0] ( Глава 11. Упражнения 2. 04 из 04 ) ( 7а. ) : ARRAY CREATE 1+ 2* ALLOT ;CODE AX POP AX AX ADD BX AX ADD 2 # AX ADD AX PUSH NEXT END-CODE ( 7b. ) : DARRAY CREATE 1+ 4 * ALLOT ;CODE AX POP AX AX ADD AX AX ADD BX AX ADD 2 # AX ADD AX PUSH NEXT END-CODE ( 7c. ) ( Это требует лишь 1/3 времени от того. что нужно опнсаниям. в которых использовано DOES> ) : CONSTANT CREATE , ;CODE 2 # BX ADD [BX] PUSH NEXT END-CODE ( 7d. ) : 2CONSTANT CREATE , , ;CODE 4 # BX ADD [BX] PUSH 2 # BX SUB [BX] PUSH NEXT END-CODE ( Эти описания предполагают, что при обращении BX содержит CFA слова и что PFA отстоит от CFA на два байта. Это соответствует требованиям MMSFORTH. )

Блок 162 [162 :0] ( Глава 16. Упражнения 3. 01 из 01 ) ( 1. ) ASSEMBLER DEFINITIONS 0 CONSTANT ВС 2 CONSTANT DE 4 CONSTANT HL 6 CONSTANT AF : 1Z80ARG ( n -- ) CREATE , DOES> @ SWAP 8 * + С, ; 193 1Z80ARG (POP) 187 1Z80ARG (PUSH) FORTH DEFINITIONS ( 2. ) CODE IF=DROP AX POP BX POP AX BX CMP ~ Z IF BX PUSH AX PUSH THEN NEXT END-CODE ( 3. ) ( Следующее слово почти в 3 раза быстрее, чем 2 * .) CODE 2* AX POP AX AX ADD AX PUSH NEXT END-CODE ( 4. ) CODE 10* 0 # BX MOV 0 # CX MOV AX POP 10 # DX MOV BEGIN BX INC DX CX ADD AX BX CMP Z UNTIL CX PUSH NEXT END-CODE

Блок 163 [163 :0] ( Глава 16. Упражнения 4. 01 из 01 ) ( 1. ) LABEL SAVESTACK [ неиспольз. peг.] POP AX PUSH BX PUSH CX PUSH DX PUSH [тот же регистр] PUSH RET END-CODE ( Применяйте неиспользуемый регистр в вашем Форте для хранения адреса возврата, который заносится в стек при обращении к SAVESTACK) ( 2. ) CODE PLOTEMIT ( n1 n2 -- ) DX POP CX POP FF00 CALL NEXT END-CODE ( 3. ) CODE GETDATA ( n1 -- n2 ) AX POP FF00 CALL AX PUSH NEXT END-CODE ( 4. ) CODE CETDATA ( n1 -- n2 ) AX POP BX PUSH SI PUSH FF00 CALL SI POP BX POP AX PUSH NEXT END-CODE




Содержание  Назад  Вперед