Универсальный язык программирования

Тема в разделе "WASM.LANGS", создана пользователем Dmitriy1973, 9 окт 2026 в 13:02.

  1. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    902
    Dmitriy1973,

    Извините, но я это не понимаю. Блок кода в столбце это не компиляция, а самый последний ее шаг. Внешний вид это интерфейс, а не язык. jit-генерация похоже или нет.. такты это вовсе профайлер. Что то все запутанно слишком.

    ml64,

    п1-4 тут же асм академический!
     
    Последнее редактирование: 11 окт 2026 в 17:19
  2. Dmitriy1973

    Dmitriy1973 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2026
    Сообщения:
    5
    Согласен. Идея оригинальная (на сколько мне известно подобного нет) тяжело понять сразу. Поэтому я стараюсь объяснять потихоньку. В редакторе третьего столбца лежит только часть компилятора которая компилирует только одну команду. Поймите сначала механику третьего столбца, он проше.
    вот примерно это вам надо бы было вставить в редактор третьего столбца что бы сделать для себя команду x = 5 + 3

    .model small
    .stack 100h
    .data
    ; ---------- исходник на нашем языке ----------
    srcLine db 'x = 5 + 3', 0
    srcPtr dw 0 ; текущая позиция чтения
    ; ---------- буфер, куда генерируется код ----------
    codeBuf db 256 dup(?)
    codeLen dw 0
    numVal dw 0 ; распознанное число
    ; ---------- таблица символов ----------
    ; у нас одна переменная: x -> регистр BX
    varName db 'x'
    varReg db 1 ; 1 = BX
    exeName db 'MYPROG.EXE', 0
    handle dw 0
    errMsg db 'Oshibka kompilyacii!$'
    okMsg db 'MYPROG.EXE gotov!$'
    ; ---------- заголовок MZ ----------
    exeHdr db 4Dh,5Ah ; 'MZ'
    db ?,? ; байты последней страницы (заполним)
    db ?,? ; число страниц (заполним)
    db 0,0 ; релокации
    db 2,0 ; размер заголовка: 32 байта
    db 0,0 ; мин. доп. память
    db 0FFh,0FFh ; макс. доп. память
    db 0,0 ; SS
    db 0,1 ; SP
    db 0,0 ; контрольная сумма
    db 0,0 ; IP
    db 0,0 ; CS
    db 1Eh,0 ; таблица релокаций
    db 0,0 ; оверлей
    db 0,0,0,0,0,0 ; резерв
    .code
    start:
    mov ax, @data
    mov ds, ax
    ; ================= ПАРСИНГ выражения x = 5 + 3 =================
    ; --- токен 1: идентификатор (левая часть присваивания) ---
    call skipSpaces
    call getChar
    cmp al, varName ; поиск имени в таблице символов
    jne error
    inc srcPtr ; переменная найдена -> целевой регистр BX
    ; --- токен 2: знак '=' ---
    call skipSpaces
    call getChar
    cmp al, '='
    jne error
    inc srcPtr
    ; --- токен 3: первое число -> mov bx, N ---
    call skipSpaces
    call getNum
    mov ax, numVal
    call emitMovBX
    ; --- токен 4: знак '+' ---
    call skipSpaces
    call getChar
    cmp al, '+'
    jne error
    inc srcPtr
    ; --- токен 5: второе число -> add bx, N ---
    call skipSpaces
    call getNum
    mov ax, numVal
    call emitAddBX
    ; ================= ЭПИЛОГ: выход в DOS =================
    mov al, 0B4h ; mov ah,4Ch
    call emitByte
    mov al, 4Ch
    call emitByte
    mov al, 0B0h ; mov al,0
    call emitByte
    xor al, al
    call emitByte
    mov al, 0CDh ; int 21h
    call emitByte
    mov al, 21h
    call emitByte
    ; ================= ЗАПОЛНЕНИЕ ЗАГОЛОВКА MZ =================
    mov ax, 32
    add ax, codeLen ; весь файл = заголовок + код
    mov cx, ax
    and ax, 511 ; байты последней страницы = размер mod 512
    mov exeHdr+2, al
    mov exeHdr+3, ah
    mov ax, cx
    add ax, 511
    xor dx, dx
    mov bx, 512
    div bx ; страницы = (размер + 511) div 512
    mov exeHdr+4, al
    mov exeHdr+5, ah
    ; ================= ЗАПИСЬ EXE НА ДИСК =================
    mov ah, 3Ch ; создать файл
    xor cx, cx
    lea dx, exeName
    int 21h
    jc error
    mov handle, ax
    mov ah, 40h ; записать заголовок
    mov bx, handle
    mov cx, 32
    lea dx, exeHdr
    int 21h
    jc error
    mov ah, 40h ; записать сгенерированный код
    mov bx, handle
    mov cx, codeLen
    lea dx, codeBuf
    int 21h
    jc error
    mov ah, 3Eh ; закрыть файл
    mov bx, handle
    int 21h
    lea dx, okMsg
    mov ah, 09h
    int 21h
    jmp quit
    error:
    lea dx, errMsg
    mov ah, 09h
    int 21h
    quit:
    mov ax, 4C00h
    int 21h
    ; ================= ПОДПРОГРАММЫ =================
    ; --- прочитать текущий символ исходника в AL ---
    getChar proc
    mov si, srcPtr
    mov al, srcLine[si]
    ret
    getChar endp
    ; --- пропустить пробелы ---
    skipSpaces proc
    ss_loop:
    mov si, srcPtr
    cmp byte ptr srcLine[si], ' '
    jne ss_done
    inc srcPtr
    jmp ss_loop
    ss_done:
    ret
    skipSpaces endp
    ; --- распознать число, результат -> numVal ---
    getNum proc
    xor di, di
    gn_loop:
    call getChar
    cmp al, '0'
    jb gn_done
    cmp al, '9'
    ja gn_done
    mov bl, al
    sub bl, '0' ; символ -> цифра
    mov bh, 0
    mov ax, di
    mov dx, 10
    mul dx ; DI*10
    add ax, bx
    mov di, ax
    inc srcPtr
    jmp gn_loop
    gn_done:
    mov numVal, di
    ret
    getNum endp
    ; --- записать байт из AL в конец буфера кода ---
    emitByte proc
    это учебный фрагмент компилятора на ассемблере для этой команды.
     
  3. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    902
    Dmitriy1973

    Нужно учиться выражать свои мысли понятно, абстрактно. Применим робота для исследования ваших мыслей, иначе можно заблудиться.

    Код выше, тут есть тэг и кнопка для читаемого вида!

    - это компиляция одной команды(isa в частности) для одной архитектуры. Тоесть это перекодируемая строка, не выражение.

    Что такое третий уровень отображения(столбец) - сейчас компилятор(зачем видеть код компилера?), ранее имена(макросы). Кто компилирует компилятор :wacko:

     
  4. ml64

    ml64 Active Member

    Публикаций:
    0
    Регистрация:
    29 окт 2017
    Сообщения:
    127
    УЯПа до сих пор нет (хотя идея вряд ли оригинальная).
    Остальное - есть.
    HEX_001[1].png
     
    Последнее редактирование: 11 окт 2026 в 20:12
    Ahimov нравится это.
  5. Dmitriy1973

    Dmitriy1973 New Member

    Публикаций:
    0
    Регистрация:
    11 мар 2026
    Сообщения:
    5
    Ahimov, извините что не получается свои мысли, я стараюсь.
    редактор третьего столбца — это мини-программа для сборщика. Выглядит он как таблица. В первой колонке Команда (Trigger): program (чтоб как то ее найти). Во второй колонке Шаблон кода (Template):B4 3C B9 00 00 BA 0F 00 CD 21 72 03 A3 00 02 (это как пример потому что эта таблица доступна для редактирования тому кто будет писать на этом языке). После того как в редакторе будут закончены вск действия Вы в третьей столбце пишите program filename и после нажатие ENTER программа ищет первый пробел в команде и начинает искать команду в редакторе третьего столбца. Найдя ее он записывает в переменную по адресу 000F. Это адрес операнда команды. в конкретном примере это адрес слова filename. BA 0F 00 я знаю это не совсем правильно надо было с адреса [000F] брать. и потом передаст управление где лежит первый код B4 3C через CALL поэтому в конце должен обязательно стоять ret.
     
  6. Ahimov

    Ahimov Active Member

    Публикаций:
    0
    Регистрация:
    14 окт 2024
    Сообщения:
    902
    Dmitriy1973,

    Уровни абстракций перемешаны, все перепутано, это нельзя понять. Так как исходные посылки автор не понимает, мешая все в кучу.

    Обычно я так никогда не делаю, а разбираюсь сам. В данном случае ручной разбор слишком сложен.
     

    Вложения:

  7. TrashGen

    TrashGen ТрещГен

    Публикаций:
    0
    Регистрация:
    15 мар 2011
    Сообщения:
    1.210
    Адрес:
    подполье
    Добавлять четвертый столбец с изменяющимся видом для эльфов можно. Возможности как в hiew.
    Джва года ждал.
    --- Сообщение объединено, 12 окт 2026 в 08:23 ---
    Законпелял, короч, 'привет,мир' в одну строку, перешел на ассемблер, все регистры в шахматном порядке попереставлял, возвращаешься в высокоуровневый код, а там домики деревянные набигают. Можно декомпелировать сплоеты.
     
  8. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.447
    Не туда воюешь, нужна гуишка для инде-визора, чтобы аверам тысячи семплов гонять, а не это всё...
     
  9. f13nd

    f13nd Well-Known Member

    Публикаций:
    0
    Регистрация:
    22 июн 2009
    Сообщения:
    2.229
    1. Имхо прогресс движется в сторону большей отчужденности разработчика от всей этой низкоуровневой мишуры. Каковая интересна (была) только реверсёрам (года до 2022 примерно).
    2. Подводные камни выглядят вот так:
    изображение_2026-10-12_213751691.png
    (определив правильно прототип декомпилер решил, что ну ее нахрен эту директиву return, а абсолютный адрес стал отрицательным смещением потому что почему бы нет)
    3. Не уловил в чем связь между проектированием железа и программированием.
    4. Лет 20 назад наверное было бы интересным инструментом для заимствования чужого кода без разрешения автора. Сегодня васян с дипломом поварского пту загрузит бинарь в чатгпт и попросит реализовать что-то наподобие.
     
    Rel и Ahimov нравится это.