User Tag List

Показано с 1 по 10 из 25

Тема: Чья фишка? (приём программирования)

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #7

    Регистрация
    05.10.2016
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,080
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    5
    Поблагодарили
    5 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Это общеизвестный и распространённый приём. Он экономит ОЗУ и удобен, т.к при наборе не надо искать место где-бы втиснуть текстовую строчку. Я так делаю уже более 20 лет. Только я использую RST 18H. Заимствовал из ROM-BIOS ГДР-овских компьютеров (а также и другие RST). Эти RST встроены во все мои ДОС (блок RST кидается на адрес 8 при WARM BOOT DOS), т.к в большинстве ДОС на КР580/Z80 ZERO-page именно для этого и резервирована. Также встречал этот приём при дизассемблировании многих известных CP/M-программ. Этот приём также использован в многих программах известного программиста для ОРИОНА В.Сугоняко. Привожу вариант, как это встречается во многих фирменных CP/M-программах в варианте для CP/M уже не просто в дизассемблированном виде, а в том виде как это было в исходниках (т.е реконструкция). Хотя RST гораздо выгоднее. Использование макро порождает иногда довольно глупый код, например CALL, а затем RET. Хотя (т.к мы не на 80x86) на 8-ми разрядках просто ставят JMP вместо CALL и последующего RET.

    Код:
    .
    fmssg	EQU	9
    
    CPM	MACRO	PARAM
    	LD	C,PARAM
    	CALL	5
    	ENDM
    	
    MSSG	MACRO	PARAM
    	LOCAL	M1
    	CALL	M1
    	defb	PARAM
    	defb	'$'
    M1:	POP	DE
    	CPM	fmssg
    	ENDM
    	
    CRMSSG	MACRO	PARAM
    	LOCAL	M1
    	CALL	M1
    	defb	13,10
    	defb	PARAM
    	defb	'$'
    M1:	POP	DE
    	CPM	fmssg
    	ENDM
    	
    Пример использования в тексте:
    
    	CRMSSG	'Здравствуйте Denn !'
    Если используется вариант CALL, то это затрудняет дизассемблирование не только неопытным, а всем (я так понимаю, что мерзкое слово нуб означает неопытный). Если использовать RST 18H, то это по крайней мере сразу обнаруживается (а если дизассемблер позволяет, то это можно даже автоматизировать).

    файл RST.INC


    Код:
    .
    ; портит ячейки 8...40H
    
    BEGRST:
    ;INPUT:	
    	PUSH    HL              ; RST 8 ;1
    	PUSH    DE                      ;1
    	PUSH    BC                      ;1
    	CALL	CONST			;3
    	JR      @INPUT			;2
    
    ;SCOUTA:
    	JP	SCOUTA	     ; RST 10H	; 3
    	
    TXTOU1:	CALL    SCOUTA          	; 3
    	JR      TXLOOP          	; 2
    
    ;TXTOUT:
    	EX	(SP),HL      ; RST 18H  ; 1
    TXLOOP: LD      A,(HL)          	; 1
    	INC     HL              	; 1
    	OR      A               	; 1
    	JR      NZ,TXTOU1               ; 2
    	EX	(SP),HL               	; 1
    	RET               		; 1
    
    ;STATUS:
    	PUSH    HL        ; RST 20H	; 1
    	PUSH    DE                      ; 1
    	PUSH    BC                      ; 1
    	CALL	CONST			; 3
    	JR      POP_RG			; 2
    
    ;RDKBRD:
    	JP	YF81B     ; RST 28H	; 3
    	DS	1                       ; 1
    	
    POP_RG: POP	BC			; 1
    	POP	DE			; 1
    	POP	HL			; 1
    	RET				; 1
    	
    ;CONIN:
    	PUSH	HL        ; RST 30H	; 1
    	PUSH	DE			; 1
    	PUSH	BC			; 1
    	CALL	CONIN			; 3
    	JR      POP_RG  		; 2
    
    	JP	CCP        ; RST 38H
    
    @INPUT:	OR	A
    	CALL    NZ,CONIN
    	JR	POP_RG
    	              		
    RSTLEN	EQU	$-BEGRST
    @ENRST	EQU	8+RSTLEN
    [свернуть]

    Этот файл кидается командой LDIR на адрес 8 в DOS, а также вообще в любых программах. После чего доступны вызовы по RST. Я RST не придумывал (не конкретно код, а назначание конкретных RST), а заимствовал, отчего получил совместимость. Есть вариант блока RST и для КР580 (но он более громоздкий, менее удобен для иллюстрации). Здесь посмотрите на RST 18H.

    Думаю, что такой приём передачи параметров удобен для передачи параметров в ЯВУ для процессоров у которых хреново со стеком (в частности, 6502 и 6800, про другие подобные CPU просто не знаю). Отчего, наверное, трудно делать компиляторы ЯВУ в которых данные передаются через стек.
    Последний раз редактировалось barsik; 27.07.2017 в 19:15.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. чья это AY композиция?
    от lokky в разделе Музыка
    Ответов: 2
    Последнее: 17.05.2009, 18:49
  2. В чем фишка ?
    от F0lken в разделе Несортированное железо
    Ответов: 9
    Последнее: 17.05.2007, 22:54
  3. [FWD] Фишка
    от Alexey Ivanov (500:95/100) в разделе Зарубежные компьютеры
    Ответов: 2
    Последнее: 04.05.2006, 19:12

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •