Добро пожаловать на Pro Pawn - Портал о PAWN-скриптинге.
Показано с 1 по 6 из 6
  1. #1
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±

    Новый оператор _asm - замена старого #emit

    В компиляторе Pawn существуют баги, связанные с emit. Например, переходы по меткам или проблема с блоками. Поэтому я предлагаю создать новый оператор, поскольку, например, баг с блоками пофиксить никак нельзя.

    Я уже написал некоторый функционал данного оператора:
    PHP код:
        new 2;

        if (
    == 2) {
            
    _asm nop
            _asm call name  
    // название функции
            
    _asm jzer abc:   // метка
        
    }
        
    _asm nop

        printf
    ("abc");


    abc:
        
    printf("abc1"); 
     asm_list

    Код:
    	proc	; name
    	; line 6d
    	break	; c
    	; line 6e
    	break	; 10
    	;$lcl a fffffffc
    	stack fffffffc
    	const.pri 2
    	stor.s.pri fffffffc
    	;$exp
    	; line 70
    	break	; 2c
    	load.s.pri fffffffc
    	const.alt 2
    	eq
    	jzer 0
    	;$exp
    	; line 71
    	break	; 4c
    	nop 
    	; line 72
    	break	; 54
    	call .name
    	; line 73
    	break	; 60
    	jzer 1
    l.0		; 6c
    	; line 75
    	break	; 6c
    	nop 
    	nop 
    	; line 7a
    	break	; 78
    l.1		; 7c
    	lctrl 5
    	add.c fffffffc
    	sctrl 4
    	nop 
    	stack 4
    	zero.pri
    	retn

    Генерация кода происходит отлично. Все инструкцию на своих местах.
    Возможно, стоит добавить создание блоков, дабы не писать несколько раз _asm (как, например, в С-ях).

  2. 2 пользователя(ей) сказали cпасибо:
    admln (26.06.2017) Web (25.08.2017)
  3. #2
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Если перечисленные баги в #emit исправить нельзя, то смысл есть. Иначе же всё преимущество сведётся к тому, что нужно печатать на 1 символ меньше (4 в "_asm" вместо 5 в "#emit"). Блоки _asm {} - тоже стоящая вещь, хотя наверняка будет непросто реализовать их. Скорее всего, будут сложности с обработкой директив условной компиляции внутри блока.

    Синтаксис меток немного сомнительный. Никогда не видел, чтобы в каком-то ассемблерном синтаксисе имя метки указывалось с двоиточием в конце. Стоит ли вообще делать такое требование обязательным? Я к тому, что в случае с инструкцией call никаких двоеточий указывать не надо. Правильно понимаю, для каждой инструкции идентификаторы обрабатываются по-своему, не как в #emit, т.е., например, идентификатор после jmp интерпретируется именно как название метки, а не числовой константы?
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  4. #3
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    Правильно понимаю, для каждой инструкции идентификаторы обрабатываются по-своему, не как в #emit?
    Используется обычный switch-case, в котором указан tLABEL. Этот вариант я хотел рассмотреть, но я просто не хотел терять своё время на создание таблиц (было лень). Однако для избавления от двоеточия придётся её создать.

  5. #4
    Аватар для Daniel_Cortez
    "Это не хак, это фича"

    Статус
    Оффлайн
    Регистрация
    06.04.2013
    Адрес
    Novokuznetsk, Russia
    Сообщений
    2,192
    Репутация:
    2589 ±
    Цитата Сообщение от VVWVV Посмотреть сообщение
    Используется обычный switch-case, в котором указан tLABEL. Этот вариант я хотел рассмотреть, но я просто не хотел терять своё время на создание таблиц (было лень). Однако для избавления от двоеточия придётся её создать.
    У меня в реализации альтернативной ВМ (как-то уже упоминал о ней в чате) есть таблица типов аргументов опкодов - она используется для верификации байткода при загрузке. Если нужно, могу одолжить.
    Индивидуально в ЛС по скриптингу не помогаю. Задавайте все свои вопросы здесь (click).

  6. #5
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Цитата Сообщение от Daniel_Cortez Посмотреть сообщение
    У меня в реализации альтернативной ВМ (как-то уже упоминал о ней в чате) есть таблица типов аргументов опкодов - она используется для верификации байткода при загрузке. Если нужно, могу одолжить.
    Буду очень благодарен)

  7. #6
    Аватар для VVWVV
    ?

    Статус
    Оффлайн
    Регистрация
    09.07.2015
    Сообщений
    731
    Репутация:
    353 ±
    Реализация нового оператора отправлена на рассмотрение в виде Pull Request на github. Более того, в нём присутствует документация.

    Ссылка

    Если вы хотите поддержать данную идею, то можете поставить "палец вверх":

    Заранее спасибо)
    Последний раз редактировалось VVWVV; 24.08.2017 в 04:35.

  8. 2 пользователя(ей) сказали cпасибо:
    Edwin (13.01.2018) SooBad (10.09.2017)
 

 

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

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

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

Ваши права

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