Русские вычислители

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.



Русский ассемблер

Сообщений 1 страница 100 из 124

1

Есть мысль разработать русский ассемблер. Это идея уже выдвигалась Сыем Русский язык программирования - с чего начать? . Я её сходу отверг, однако теперь исправляюсь. Может, Сый тоже найдёт в себе силы что-то исправить :)

Предлагаю здесь обсудить замены служебных слов ассемблера, которые являются сокращением английских слов. Ниже - предлагаемые замены, в конце - полный справочник с описанием. Часть команд разумно заменить не сокращениями, а специальными символами, например "ADD" - это "+". Это повлечёт за собой изменение способа записи: не "ADD AX,3", а "AX+=3" или "AX+3". Так же необходимо подобрать замены именам регистров и служебным словам типа "DWORD PTR" или "OFFSET".

Предлагайте замены; по мере их появления буду вносить изменения в таблицу замен.

Таблица замен:
-------------------

Код:
AAA    
AAD    
AAM    
AAS    
ADC    
ADD        А + Б или А+= Б              (инфиксная)
AND        С & Д или C &= Д или С и Д   (инфиксная)
ARPL    
BOUND    
BSF    
BSR    
BSWAP       
BT              ПР                                       (обычный способ записи)
BTC            ПРДОП                                (обычный способ записи)
BTR            ПР0                                     (обычный способ записи)
BTS            ПР1                                     (обычный способ записи)
CALL       метка_подпрограммы()            (постфиксная)
CBW    
CDQ    
CLC    
CLD
Код:
   
CLI    
CLTS    
CMC    
CMP             А ? Б                                  (инфиксная)
CMPS           ??  (инфиксная) или СР_СТРОК  (обычный способ записи)
CMPXCHG    А ?<-> Б                             (инфиксная)
CWD    
CWDE    
DAA    
DAS    
DEC             -- А                                   (префиксная)
DIV              А / Б или А /= Б                 (инфиксная)
ENTER    
ESC    
F...    
HLT    
IDIV             А // Б или А //= Б	             (инфиксная)
IMUL             А ** Б или А **= Б             (инфиксная)
IN                 ВВ, ВВОД                           (обычный способ записи)
INC              ++ А	                              (префиксная)
Код:
INS    
INT               ПРЕР                                   (обычный способ записи)
INTO    
INVD    
INVLPG    
IRET    
JA                >  метка_перехода               (префиксная)
JAE              >=	метка_перехода              (префиксная)
JB                <	метка_перехода               (префиксная)
JBE              <=	метка_перехода               (префиксная)
JC    
JCXZ    
JE                ==	метка_перехода               (префиксная)
JECXZ    
JG                >	метка_перехода               (префиксная)
JGE              >= метка_перехода               (префиксная)
JL      	   <	метка_перехода               (префиксная)
JNA              !>	метка_перехода               (префиксная)
JNAE            !>= метка_перехода              (префиксная)
JNB              !<	метка_перехода               (префиксная)
Код:
JNBE            !<= метка_перехода              (префиксная)
JNC    
JNE     	   !=	метка_перехода               (префиксная)
JNG     	   !>	метка_перехода               (префиксная)
JNGE            !>= метка_перехода              (префиксная)
JNL     	   !<	метка_перехода               (префиксная)
JNLE             !<= метка_перехода             (префиксная)
JNO    
JNP     	
JNS     	
JNZ     	
JO      	
JP      	
JS      	
JZ      	
JMP              -->	метка_перехода         (префиксная)
LAHF    
LAR    
LDS    
LEA              А @ Б                                      (инфиксная)
Код:
LEAVE    
LES    
LFS    
LGDT    
LGS    
LIDT    
LLDT    
LMSW    
LOCK    
LODS    
LOOP    
LOOPE/LOOPZ	
LOOPNE/LOOPNZ 	
LSL    
LSS    
LTR    
MOV         А = Б или А := Б 	                   (инфиксная)
MOVS    
MOVSX    
MOVZX
Код:
MUL          А * Б или А *=	Б                         (инфиксная)
NEG          - А	                                           (префиксная)
NOP    
NOT          ! А                                               (префиксная)
OR            А | Б или А |= Б или А ИЛИ Б        (инфиксная)
OUT    
OUTS    
POP          А { или А,Б {{ или А, Б, С {{{      (постфиксная с переменным числом аргументов)
POPA    
POPF    
PUSH        А } или А,Б }} или А, Б, С }}}	   (постфиксная с переменным числом аргументов)
PUSHA   
PUSHF    
RCL    
RCR    
REP    
REPE/REPZ	
REPNE/REPNZ 	
RET         <-- или <-- 8	                           (без операнда или префиксная)
ROL         А <<< 3                                        (инфиксная)
ROR         А >>> 5                                        (инфиксная)
Код:
SAHF    
SAL    
SALC    
SAR    
SBB    
SCAS    
SET(cond) 	
SGDT    
SHL          А <<	2                                           (инфиксная)
SHLD    
SHR          А >>	 1                                          (инфиксная)
SHRD    
SIDT    
SLDT    
SMSW    
STC    
STD    
STI    
STOS    
STR
Код:
SUB          А - Б или А -= Б                             (инфиксная)
TEST    
VERR    
VERW    
WAIT    
WBINVD    
XADD    
XCHG      А <=> Б                                          (инфиксная)
XLAT    
XOR        А ^ Б или А ^= Б                             (инфиксная)

Полный справочник, взят отсюда: http://looch-disasm.narod.ru/refe19.htm

Код:
AAA    ASCII-коррекция после сложения (ASCII Adjust after Addition)
AAD    ASCII-коррекция регистра AX перед делением (ASCII Adjust AX before Division)
AAM    ASCII-коррекция регистра AX после умножения (ASCII Adjust AX after Multiply)
AAS    ASCII-коррекция после вычитания (ASCII Adjust after Subtraction)
ADC    Сложение с переносом (Add with Carry)
ADD    Сложение (Add)
AND    Логическое "И" (Logical "AND")
ARPL    Коррекция поля RPL селектора (Adjust Requested Privilege Level)
BOUND    Контроль нахождения индекса массива в границах (Check array index against Bound)
BSF    Сканирование бита вперед (Bit Scan Forward)
BSR    Сканирование бита назад (Bit Scan Reverse)
BSWAP    Перестановка байтов (внутри 32-битного регистра) (Byte Swap)
BT    Проверка бита (Bit Test)
BTC    Проверка бита и дополнение Bit Test and Complement)
BTR    Проверка бита и сброс в нуль (Bit Test and Reset)
BTS    Проверка бита и установка в единицу (Bit Test and Set)
CALL    Вызов процедуры (Call Procedure)
CBW    Преобразование байта в слово (Convert Byte to Word)
CDQ    Преобразование двойного слова в счетверенное слово (Convert Doubleword to Quadword)
CLC    Сброс флажка переноса (Clear Carry flag)
CLD    Сброс флажка направления (Clear Direction flag)
CLI    Сброс флажка прерывания (Clear Interrupt flag)
CLTS    Сброс флажка переключения задачи (в регистре CR0) (Clear Task Switched flag (in CR0))
CMC    Инвертирование флажка переноса (Complement Carry flag)
CMP    Сравнение двух операндов (Compare two operands)
CMPS    Сравнение цепочечных операндов (Compare String operands)
CMPXCHG    Сравнение и обмен (Compare and Exchange)
CWD    Преобразование слова в двойное слово (Convert Word to Doubleword)
CWDE    Преобразование слова в двойное слово Convert Word to Doubleword Extended)
DAA    Десятичная коррекция AL после сложения (Decimal Adjust AL after Addition)
DAS    Десятичная коррекция AL после вычитания (Decimal Adjust AL after Subtraction)
DEC    Декремент на 1 (Decrement by 1)
DIV    Беззнаковое деление (Unsigned Divide)
ENTER    Образование стекового кадра для параметров процедуры (Make stack frame for procedure parameters)
ESC    Универсальная единая команда для сопроцессора с плавающей точкой (Escape (for floating-point unit))
F...    Команды сопроцессора с плавающей точкой (Floating-point coprocessor instructions)
HLT    Останов (Halt)
IDIV    Знаковое деление (Signed Divide)
IMUL    Знаковое умножение (Signed Multyply)
IN    Ввод из порта (Input from Port)
INC    Инкремент на 1
INS    Ввод из порта в цепочку (Input from Port to String)
INT    Вызов процедуры прерывания (Call to Interrupt Procedure)
INTO    Вызов процедуры прерывания 4, если OF=1 (Interrupt on Overflow)
INVD    Недостоверность кэш-памяти (Invalidate Cache)
INVLPG    Недостоверность элемента буфера TLB (Invalidate TLB entry)
IRET    Возврат из прерывания (Interrupt Return)
JA    Jump если больше:             	CF=0 и ZF=0
JAE    Jump если больше/равно:       	CF=0
JB    Jump если меньше:             	CF=1
JBE    Jump if меньше/равно:       	CF=1 или ZF=1
JC    Jump если Carry:             	CF=1
JCXZ    Jump если CX=0               	CX=0
JE    Jump если равно:             	ZF=1
JECXZ    Jump если ECX=0              	ECX=0
JG    Jump если больше:           	ZF=0 и SF=OF
JGE    Jump если больше/равно:     	SF=OF
JL      	Jump если меньше:              	SF <> OF
JLE    Jump если меньше/равно:        ZF=1 и SF <> OF
JNA    Jump если не больше:         	CF=1 и ZF=1
JNAE    Jump если не больше/равно:   CF=1
JNB    Jump если не меньше:         	CF=0
JNBE    Jump если не меньше/равно:   CF=0 и ZF=0
JNC    Jump если не Carry:         	CF=0
JNE     	Jump если не равно:         	ZF=0
JNG     	Jump если не больше:       	ZF=1 или SF <> OF
JNGE    Jump если не больше/равно: 	SF <> OF
JNL     	Jump если не меньше:          	SF=OF
JNLE    Jump если не меньше/равно:   ZF=0 и SF=OF
JNO    Jump если не переполнение:  OF=0
JNP     	Jump если нечетный:        	PF=0
JNS     	Jump если не знак:          	SF=0
JNZ     	Jump если не ноль:          	ZF=0
JO      	Jump если переполнение:        OF=1
JP      	Jump если четный:            	PF=1
JS      	Jump если знак:              	SF=1
JZ      	Jump если ноль:              	ZF=1
JMP    Безусловная передача управления (Jump Unconditionally)
LAHF    Пересылка из регистра флажков в регистр AH (Load Flags into AH Register)
LAR    Загрузка байта прав доступа (Load Access Rights byte)
LDS    Загрузка полного указателя (для DS) (Load Far Pointer (DS))
LEA    Загрузка эффективного адреса (Load Effective Address)
LEAVE    Отмена действия команды ENTER перед выходом из процедуры (High Level Procedure Exit)
LES    Загрузка полного указателя (для ES) (Load Far Pointer (ES))
LFS    Загрузка полного указателя (для FS) (Load Far Pointer (FS))
LGDT    Загрузка регистра глобальной дескрипторной таблицы (Load Global Descriptor Table Register)
LGS    Загрузка полного указателя (для GS) (Load Far Pointer (GS))
LIDT    Загрузка регистра дескрипторной таблицы прерываний (Load Interrupt Descriptor Table Register)
LLDT    Загрузка регистра локальной дескрипторной таблицы (Load Local Descriptor Table Register)
LMSW    Загрузка слова состояния машины (Load Machine Status Word)
LOCK    Префикс выдачи сигнала LOCK# (Lock the Bus (prefix))
LODS    Загрузка цепочечного операнда в аккумулятор (Load String Operand)
LOOP    Управление циклом со счетчиком в регистре CX (Loop Control with CX Counter)
LOOPE/LOOPZ	Управление циклом со счетчиком в регистре CX (Loop Control with CX Counter)
LOOPNE/LOOPNZ 	Управление циклом со счетчиком в регистре CX (Loop Control with CX Counter)
LSL    Загрузка предела сегмента (Load Segment Limit)
LSS    Загрузка полного указателя (для SS) (Load Far Pointer (SS))
LTR    Загрузка регистра задачи (Load Task Register)
MOV    Пересылка данных (Move Data)
MOVS    Пересылка данных из цепочки в цепочку (Move String Data)
MOVSX    Пересылка со знаковым расширением (Move with Sign-Extend)
MOVZX    Пересылка с нулевым расширением (Move with Zero-Extend)
MUL    Беззнаковое умножение (Unsigned Multiply)
NEG    Получение дополнительного кода (изменение знака) (Two's Complement Negation)
NOP    Пустая операция (No Operation)
NOT    Инвертирование (One's Complement Negation)
OR    Логическое включающее "ИЛИ" (Logical Inclusive "OR")
OUT    Вывод в порт (Output to Port)
OUTS    Вывод цепочки в порт (Output String to Port)
POP    Извлечение слова из стека (Pop Word from Stack)
POPA    Извлечение из стека всех общих регистров (Pop All)
POPF    Извлечение из стека в регистр флажков (Pop Flags)
PUSH    Засылка операнда в стек (Push Operand onto Stack)
PUSHA    Засылка в стек всех общих регистров (Push All)
PUSHF    Засылка в стек регистра флажков (Push Flags)
RCL    Циклический сдвиг влево с участием флажка CF (Rotate Left)
RCR    Циклический сдвиг вправо с участием флажка CF (Rotate Right)
REP    Префикс повторения цепочечной операции (Repeat String (prefix))
REPE/REPZ	Префикс повторения цепочечной операции (Repeat String (prefix))
REPNE/REPNZ 	Префикс повторения цепочечной операции (Repeat String (prefix))
RET    Возврат из процедуры (Return from Procedure)
ROL    Циклический сдвиг влево (Rotate Left)
ROR    Циклический сдвиг вправо (Rotate Right)
SAHF    Пересылка регистра AH в регистр флажков (Store AH into Flags)
SAL    Сдвиг влево (умножение на 2) (Shift Left)
SALC    Установка регистра AL по флажку CF (Set AL by CF flag)
SAR    Сдвиг вправо (знаковое деление на 2) (Shift Right)
SBB    Вычитание с заемом (Subtract with Borrow)
SCAS    Сравнение (сканирование) цепочечных данных (Compare (Scan) String Data)
SET(cond) 	Установка байта по условию (Set Conditionally)
SGDT    Сохранение регистра глобальной дескрипторной таблицы (Store Global Descriptor Table)
SHL    Сдвиг влево (умножение на 2) (Shift Left)
SHLD    Двойной сдвиг влево (Double Precision Shift Left)
SHR    Сдвиг вправо (беззнаковое деление на 2) (Shift Right)
SHRD    Двойной сдвиг вправо (Double Precision Shift Right)
SIDT    Сохранение регистра дескрипторной таблицы прерываний (Store Interrupt Descriptor Table)
SLDT    Сохранение регистра локальной дескрипторной таблицы (Store Local Descriptor Table)
SMSW    Сохранение слова состояния машины (Store Machine Status Word)
STC    Установка флажка переноса (Set Carry Flag)
STD    Установка флажка направления (Set Direction Flag)
STI    Установка флажка прерывания (Set Interrupt Flag)
STOS    Сохранение цепочечных данных (Store String Data)
STR    Сохранение регистра задачи (Store Task Register)
SUB    Вычитание (Subtract)
TEST    Логическое сравнение (Logical Compare)
VERR    Проверка сегмента на считывание (Verify Segment for Reading)
VERW    Проверка сегмента на запись (Verify Segment for Writing)
WAIT    Ожидание (Wait)
WBINVD    Обратная запись и недостоверность кэш-памяти (Write-Back and invalidate cache)
XADD    Обмен и сложение (Exchange and Add)
XCHG    Обмен данными - регистр/регистр или регистр/память (Exchange Data - Register/Register or Register/Memory)
XLAT    Перекодирование байта по таблице (Translate by Table)
XOR    Логическое исключающее "ИЛИ" (Logical Exclusive "OR")

0

2

Ой, если слишком много будет небуквенных обозначений, то это не очень хорошо будет. Их лучше только для самых распространённых оставить, а также для тех, которые больше всего соответствуют небуквенным знакам.

CALL — думаю, можно позволить писать что-нибудь из этого: ВЫЗОВ, ВЫЗ, ВЗ, В.

0

3

CMP — Сравнение двух операндов (Compare two operands) — СРАВНИТЬ, СРАВ, СРВ, СР.

0

4

HLT — Останов (Halt) — ОСТАНОВ, ОСТ.

0

5

ADC — Сложение с переносом (Add with Carry) — не знаю, что за указание, но, исходя из названия, предложу такое: +>, >+, СЛОЖПЕРЕН, СЛОЖПЕР, СЛОПЕР, СЛОЖПР, СЛПР, СП.

0

6

BT — Проверка разряда (Bit Test) — ПРОВРАЗР, ПРОВРАЗ, ПРОРАЗ, ПРОВР, ПРРАЗ, ПРРЗРД, ПРРЗ, ПРАЗ, ПР.
BTC — Проверка разряда и дополнение (Bit Test and Complement) — ПРОВРАЗРДОП, ПРОВРАЗДОП, ПРОРАДОП, ПРРАЗДОП, ПРРЗРДП, ПРД.
BTR — Проверка разряда и сброс в нуль (Bit Test and Reset) — ПРОВРАЗР0, ПРОВРАЗ0, ПРОРАЗ0, ПРРАЗ0, ПРРЗР0, ПР0.
BTS — Проверка разряда и установка в единицу (Bit Test and Set) — ПРОВРАЗР1, ПРОВРАЗ1, ПРОРАЗ1, ПРРАЗ1, ПРРЗР1, ПР1.

0

7

CBW — Преобразование байта в слово (Convert Byte to Word) — ВС, ВСЛ, вСЛ, ВСЛОВО, вСЛОВО.
CDQ — Преобразование двойного слова в счетверённое слово (Convert Doubleword to Quadword) — 2В4, 2в4, ДВвЧТВ, ДВвЧТ, ДВЧТВ, ДВЧТ, ДЧТВ, ДЧТ, ДВЧ, ДЧ, ДвЧ.

0

8

CMPS — Сравнение цепочечных операндов (Compare String operands) — ??, ???, -?, -?-, ;?.

0

9

CWD — Преобразование слова в двойное слово (Convert Word to Doubleword) — вДВСЛОВО, ВДВСЛОВО, вДСЛОВО, ВДСЛОВО, вДВСЛ, ВДВСЛ, вДСЛ, ВДСЛ, вДС, ВДС, ДВСЛОВО, ДСЛОВО, ДВСЛ, вДВ, ВДВ, ДСЛ, ДС.
CWDE — Преобразование слова в двойное слово Convert Word to Doubleword Extended) — Чем отличается?

0

10

CMPXCHG — Сравнение и обмен (Compare and Exchange) — СРОБМ, СРОБ, СОБМ, СОБ, СРОБМЕН, СОБМЕН.

0

11

IN — Ввод из порта (Input from Port) — ВВ, ВВОД, ВВЕСТИ.

0

12

INS — Ввод из порта в цепочку (Input from Port to String) — ВЦ, ВВЦ, ВВЦП.

0

13

Давайте редактировать самое первое сообщение этой ветки, чтобы ветка не стала бесконечной. У Вас же есть права администратора, правьте, сразу вписывайте на свои места. А лишние сообщения лучше убрать.

Ссылки для черпания идей и вдохновения:
http://paste.kolibrios.org/show/83/
http://paste.kolibrios.org/show/98/
http://paste.kolibrios.org/show/137/
Algebraic Assembly Language (алгебраический язык ассемблера)
HLA Reference Manual (руководство по ассемблеру высокого уровня)
Ассемблер от Евгения Зуева

Имена регистров
========
EAX - А а
AH - АН ан
AL - АЛ ал
AX - АХ ах

EBX - Б В б в
BH - БН ВН бн вн
BL - БЛ ВЛ бл вл
BX - БХ ВХ бх вх

ECX - С Ц с ц
CH - СН ЦН сн цн
CL - СЛ ЦЛ сл цл
CX - СХ ЦХ сх цх

EDX - Д д
DH - ДН дн
DL - ДЛ дл
DX - ДХ дх

CS - ЦС цс
DS - ДС дс
ES - ЕС ес
FS - ФС фс
GS - ГС гс
SS - СС сс

ESP ЕСП
SP СП
EBP ЕБП
BP БП
ESI ЕСИ
SI СИ
EDI ЕДИ
DI ДИ
(кстати, обратил внимание, что в словаре замен для слова "регистр" замены нет. Можно попробовать "хранитель" :)

0

14

Юрий написал(а):

Давайте редактировать самое первое сообщение этой ветки, чтобы ветка не стала бесконечной. У Вас же есть права администратора, правьте, сразу вписывайте на свои места. А лишние сообщения лучше убрать.

Так я ведь просто перечисляю возможные обозначения. Не притязаю пока на их удачность. Да и их там слишком много, чтобы сразу в таблицу вписывать.

Вы предложили вызывать подзадачу добавлением круглых скобок, как в языках высокого уровня. А разве по адресу вызов не может происходить?

0

15

Юрий написал(а):

Имена регистров

Юрий, мне такие имена регистров не нравятся, это просто транслитерация какая-то получилась. Хотелось бы, что бы имена несли какой-то смысл в русском языке.

Юрий, если вы предлагаете именовать регистры в азбучном порядке, то почему тогда у вас после буквы "Б" идёт буква "Ц" или тем более "С"?!
Если так, то основные регистры должны называться тогда А, Б, В. А уже потом их части именуются: А (RAX), А32 (EAX), А16 (AX), А8.1 и А8.2 (AH и AL).

Я посмотрел немножко, как у Евгения Зуева сделано: у него регистры буковкой R и порядковым номером обозначаются, если я то смотрел и всё правильно понял.

Насчёт замены я уже думал. Просто перевести не получается. Нужно что-то своё придумать.
"Хранитель" по смыслу подходит, конечно, но странно звучит, т.к. хранителями часто называют людей, которые что-то хранят :-)

Запоминатель? Запомник? Хранец? Хранач? Хранщик? Просто ячейка процессора (Я1, Я2 и т.д.)? А может быть, числоём? Ведь по сути в них числа хранятся, пусть и двоичные.

0

16

А разве по адресу вызов не может происходить?

Код:
CALL subpr
или
subpr()

subpr - это метка, вместо которой ассемблер подставит адрес. Другое дело, что  этот адрес, по идее, можно загрузить в регистр, но что потом делать с этим адресом – не понятно. В ассемблере ЕС ЭВМ можно было сделать так:

Код:
   LA      15, adr         загрузка адреса подпрограммы в регистр № 15
   BALR  14,15             переход на подпрограмму, адрес которой в регистре № 15, 
                           адрес возврата – в регистре № 14
   BAL    14,adr            две предыдущие команды можно заменить одной этой, 
                           при этом регистр 15 не "портится"

Не увидел, как сделать подобное в x86.

Если именовать регистры в алфавитном порядке, то будет путаница между русской В (3-я по счёту) и латинской В (2-я по счёту). Соответственно, будут путаться и регистры. Думаю, нет особого смысла в упорядочении наименования регистров, всё равно куча регистров «не вписывается» в стройную картину: CS, DS (а где AS и BS?), EBP (а где EAP?) и т.д. Пронумеровать  же R1, R2 … можно, но как потом запомнить, что чему соответствует? К тому же регистры не равноправны: в какие-то регистры можно загружать из памяти (MOV EAX, adr), а в какие-то нельзя (MOV ESP, adr).

Однобуквенные обозначения регистров нужно употреблять для тех имён регистров, которые используются чаще всего. Если чаще всего используются EAX, EBX, ECX, EDX, то именно их нужно сокращать в первую очередь.

При этом список всех замен можно сделать не «железобетонно забитым» в программу. А хранить во внешнем файле. Файл подгружается при запуске ассемблирования. Файл примерно такого формата (для операций):

Код:
!;NOT;0;1
!=;JNE;0;1
&;AND;1;1
&=;AND;1;1
();CALL;1;0
*;MUL;1;1
*=;MUL;1;1
**;IMUL;1;1
**=;IMUL;1;1
+;ADD;1;1
+=;ADD;1;1
++;INC;0;1
-;NEG;0;1
-;SUB;1;1
-=;SUB;1;1
--;DEC;0;1
/;DIV;1;1
/=;DIV;1;1
//;IDIV;1;1
//=;IDIV;1;1
:=;MOV;1;1
<;JL;0;1
<--;RET;0;0
<---;RET;0;1
<<;SHL;1;1
<<<;ROL;1;1
<=;JLE;0;1
<=>;XCHG;1;1
=;MOV;1;1
==;JE;0;1
>;JG;0;1
>=;JGE;0;1
>>;SHR;1;1
>>>;ROR;1;1
?;CMP;1;1
^;XOR;1;1
^=;XOR;1;1
{;POP;1;0
{{;POP;2;0
{{{;POP;3;0
{{{{;POP;4;0
{{{{{;POP;5;0
|;OR;1;1
|=;OR;1;1
};PUSH;1;0
}};PUSH;2;0
}}};PUSH;3;0
}}}};PUSH;4;0
}}}}};PUSH;5;0

Это формат csv, первое поле – наше обозначение, второе – традиционная запись, третье – количество левых операндов, четвёртое – количество правых операндов. Если кому-то что-то не нравится , то меняй на свой вкус. Ляпота!

0

17

Юрий написал(а):

subpr - это метка, вместо которой ассемблер подставит адрес.

Я имел ввиду, можно ли указывать не метку и не регистр, в котором адрес находится, а сам адрес напрямую. Например:

вызвать 0шA8000

Юрий написал(а):
Код:
CALL subpr

Почему CALL? Мы же вроде о русском ассемблере думаем?

Юрий написал(а):

Если именовать регистры в алфавитном порядке, то будет путаница между русской В (3-я по счёту) и латинской В (2-я по счёту). Соответственно, будут путаться и регистры.

А причём тут латинские буквы? Глупость какая-то. Если так рассуждать, то в русском ассемблере вообще русские буквы нужно запретить, иначе они всегда будут путаться: и в метках, и в регистрах, и в служебных словах. Если рассуждать здраво, то путаться в названиях регистров буквы не будут, т.к. имена регистров заданные, и приложение для набора исходника будет выделять цветом правильные названия регистров, а не правильные — подчёркивать и выводить предупреждение, преобразователь же будет выдавать ошибку на неправильное название регистра. Тоже самое относится и к меткам и служебным словам.

Юрий написал(а):

Думаю, нет особого смысла в упорядочении наименования регистров, всё равно куча регистров «не вписывается» в стройную картину: CS, DS (а где AS и BS?), EBP (а где EAP?) и т.д.

Это у них не вписывается, а мы можем сделать так, чтобы наши названия вписывались. Переиначивая одну рекламку, можно сказать: наш ассемблер — наши правила. Или вы всерьёз хотите тупо транслитерировать их названия?

Юрий написал(а):

Пронумеровать  же R1, R2 … можно, но как потом запомнить, что чему соответствует?

Общего назначения: О1, О2 (или ОА, ОБ), ... ; счётчики: С1, С2 (или СА, СБ), ... ; и т.д.

А можно даже подлиннее названия придумать, не вижу в этом ничего страшного.

Юрий написал(а):

К тому же регистры не равноправны: в какие-то регистры можно загружать из памяти (MOV EAX, adr), а в какие-то нельзя (MOV ESP, adr).

Значит, нужно придумать такой порядок именования, который будет отражать назначение регистров.

Кстати, если я правильно понял, то в указании "MOV EAX, adr" порядок такой: УКАЗАНИЕ куда, откуда. Так вот, на мой взгляд, было бы разумнее сделать наоборот: УКАЗАНИЕ откуда, куда. Так понятнее. Я не про это именно указание говорю (здесь, как я понял, будет просто присвоение), а вообще.

0

18

Я имел ввиду, можно ли указывать не метку и не регистр, в котором адрес находится, а сам адрес напрямую.

Да, пожалуйста, в системе команд x86 это позволительно:

Код:
mov  EAX, FFFF00h или
call    FFFF00h

Почему CALL? Мы же вроде о русском ассемблере думаем?

Так русский ассемблер ещё не изобретён, для него ещё нет справочника. А что есть «call» и с чем его едят – это можно выяснить, используя ключевое слово «call» в существующих справочниках.

А причём тут латинские буквы? Глупость какая-то.

Гм… А когда программист запустит для отладки дизассемблер – он что там увидит? Годами использовавшиеся имена или сразу русские наименования регистров? Сразу порвать связи не получится. Кто напишет русский дизассемблер?

приложение для набора исходника будет выделять цветом правильные названия регистров, а не правильные — подчёркивать и выводить предупреждение

А где взять это приложение? Мы вот тут с Вами обсуждаем это, а кроме нас никому и не надо – никто не участвуют в этом. Даже в обсуждении, не говоря уже о конкретном программировании. Кто напишет такую раскраску? Вы возьмётесь?

Значит, нужно придумать такой порядок именования, который будет отражать назначение регистров.

Да, EBP можно было бы назвать просто БАЗА. Это точно отражает его назначение. Есть над чем думать. Даже если сейчас кажется всё идеальным, то через месяц может осенить и захочется сделать ещё лучше.

в указании "MOV EAX, adr" порядок такой: УКАЗАНИЕ куда, откуда. Так вот, на мой взгляд, было бы разумнее сделать наоборот: УКАЗАНИЕ откуда, куда. Так понятнее.

Я предложил ещё проще: куда = откуда. Вот и всё. Найти такие короткие обозначения удастся только для малой доли команд. Но, с другой стороны, они покроют 90% текста :)

0

19

Юрий написал(а):

Так русский ассемблер ещё не изобретён, для него ещё нет справочника.

Чтобы лучше понимать, каким он должен быть, примеры на нём лучше писать уже по-русски — как делают я.

Юрий написал(а):

Гм… А когда программист запустит для отладки дизассемблер – он что там увидит? Годами использовавшиеся имена или сразу русские наименования регистров? Сразу порвать связи не получится. Кто напишет русский дизассемблер?

А причём тут вообще дизассемблер? И что он увидит в нём вместо годами использовавшихся английских указаний? А кто напишет русский ассемблер? Глупости какие-то... Если так рассуждать, то лучше вообще ничего не делать, ибо недорусский ассемблер вообще никому нужен не будет.

Юрий написал(а):

А где взять это приложение?

Естественно же, его нужно будет написать.

Юрий написал(а):

Кто напишет такую раскраску? Вы возьмётесь?

А что там делать-то? Берёте редактор, в котором есть возможность определять свою подсветку исходников, — и делаете. Я для AkelPad, например, делал расцветовку для Глагола и начинал делать для своего языка. А для низкояза всё будет ещё проще.

Юрий написал(а):

Мы вот тут с Вами обсуждаем это, а кроме нас никому и не надо – никто не участвуют в этом. Даже в обсуждении, не говоря уже о конкретном программировании.

Тем более, зачем делать недорусский низкояз в надежде кого-то привлечь этой недорусскостью, если он всё равно нужен будет лишь единицам? И если вы всерьёз намерены делать умышленно недорусский низкояз, то людей, которым это нужно, точно станет на одного меньше — на меня, потому что мне недорусскость не нужна, я хочу качественный русский низкояз, удобный для русского человека, в том числе и для новичков в программировании. А на потребности и привычки людей, работавших с англоязыками, мне плевать. Пусть или привыкают к русскости, или остаются на англоЯП до конца своих дней. А делать полурусское уродство лично я никогда не буду.

Юрий написал(а):

Да, EBP можно было бы назвать просто БАЗА. Это точно отражает его назначение. Есть над чем думать.

Лучше воздержаться от использования заимствованных слов. Они лишь сбивают с толку и запутывают. База — это место, где что-то размещают: военная база, оптовая база. Так что лучше подыскивать однозначные названия.

Юрий написал(а):

Даже если сейчас кажется всё идеальным, то через месяц может осенить и захочется сделать ещё лучше.

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

0

20

Чтобы лучше понимать, каким он должен быть, примеры на нём лучше писать уже по-русски — как делают я.

У меня сложилось впечатление, что не все хорошо представляют суть команд х86. Чтобы понять суть каждой, нужно пользоваться справочниками. Справочников с русскими обозначениями нет, поэтому надо будет пользоваться существующими. Перейти от существующих обозначений к русским легко, а вот обратно, чтобы что-то найти в справочнике – пока нет.

недорусский ассемблер вообще никому нужен не будет.

На 90% программа будет состоять из команд типа «=», «+», «-» и т.д. Они русские или недорусские? Хотелось бы заранее знать.

А если взять шире – мы вообще живём недорусской жизнью: если из нашей речи удалить все слова иностранного происхождения, то в нашей жизни наступит (увы!) полный хаос. Мы не сможем свободно выражать свои мысли – очень важным словам просто нет замены. Мы не сможем работать – наши сотрудники нас перестанут понимать. И дома нас будут ждать проблемы: мы садимся за стол и начинаем русскую трапезу с супа (слово «суп» - имеет французское происхождение). Или с бульона (тоже французское слово). В качестве второго блюда у нас будет  гуляш (венгер.), шашлык (крымскотатарск.) или котлета (француз.) из фарша (латин.). Гарниром (француз.) будут макароны (итал.), спагетти (итал.) или пюре (француз.) из картофеля (немец.). Их приправим кетчупом (англ.) или лечо (венгер.). Салат (итал.) у нас будет из огурцов (греч.), помидоров (итал.) и перца (латин.). Запьём всё это компотом (француз.), чаем (китай.) или кофе (латин.). На десерт (француз.) будут цитрусовые (латин.) фрукты (латин.): апельсины (немец.), мандарины (испан.)  и бананы (от одного из сенегальских языков -  языка волоф).

Не получится очистить язык от всего и сразу. Как отказаться от огурца? Пока не представляю. Интересен опыт евреев по возрождению иврита: ведь иврит был мёртвым письменным языком. А они создали вокруг детей пустоту и учили с младенчества только ивриту. Так появились первые современные евреи, для которых иврит – родной язык.

База — это место, где что-то размещают: военная база, оптовая база. Так что лучше подыскивать однозначные названия.

Вообще-то в литературе по ассемблеру пишут «базовый регистр», «индексный регистр», а в обиходе они сократились до «база» и «индекс». Вы, вероятно, не пользовались ассемблером, поэтому для Вас база или военная, или оптовая.

Я для AkelPad, например, делал расцветовку для Глагола и начинал делать для своего языка. А для низкояза всё будет ещё проще.

Возьмётесь? Список служебных слов согласуем.

0

21

Юрий написал(а):

На 90% программа будет состоять из команд типа «=», «+», «-» и т.д. Они русские или недорусские? Хотелось бы заранее знать.

Они внеязыковые.

Юрий написал(а):

А если взять шире – мы вообще живём недорусской жизнью: если из нашей речи удалить все слова иностранного происхождения, то в нашей жизни наступит (увы!) полный хаос. Мы не сможем свободно выражать свои мысли – очень важным словам просто нет замены. Мы не сможем работать – наши сотрудники нас перестанут понимать. И дома нас будут ждать проблемы: мы садимся за стол и начинаем русскую трапезу с супа (слово «суп» - имеет французское происхождение). Или с бульона (тоже французское слово). В качестве второго блюда у нас будет  гуляш (венгер.), шашлык (крымскотатарск.) или котлета (француз.) из фарша (латин.). Гарниром (француз.) будут макароны (итал.), спагетти (итал.) или пюре (француз.) из картофеля (немец.). Их приправим кетчупом (англ.) или лечо (венгер.). Салат (итал.) у нас будет из огурцов (греч.), помидоров (итал.) и перца (латин.). Запьём всё это компотом (француз.), чаем (китай.) или кофе (латин.). На десерт (француз.) будут цитрусовые (латин.) фрукты (латин.): апельсины (немец.), мандарины (испан.)  и бананы (от одного из сенегальских языков -  языка волоф).

К чему вы это вообще написали? Вы считаете, что если у нас есть какие-то иностранные слова, то на русскость нужно вообще наплевать?

Юрий написал(а):

Не получится очистить язык от всего и сразу.

А вы собирались всё, да ещё и сразу? Зря, не выйдет. Не собирались? А кто собирался от всего и сразу очистить?

Юрий написал(а):

Как отказаться от огурца? Пока не представляю.

Строго говоря, это слово исконное. А вот его основа уже имеет неясное происхождение. Этимология вообще наука неточная: сколько этимологов, столько и этимологий у слова может быть.

Вот, что пишет Черных в своём словаре:

http://sc.uploads.ru/t/3BNvf.png

Кто знает, может быть, когда-нибудь этимологи установят славянское происхождение этого слова, найдя пока не обнаруженную соответствующую славянскую основу.

Что касается замен для слова "огурец", то можно, например, взять славянское "краставец" (серб., хорв.). Или можно придумать своё название, которое будет отражать его свойства, например, вкус или внешний вид.

У нас много названий растений русского, славянского и праиндоевропейского (наши предки до славян и всяких германо-славяно-балтов, если верить официальной науке) происхождения. Вот некоторые: рожь, яблоко, горох, солод, груша, слива, морковь, пшено, пшеница, ячмень, смородина, малина, калина, земляника, клубника, черника, кислица, душица, ежевика, брусника, облепиха, черёмуха, чеснок, щавель, крапива, лопух, укроп, и многие другие (названия деревьев, грибов и цветов (очень много)).

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

Юрий написал(а):

Интересен опыт евреев по возрождению иврита: ведь иврит был мёртвым письменным языком. А они создали вокруг детей пустоту и учили с младенчества только ивриту. Так появились первые современные евреи, для которых иврит – родной язык.

Тоже слышал об этом. Молодцы, если честно. И им плевать на упрёки в фашизме, нацизме. А вот если у нас в 2100 г. кто-нибудь будет пытаться восстановить уже мёртвый (Тьфу, тьфу, тьфу! Не дай Бог! Но мало ли?) письменный русский язык, то ему, скорее всего, пришьют 282-ую статью за экстремизм (или какая там тогда будет), а все учёные и мыслящие люди назовут или фашистом, или сумасшедшим. Наверняка евреи и с заимствованными словами тоже борются. Любопытно, копнуть бы этот вопрос поглубже.

Юрий написал(а):

Вообще-то в литературе по ассемблеру пишут «базовый регистр», «индексный регистр», а в обиходе они сократились до «база» и «индекс». Вы, вероятно, не пользовались ассемблером, поэтому для Вас база или военная, или оптовая.

Я вам говорю, что это слово не подходит в качестве полноценного однозначного названия этого регистра. Я просто знаю это слово, оно вообще здесь ни к селу, ни к городу. Зачем всё время пытаться прогнуть русский язык под английский, приспособить его под него? Нужно придумывать такие название, которые лучше всего подойдут для отражения сути вещи. Мне плевать на жаргонизмы англопрограммистов. Мы делаем русский низкояз, поэтому и названия должны быть русскими.

Юрий написал(а):

Возьмётесь? Список служебных слов согласуем.

Там делать нечего. Могу и я сделать.

0

22

Огурец - от греческого "агурос", что означает "незрелый" - ведь огурцы употребляют до того, как они созрели. Огурцы попали на Русь из Греции, когда Русь приняла христианство. До этого русичи не постились,  и еда была в значительной мере животного происхождения. Когда же стало необходимым соблюдать православный пост (без мяса и молока), тогда занялись растениеводством. Капуста, огурцы, хлеб и т.д.

Тоже слышал об этом. Молодцы, если честно.

Конечно, молодцы. Есть ещё один интересный язык, который мёртв и существует только в письменном виде. Это язык коптов. Для египетских христиан - это богослужебный язык. Интересен он тем, что это единственный хоть как-то (пусть только в письменном виде) сохранившийся язык древних египтян. Да, он не такой, как 5 тыс. лет назад, но всё же...

Но что нам копты и евреи? С русским беда. Ведь стараются говорить "сконцентрироваться", а не "сосредоточиться"...

Там делать нечего. Могу и я сделать.

Просто я такими вещами не занимался. Хотя, мне кажется, было бы интереснее взять Notepad++. Кажется, его чаще используют.

0

23

Юрий написал(а):

Огурец - от греческого "агурос", что означает "незрелый" - ведь огурцы употребляют до того, как они созрели. Огурцы попали на Русь из Греции, когда Русь приняла христианство. До этого русичи не постились,  и еда была в значительной мере животного происхождения. Когда же стало необходимым соблюдать православный пост (без мяса и молока), тогда занялись растениеводством. Капуста, огурцы, хлеб и т.д.

Я вам привёл статью из этимологического словаря. Одного из лучших. Там исчерпывающе написано всё. Этимология — наука неточная. Это лишь предположения всё, пусть и обоснованные. Если бы в русском языке существовала основа "огур", то и этимология у слова была бы уже славянская. Кто знает, может быть и было такое слово. Это теперь только Богу одному известно точно да путешественникам во времени. Не прикидывайтесь языковедом, лучше словари посмотрите.

Вот ещё словарь, очень хороший, здесь утверждается, что слово "огур" было, но утрачено уже, а само слово "огурец" исконное:

Искон. Суф. производное от утраченного огур (см. фамилию Огуров, польск. ogurek), заимств. из ср.-греч. яз., где agouros «огурец» восходит к aōros «несозревший» (огурцы употребляют в пищу неспелыми).

Школьный этимологический словарь русского языка. Происхождение слов. — М.: Дрофа. Н. М. Шанский, Т. А. Боброва. 2004.

(http://etymological.academic.ru/3241)

0

24

Юрий написал(а):

Хотя, мне кажется, было бы интереснее взять Notepad++. Кажется, его чаще используют.

Я пытался в нём делать подсветку для Глагола, но там с неуникодом подсветка не работает. Да и замудренно всё там. Я так и не смог разобраться, а искать документацию русскую лень было. В AkelPad посмотрел, как для других языков сделано, и сделал: там всё описывается в одном настроечнике, всё понятно было.

0

25

Если бы я был одним из выживших в ходе БП, то сделал бы всё, чтобы следующее поколение людей (детей) воспитать только на чистом русском языке. Возможно, я бы научил их даже окать, а не акать. Потому что раньше наши предки именно окали, и это правильнее, хотя и непривычным и даже смешным кажется.

0

26

Возможно, я бы научил их даже окать, а не акать

Да, слышу оканье, и прикольно как-то ;) Мне рассказывали, что когда на Северный Кавказ шло больше переселение из других российских губерний, то поселившиеся очень чётко определяли, кто из какой станицы. По говору. В одной станице - из Воронежа, в другой - с Вятки, в третьей - из центральных областей.

А хговорить на южный манер научили бы? ;) Вроде бы звонкое, твёрдое средне-русское и северо-русское "г" - это фино-угорское влияние. Раньше у всех, вроде бы, было мягкое, приглушённое  южно-русское "хг". Жаль, нет машины времени. Интересно, а как у болгар-сербов-чехов-поляков?

0

27

где именования регистров?

вот здесь

дался вам сишный стиль? А += Б, во-первых, выглядит противоестественно. Во-вторых, требует один абсолютно лишний там символ. Зачем?

Посмотрите ассемблер от Евгения Александровича Зуева. А уж этот человек работал и с Лиспом, и Адой, и С++.

А += Б (если Вы присмотритесь), можно записать и по иному: А + Б. Т.е. это разные форма отной и той же команды ADD EAX, EBX

0

28

А + Б кошерно, а А += Б глупо,

Ну тогда А = Б - это кошерно, а вот А := Б глупо. Но последнее как раз таки должно нравиться Вам, как поклоннику Паскаля.

Кажен москаль выбирает Паскаль, хохлы же уси пишут на Си

0

29

Да никаких лишних сущностей. Только лишняя строчка в таблице описания операций. Не нравится - удалил строчку, и проблема решена :)

0

30

И еще нужен окончательный вариант, можно в такой форме:
№ п/п | Команда ассемблера | Наш вариант | Описание

Для регистров:
№ п/п | Регистр | Наш вариант | Описание

Ну да, формальное описание - это одно из требований к проделываемой работе.

0

31

Может быть, стоит не язык ассемблера переводить, а сделать язык программирования с высокоуровневыми указаниями, но с возможностью работать на самом низком уровне?

если Я1 = 0:
        Я1 := Я2 + Я3
иначе:
        Я1 := Я2 + 10110Д

выбрать Я5 из:
        1: Я6 := 128
        АШ: Я6 := А3Ш
        "я": Я6 := 3785В
        иначе:
                Я6 := 11100101Д

Где Я<Ч> — это ячейка процессора, то есть регистр. В стиле Питона.

0

32

Думаю, что если вместо А += Б писать А =+ Б, то такая запись воспринимается получше. Можно ещё такие способы рассмотреть: А :=+ Б, А :+ Б.

0

33

Советую всё же подумать над употреблением слова колода вместо слова стек. На мой взгляд, если отбросить стеснение своих родных слов, то это слово отлично подходит.

0

34

utkin написал(а):

Кстати, такая запись по-моему понятней даже чем А + Б, но для двоеточия надо жать регистр. Неудобно в общем-то.

Ну, в виртовских языках такое везде.

Нужна русская клавиатура, где в русской раскладке будут все необходимые знаки, чтобы не переключаться. Мы как-то со знакомым брались такую разработать. Брали за основу какие-то изображения из сети и просто наращивали немножко её. Вроде неплохо получалось.

0

35

Советую всё же подумать над употреблением слова колода вместо слова стек.

Делаю так, чтобы всё было настраиваемым через файлы настроек. Там и "колоду" можно прописать, и "стек". Как нравится - так и пишешь.

0

36

Юрий написал(а):

Делаю так, чтобы всё было настраиваемым через файлы настроек. Там и "колоду" можно прописать, и "стек". Как нравится - так и пишешь.

Хорошо. Но по умолчанию лучше употреблять «колоду» :)

0

37

Да какие умолчания? Чтобы «стек» игнорировался, а «колода» работала, надо «стек» просто исключить из настроек. Или «стек» оставить, но после трансляции выдавать: «Вы употребили нерусское слово. Следующая трансляция с нерусскими словами возможна только через 30 минут»?  o.O

0

38

Юрий написал(а):

Да какие умолчания? Чтобы «стек» игнорировался, а «колода» работала, надо «стек» просто исключить из настроек. Или «стек» оставить, но после трансляции выдавать: «Вы употребили нерусское слово. Следующая трансляция с нерусскими словами возможна только через 30 минут»?

У меня была мысль встроить в язык некие распорядительные средства для организации работы множества разработчиков — коллектива. Например, для какой-то разработки начальник хочет запретить использовать какие-то средства языка, тогда он может просто прописать некое правило, которое будет применяться для всех разработчиков. Эти правила могут выглядеть как директивы препроцессора в Си, или же как-то иначе.

0

39

Юрий написал(а):

Да какие умолчания?

Имеется ввиду в исходниках преобразователя языка, в названиях каких-то внутренних переменных и т.д.

0

40

Имеется ввиду в исходниках преобразователя языка, в названиях каких-то внутренних переменных и т.д.

Да в исходниках вообще ничего не забивается. Всё на уровне внешних (по отношению к преобразователю) файлов. Точнее, забивается, но такие вещи, как пробелы, табуляции, переводы строки или точка с запятой, как разделитель. Но Вы понимаете, что это - мелочь. Всё остальное - в файлах csv.

0

41

Юрий написал(а):

Да в исходниках вообще ничего не забивается.

Я имею ввиду не сами определения языка, а названия переменных, в которые эти определения загружаться будут из внешних источников.

0

42

Я имею ввиду не сами определения языка, а названия переменных, в которые эти определения загружаться будут из внешних источников.

А тут полная свобода: в нижеприведённую таблицу

Код:
!;NOT;0;1
!=;JNE;0;1
&;AND;1;1
&=;AND;1;1
();CALL;1;0
*;MUL;1;1
*=;MUL;1;1
**;IMUL;1;1
**=;IMUL;1;1
+;ADD;1;1
+=;ADD;1;1
++;INC;0;1

Дописываешь

Код:
И;AND;1;1

и всё готово.

0

43

О, макросы- это целая история... Полностью сделать - это быстро не получится. Есть средство для повторения нескольких одинаковых команд. И прямая замена текста, типа некоторая последовательность -> другая последовательность.

У меня есть вопрос. Как записываются на ассемблере 16-тиричные и 2-ичные константы с плавающей точкой? И записываются ли они вообще? Типа того:

Код:
abc    dq     fde04.ffeh
xyz    dq     110101.001b

Так или нет? Что-то не могу найти в учебниках.

0

44

Жаль, что ничего не можете сказать про плавающие константы.
Я так сделал:

Код:
метка 1:  -3 9.9 9 3 3  c  -1 45.0  -4.  -0.05  6  -7.7  8  9 }    \\ комментарий 1-й строки;-база;функ();а-б

метка 2:  А  Б  Ц  Д  БАЗА  {    \\ комментарий 2-й строки

йцу:/  -32 000 000.1  \\ЕЩЕ КОММЕНТАРИЙ
/ -3 9.9 9 3 3
двоичное: Б + 2'о010 oolO l1OО lоО1
  шест_ое: А - 16'абвс цдеф 0931 г
\\======================

А это - на выходе:

Код:
; Далее - автоматически сгенерированный текст ->
metka_1:  PUSH  -39.9933        ; 2  комментарий 1-й строки
          PUSH  ecx             ; 2
          PUSH  -145.0          ; 2
          PUSH  -4.             ; 2
          PUSH  -0.05           ; 2
          PUSH  6               ; 2
          PUSH  -7.7            ; 2
          PUSH  8               ; 2
          PUSH  9               ; 2
          NEG   ebp             ; 2
          CALL  funk            ; 2
          SUB   eax, ebx        ; 2
metka_2:  POP   EBP             ; 4  комментарий 2-й строки
          POP   EDX             ; 4
          POP   ECX             ; 4
          POP   EBX             ; 4
          POP   EAX             ; 4
jtsu:     DIV   -32000000.1     ; 6 ЕЩЕ КОММЕНТАРИЙ
          DIV   -39.9933        ; 7
dvoichnoe: ADD  EBX, 0010001011001001b; 8

Пока так.

0

45

Это начинает смахивать на Форт, а не на ассемблер

Описание в файле csv позволяет задать левые операнды числом 0-N, обозначение операции и правые операнды числом 0-N. Т.е.

Код:
а  б  в  г  д   <#$%>   е  ё  ж  з  и  к

Уменьшишь до нуля количество правых операндов - станет похоже на Форт. Уменьшишь до нуля количество левых операндов - станет похоже на Лисп.

0

46

Юрий написал(а):

А тут полная свобода: в нижеприведённую таблицу

Код:
!;NOT;0;1
!=;JNE;0;1
&;AND;1;1
&=;AND;1;1
();CALL;1;0
*;MUL;1;1
*=;MUL;1;1
**;IMUL;1;1
**=;IMUL;1;1
+;ADD;1;1
+=;ADD;1;1
++;INC;0;1

Дописываешь

Код:
И;AND;1;1

и всё готово.

Сделайте, пожалуйста, вместо английских внутренних имён русские. Чтобы было так:

Код:
!;НЕ;0;1
&;И;1;1
&=;И;1;1
();ВЫЗОВ;1;0
*;УМНОЖ;1;1
*=;УМНОЖ;1;1
+;СЛОЖ;1;1
+=;СЛОЖ;1;1
++;УВЕЛ;0;1

0

47

Сделайте, пожалуйста, вместо английских внутренних имён русские. Чтобы было так:

Гм... Второе поле csv-файла - это мнемокод команды ассемблеров MASM, TASM, FASM и других. Задачу своего ассемблера я вижу в таком преобразовании текста, что получившийся текст (именно текст, а не машинный код) мог быть подан затем MASM и FASM, и только последние делают из него машинный код.

Т.е. я делаю пребразователь этого

Код:
метка 1:  -3 9.9 9 3 3  c  -1 45.0  -4.  -0.05  6  -7.7  8  9 }    \\ комментарий 1-й строки;-база;функ();а-б

метка 2:  А  Б  Ц  Д  БАЗА  {    \\ комментарий 2-й строки

йцу:/  -32 000 000.1  \\ЕЩЕ КОММЕНТАРИЙ
/ -3 9.9 9 3 3
двоичное: Б + 2'о010 oolO l1OО lоО1

в вот это:

Код:
; Далее - автоматически сгенерированный текст ->
metka_1:  PUSH  -39.9933        ; 2  комментарий 1-й строки
          PUSH  ecx             ; 2
          PUSH  -145.0          ; 2
          PUSH  -4.             ; 2
          PUSH  -0.05           ; 2
          PUSH  6               ; 2
          PUSH  -7.7            ; 2
          PUSH  8               ; 2
          PUSH  9               ; 2
          NEG   ebp             ; 2
          CALL  funk            ; 2
          SUB   eax, ebx        ; 2
metka_2:  POP   EBP             ; 4  комментарий 2-й строки
          POP   EDX             ; 4
          POP   ECX             ; 4
          POP   EBX             ; 4
          POP   EAX             ; 4
jtsu:     DIV   -32000000.1     ; 6 ЕЩЕ КОММЕНТАРИЙ
          DIV   -39.9933        ; 7
dvoichnoe: ADD  EBX, 0010001011001001b; 8

а не в *.exe

0

48

Юрий написал(а):

У меня есть вопрос. Как записываются на ассемблере 16-тиричные и 2-ичные константы с плавающей точкой? И записываются ли они вообще?

Плевать, по большому счёту, как это сделано в ассемблере. В русском низкоязе хотелось бы иметь возможность записывать числа в любой из хотя бы четырёх основных систем счисления. И дробная запятая (точка) должна тоже быть. Всё это нужно для удобства, как и знак сложения вместо словесного указания. Также было бы здорово иметь возможность представлять восьмиразрядное слово (байт) как знак, шестнадцатиразрядное — как знак Уникода UTF-16, тридцатидвухразрядное — как знак Уникода UTF-32. Мне кажется, что всё это было бы очень удобным.

0

49

Юрий написал(а):

Гм... Второе поле csv-файла - это мнемокод команды ассемблеров MASM, TASM, FASM и других. Задачу своего ассемблера я вижу в таком преобразовании текста, что получившийся текст (именно текст, а не машинный код) мог быть подан затем MASM и FASM, и только последние делают из него машинный код.

Ах, да. Я и забыл об этом. Скорость преобразования будет ниже.

0

50

Юрий написал(а):

2'о010 oolO l1OО lоО1

Что за мешанина букв «о» и «О» вместо нулей, а буквы «l» вместо единицы?

0

51

Плевать, по большому счёту, как это сделано в ассемблере.

Как это плевать? Я должен во что-то преобразовать. Имею я право преобразовать в fedc.ba9h млм нет? Я же не *.exe преобразую, а в текст *.asm

Что за мешанина букв «о» и «О» вместо нулей, а буквы «l» вместо единицы?

Все круглые символы - нули, все палочки - единицы  :blush:

0

52

Юрий написал(а):

Как это плевать? Я должен во что-то преобразовать.

Да. теперь понятно. Я думал вы не про целевое представление спрашиваете, а про исходное, т.е. как это должны быть в вашем низкоязе.

Юрий написал(а):

Все круглые символы - нули, все палочки - единицы

Зачем? Мне кажется, что это послужит только ещё одним источником ошибок. Пользы от этого никакой нет.

0

53

Зачем? Мне кажется, что это послужит только ещё одним источником ошибок. Пользы от этого никакой нет.

Да, может и не стоит "выёживаться"  o.O

0

54

Кстати, я бы встал на защиту маленьких букв "о". Они реально улучшают восприятие! С остальными символами, может и перебор, но я горою стою за "о"! Ну посмотрите:

Код:
1оо1 ооо1 1о11 1ооо

Очень наглядно смотрится!

0

55

Планирую сделать так. Если специальная последовательность символов (допустим <?>), после которой начинает работать мой ассемблер. Другая последовательность символов (допустим </>) заканчивает режим разбора текста, после этих символов идёт прямое копирование входного текста в выходной. Соответственно вне участка <?>...</> можно писать любые тексты обычного ассемблера (а вдруг в моём ассемблере что-то упущено?), в т.ч. использовать макросы, подключать сторонние макросы и т.д.

0

56

Пока что я не пытаюсь делать какой-то семантический анализ. Т.е. любые имена этот "ассемблер" пропускает без проверки. Макрос ли это, или что ещё - просто копируется в выходной поток.

Еще вопрос - есть ведь несколько операций сложения, верно?
Как их различать? Вот А + Б это с учетом переноса или без?

Вообще-то обычных операций сложения - одна. Она воздействует на регистр флагов, там возникают всякие флаги по результатам выполнения. Напрямую к операции сложения это отношения не имеет. В Си или Паскале и массе других языков (например, в Хаскелле) вообще втупую складывают, не обращая внимания на переполнения. Что не лучшим образом сказывается на надёжности ПО. Задал одному товарищу, пишущему статьи про Хаскелл: "А как Хаскелл реагирует на переполнения?". На что мне ответили, что никак. А ведь этот язык преподносят как средство надёжного программирования: очень много ошибок отлавливается в процессе компиляции.

Но вот только есть другие, необычные операции сложения. Для плавающей и десятичной арифметики. Но это пока что за рамками моего внимания  :dontknow:

0

57

Подробнее ответить, увы, пока не могу. Сроки поджимают. В понедельник надо сдать эту работу  :shine:

0

58

Юрий, как у вас дела с русским ассемблером продвигаются?

А никак не продвигаются. Всё, тупик. Всё упёрлось в то, что делать больше нечего, потому что все желаемые цели достигнуты. Транслятор разработан, протестирован. Написаны проверочные программы, которые работают. Есть многостраничная документация.

Знаете, почему я не хочу быть президентом? Потому что это - карьерный тупик

Осталось это куда-то выложить. Дальше заниматься этим не хочу. Но если кто пожелает - пожалуйста, к Вашим услугам - исходные коды. Хотелось бы переписать это, поскольку программа, как говорят, становится хорошей, когда её перепишут в третий раз. Ну да ладно, потерплю и подавлю в себе это желание. Есть вещи поважнее.

В чём плох этот ассемблер?
1) Он работает только с Win-кодировкой.
2) Он - транслятор, а не компилятор; он генерирует код на традиционном ассемблере, для получения исполняемого кода нужно запустить второй ассемблер.
3) Сгенерированный код годится только для MASM32 (от Micrоsoft). Меня оправдывает то, что MASM32 бесплатен. Надеялся, что у FASM и MASM32 одинаковый синтаксис, но увы, это не так.

Куда выкладывать?

0

59

Дальше заниматься этим не хочу.

Но ведь есть куда стремиться - это убрать первые три пункта:)

0

60

Но ведь есть куда стремиться - это убрать первые три пункта:)

Ну если кто-то к этому стремится - пожалуйста, отдам всё с потрохами - исходники, документацию. Но я это делал этот ассемблер по ряду причин. Теперь эти причины неактуальны. Поэтому займусь тем же, чем и до этого ассемблера. Но если Вам он нужен - я Вам всё готов предоставить!

0

61

Я думаю можно выкладывать прямо сюда. Или это очень много места занимает?

0

62

Хорошо, выложу, дам ссылку.

0

63

Скачавайте по этой ссылке.

0

64

Разместить один оператор ассемблера на двух и более строках, как это сделано в большинстве языков высокого уровня, нельзя.

Вы переводите конструкции с русского на английский и компилятором MASM собираете уже, верно?

А, И, Б   \\ соответствует OR  EAX, EBX
          \\ разделители – «,» и пробел
А ИЛИ Б   \\ ошибка: будет воспринято как «A_ILI_B»
          \\ поскольку пробелы одиночные
А  И  Б   \\ соответствует AND  EAX, EBX
          \\ разделители – 2 пробела

В первом варианте ИЛИ, а не И?

имя функции ()

Название одной функции можно задавать через пробел?

Первое впечатление, приятно, что по-русски. Непривычное ощущение. Чувствуется лаконичность и компактность кода.

0

65

Да, наверное описка.

Везде, в любом идентификаторе можно употреблять одиночные пробелы. В метках, именах полей и подпрограмм и т.д. Но это накладывает ограничение. Одиночный пробел не может теперь быть разделителем. Разделителем являются 2 пробела, табуляция, запятая и их любое сочетание.

Первое впечатление, приятно, что по-русски. Непривычное ощущение. Чувствуется лаконичность и компактность кода.

А вы ещё посмотрите исходники транслятора на Си. Я давно испытываю чувство глубокого удовлетворения от программирования на русском.

0

66

Тоже имею вариацию на русский ассемблер, но недаразвитую - создает только бутсектор:

Код:
// BIOS.v_static
Префикс MBR;
_Счетчик Отобразить(_Счетчик Символ):
	mov al, Символ;
	mov ah, 0x0E; // номер функции BIOS
	mov bh, 0x00; // страница видеопамяти
	int  0x10; //вызываем функцию BIOS
	=Символ;
.
 
_Счетчик ЗагрузитьСекторы(_Счетчик DiskID, _Счетчик НомерСектора, _Счетчик КолВо, _Счетчик Сегмент, _Счетчик Смещение):
	_Счетчик лКолВоПовторов=3;
	mov es, Сегмент;
	mov bx, Смещение;
	mov cx, (0<<6)+НомерСектора; // номер головки
	mov dl, DiskID; // номер диска
	mov dh, 0; // номер головки
	mov al, КолВо; // сколько секторов считать
	mov ah, 2; // номер функции BIOS
	int  0x13; //вызываем функцию BIOS
	< лКолВоПрочитано = ax;
	< лОш = ah;
	CF==0:
    MBR::Отобразить((лКолВоПрочитано & 0xF)+'0');
    =НомерСектора;
	.
	MBR::Отобразить((лОш>>6)+'0'); MBR::Отобразить(((лОш & 0x38)>>3)+'0'); MBR::Отобразить((лОш & 0x07)+'0');
	=0;
.
Конец области префикса;
Код:
// BIOS2.v_static
_Счетчик Отобразить(_Ссылка Текст):
	_Счетчик лРес=0;
	mov si, Текст;
	cld; //направление для строковых команд
	Цикл:
    mov ax, 0;
    lodsb; //загружаем очередной символ в al
    Иначе:
    	--;
    .
    mov ah, 0x0E; // номер функции BIOS
    mov bh, 0x00; // страница видеопамяти
    int  0x10; //вызываем функцию BIOS
    лРес=лРес+1;
	.
	=лРес;
.
 
_Счетчик Отобразить(_Счетчик Символ):
	mov al, Символ;
	mov ah, 0x0E; // номер функции BIOS
	mov bh, 0x00; // страница видеопамяти
	int  0x10; //вызываем функцию BIOS
	=Символ;
.
Код:
Реальный 0x7c00;
?Использовать("BIOS.v_static")
Программа:
	< лИндетификаторДиска=dl; // в переменную из dl
	MBR::Отобразить('>');
	_Счетчик лС='L';
	Если MBR::ЗагрузитьСекторы(лИндетификаторДиска, 2, 7, 0x1000, 0)==0: // 7
    лС='?';
	.
	MBR::Отобразить(лС);
.
Продолжить(0x1000, 0, 0x100, 0xEFFF); // первая пара сегмент+адрес перехода, вторая - сегмент+адрес стека
Граница 442;
Обнулить 512;
 
//тут продолжение
Реальный 0;
?Использовать("BIOS2.v_static")
Программа:
	Отобразить('S');
	Отобразить(" Go--->");
	Цикл:
	.
.
Граница 4096;

0

67

Рассказали бы о своём ассемблере, хотя бы пару слов.

0

68

Синтаксис взят из V компилятор формирует бинарный файл и утилитой записывается в файл vhd. Далее его подключал в VirtualBox  и получал профит в виде букавок.

Как видно из текста - есть функции, переменные в стеке и много ассемблера, но со спецификой присвоения значений в регистр из стека.
Из типов переменных только _Счетчик. Исследование заняло примерно 3 дня и было закрыто за отсутствием исходников драйвер сетевухи для реального режима.

Отредактировано vic_one (19.07.2014 19:37:49)

0

69

Юрий написал(а):

Транслятор разработан, протестирован.

Ох, Юрий, Юрий... Не «протестирован», а испытан! Пожалуйста, говорите по-русски, когда это возможно!

0

70

Сергей, Вас так долго тут не было, что я и не знал, что делать. Как Вас вернуть к жизни - это была большая загадка. Ну и начал я потихоньку сквернословить (то бишь выражаться по-бусурмански). Знаю - Вы ж мимо не пройдёте! Если разводить обычную разлюли-малину, то Вы будете где-то тихонько сидеть в засаде. Но ежели сотворить что-то срамное - Вы ж соколом кинетесь на защиту справедливости, Вам совесть не позволит прятаться! Так что не гневайтесь, это у меня такое заклинание, чтоб вернуть пропащего человека.

Ну, с возвращением! Больше не пропадайте!

А мы тут надумали междусобойчик организовать. 30 августа встреча для "особо посвящённых". Жаль, что Вам далеко ехать.

Да, может о ком-то я не знаю, что он москвич. Но вроде бы всех москвичей оповестил. Поэтому ещё раз объявляю:

30 августа, в 10.00, в Москве, у выхода из метро "Цветной Бульвар" объявляется сбор всех желающих познакомиться, порассуждать об отечественном программировании, поделиться идеями, построить какие-то совместные планы.

0

71

Отчет по выпитому будет?

0

72

Я выпил стакан чая. Антон и Дмитрий пили компот, Дмитрий, кажется, два.
Ну а результаты такие: http://ruscomp.bb24.ru/viewtopic.php?id=65, http://ruscomp.bb24.ru/viewtopic.php?id=66.

0

73

Юрий написал(а):

Сергей, Вас так долго тут не было, что я и не знал, что делать.

Да тут, в общем-то, ничего любопытного, вроде, и не происходило, пока меня не было.

Юрий написал(а):

Как Вас вернуть к жизни - это была большая загадка.

У меня просто случился переезд, и долго доступа в сеть не было.

Юрий написал(а):

Ну и начал я потихоньку сквернословить (то бишь выражаться по-бусурмански). Знаю - Вы ж мимо не пройдёте! Если разводить обычную разлюли-малину, то Вы будете где-то тихонько сидеть в засаде. Но ежели сотворить что-то срамное - Вы ж соколом кинетесь на защиту справедливости, Вам совесть не позволит прятаться! Так что не гневайтесь, это у меня такое заклинание, чтоб вернуть пропащего человека.

Да просто нет и смысла рассуждать о РЯПе, коли мы даже говорить по-русски не можем или не хотим.

Юрий написал(а):

Жаль, что Вам далеко ехать.

Ехать не столько далеко, сколько долго. А вот лететь далеко, да и страшно. И дорого, к тому же.

0

74

Думаю, что не надо тратить силы на разработку русского ассемблера, т.к. Ассемблер - это архитектурно-зависимый язык.В документациях по иностранным процессорным архитектурам будет приведены примеры и справки для англоязычных команд. А язык надо разрабатывать больше архитектурно-независимый, но оставить возможность ассемблерных вставок, которые пусть будут на иностранном.

Ассемблер - это низкоуровневый язык программирования. А для русского языка мы возможно захотим использвать в будущем и российские процессоры, например Эльбрус или Мультиклет. Насколько я знаю, для программирования ЭВМ Эльбрус никогда не использовался язык ассемблер, а использовался высокоуровневый язык программирования и была создана ОС полностью на высокоуровневом языке программирования.
В современных Эльбрусах ассемблер вроде тоже не используют. А вот для Мультиклета я видел примеры кода на ассемблере их собственном, который совсем не похож на ассемблер x86.

Поэтому я думаю, что если делать русский ассемблер, то только для русского процессора, но его делать должны создатели данного процессора.

0

75

Над тем ассемблером, который стал темой этой ветки, работа больше не ведётся. Те цели, которые ставились, уже достигнуты.

Насколько я знаю, для программирования ЭВМ Эльбрус никогда не использовался язык ассемблер, а использовался высокоуровневый язык программирования и была создана ОС полностью на высокоуровневом языке программирования.

Но это не значит, что там нет машинных команд :) «Эльбрус» - это VLIW (very long instruction word) архитектура, там не было такого, что процессор прямо исполняет программу на Алгол-68 или Ада (модные языки тех времён). Компиляция в машинные коды всё-таки была. Был там язык Эль-76, похожий на Алгол-60. Он был русскоязычным,  вполне подходил для системного программирования.

0

76

Юрий написал(а):

Но это не значит, что там нет машинных команд  «Эльбрус» - это VLIW (very long instruction word) архитектура, там не было такого, что процессор прямо исполняет программу на Алгол-68 или Ада (модные языки тех времён). Компиляция в машинные коды всё-таки была. Был там язык Эль-76, похожий на Алгол-60. Он был русскоязычным,  вполне подходил для системного программирования.

Машинные инструкции конечно есть в любом процессоре, просто вся оптимизация возложена была на компилятор и не было смысла напрямую вызывать инструкции и самому формировать широкое командное слово.
И ещё конечно, например, в x86 ассемблер может понадобится, чтобы управлять процессором, например перейти в защищённый режим, а с помощью языка высокого уровня такое вряд-ли провернёшь(утверждать не буду).
Эльбрус с этой точки зрения наверно процессор по проще и там скорее всего сразу идёт правильный режим работы, на счёт остальных особенностей не знаю.

Эль-76 высокоуровневый язык программирования и я имел ввиду его, но конечно он разрабатывался под данный компьютер, поэтому он имеет все необходимые функции.

0

77

Машинные инструкции конечно есть в любом процессоре

Вроде бы когда-то пытались делать компьютеры, где бы процессоры напрямую выполняли программы на языке высокого уровня. Кстати, советская ЭВМ "Мир-2":

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

0

78

Юрий написал(а):

Вроде бы когда-то пытались делать компьютеры, где бы процессоры напрямую выполняли программы на языке высокого уровня. Кстати, советская ЭВМ "Мир-2":

Но это были бы тогда высокоуровневые машинные инструкции, т.е. они бы там были всё равно.

0

79

В интернете нашел язык программирования АС с русским синтаксисом. Ссылка http://dfiles.ru/files/pga5p8l3g

0

80

А что это за zip размером 33.75 MB? Может, где-то словесное описание языка есть? Да и Якдекс с Гуглом про него ничего не знают :(

0

81

Юрий написал(а):

А что это за zip размером 33.75 MB? Может, где-то словесное описание языка есть? Да и Якдекс с Гуглом про него ничего не знают

Там в зипе есть документ Ворлд с инструкциями  :) и с картинками.

0

82

Там в зипе есть документ Ворлд с инструкциями  :) и с картинками.

Да странно это. :huh:  Я из незнакомых источников стараюсь ничего не загружать. А то скачаю что-то сегодня, а завтра мои урановые центрифуги накроются. Неужели трудно было выложить на сайт? Халявы вокруг достаточно много... Или автор этого изделия надеется, что кто-то за него сделает сайт, разместит ссылки на близких по теме ресурсах?

Коли Вы уже начали делать последнее, может, расскажите вкратце содержимое вордовского файла? Только заведите новую ветку на форуме.

0

83

Ой, я думал, что это Architektor4 ответил. Извиняйте, ошибся. Ну если кто-то уже был подопытным кроликом, то и мне можно скачивать :)

0

84

Юрий написал(а):

Ой, я думал, что это Architektor4 ответил. Извиняйте, ошибся. Ну если кто-то уже был подопытным кроликом, то и мне можно скачивать

  :)  Интересно бы узнать его историю..

0

85

Вот что нашёл по запросу "АС язык программирования"  PDF  АЛГОРИТМИЧЕСКИЕ СЕТИ КАК ВИЗУАЛЬНЫЙ ЯЗЫК ПРОГРАММИРОВАНИЯ  /выдержки/...Предложенный в лаборатории автоматизации моделирования СПИИРАН
формализм алгоритмических сетей (АС), с успехом применяется в практике мо-
делирования уже в течение более двадцати лет [1, 2]. На его основе разрабо-
тано несколько версий систем автоматизации моделирования (последняя вер-
сия – система КОГНИТРОН [1, 2, 3]).
АС как формализм представления моделей ориентирован на конечного
пользователя. С одной стороны, он должен давать возможность пользователю
понять модель и сопоставить ее с моделируемым процессом, с другой стороны,
обеспечить требуемую точность моделирования. АС является формализмом
для представления алгоритмических моделей. То есть моделей, представлен-
ных в виде некоторого алгоритма, структура которого подобна структуре при-
чинно-следственных связей в принятом сценарии моделируемого процесса, ка-
ждая переменная алгоритма проинтерпретирована в терминах предметных пе-
ременных. АС является формализмом представления алгоритмов и может рас-
сматриваться как специальный язык программирования высокого уровня, пред-
назначенный исключительно только для описания функциональной специфика-
ции задачи.     ....2.2. Оператор условия
Однако операторов типа, приведенного на рис. 2, недостаточно для реа-
лизации полноценного классического оператора условия вида:
If(условие)
Последовательность действий 1,
Else
Последовательность действий 2.
Ранее, в [3] был предложен оператор ссылки на другую модель. Значение
дополнительного параметра данного оператора имеет следующий формат:
:file<имя файла модели>:data<имя массива данных>:cp<число
периодов>:in<x1, y1; x2, y2; … xn, yn>:out< x1, y1; x2, y2; …
xn, yn >,
где параметр <:file> задает имя файла, в котором находится модель со сво-
им шагом расчета; параметр <:data> задает имя набора данных вызываемой
модели; параметр <:cp> задает число периодов, на которое считается модель;
параметр <:in> задает через «;» список соответствия имен входных перемен-
ных в вызывающей и вызываемой моделях; параметр <:out> задает через «;»
список соответствия имен выходных переменных в вызывающей и вызываемой
моделях.
Пусть значение дополнительного параметра будет являться форматной
строкой вида
<текст1>{x1}<текст2>{x2}….<текстn>{xn},     ... Да, видимо это о нём, только у нас русская версия.

Отредактировано robur (11.10.2014 15:00:20)

0

86

Какой-то русский Бейсик. Что это такое - не слишком понятно. Как Architektor4 нашёл эту штуковину? Если сам сделал, то конечно понятно.
Обратил внимание, что на скриншотах есть ярлык HiAsm :)
Встретил там такое:

NOTICE: This file is part of the FreeBASIC Compiler package and can't
be included in other distributions without authorization.

То ли это диалект FreeBASIC, то ли сделано на нём.

0

87

Вообще-то надо бы новую ветку под это завести.

0

88

Юрий написал(а):

Какой-то русский Бейсик. Что это такое - не слишком понятно. Как Architektor4 нашёл эту штуковину? Если сам сделал, то конечно понятно.Обратил внимание, что на скриншотах есть ярлык HiAsm Встретил там такое:NOTICE: This file is part of the FreeBASIC Compiler package and can'tbe included in other distributions without authorization.То ли это диалект FreeBASIC, то ли сделано на нём.

А нет.... ))   тут другое, копнул я по глубже, его "старший брат" или точнее правильно "потомок" является тем что называют "Когнитрономами". Тема для меня абсолютно новая, как я понял на данный момент, это виртуальная нейронная сеть. Теория Графов и всё такое.... Кстати это нас тоже касается  ... Стауструп когда надстраивал Си как пить дать использовал Теорию графов, "классы" "объекты" их связи и т.д это от туда, потому что теория классификации хоть и дает представление о классах но мат аппарат у ней слабенькии. И к этому, этот инструмент ещё используют при проектирование трансляторов, компиляторов и их тормозных собратьев ))

0

89

Юрий написал(а):

То ли это диалект FreeBASIC, то ли сделано на нём.

Да скорее всего, "компилируется" через него..  а тот через Си  :rolleyes:

Отредактировано robur (11.10.2014 23:19:28)

0

90

robur написал(а):

точнее правильно "потомок" является тем что называют "Когнитрономами". Тема для меня абсолютно новая, как я понял на данный момент, это виртуальная нейронная сеть. Теория Графов и всё такое.... Кстати это нас тоже касается

Когнетрон - одна из разновидностей нейросети, устроена почти так же, как зрительная кора головного мозга человека.
Ещё есть Неокогнитрон - это более точная модель зрительной коры головного мозга.
Эти сети нужны для распознавания образов не только статических, но и изменённых, например сжатых/растянутых/повёрнутых и т.д.
Это очень ресурсоёмкие сети требуют большого количества вычислительных ресурсов.

Конкретно когнитрон и неокогнитрон не касаются языков программирования, но с ними можно что-нибудь интересное сделать.

Отредактировано Yaisis (12.10.2014 02:11:26)

0

91

Yaisis написал(а):

Когнетрон - одна из разновидностей нейросети, устроена почти так же, как зрительная кора головного мозга человека.. .Конкретно когнитрон и неокогнитрон не касаются языков программирования.

Нейросети бывают разные есть нейросети натуральные )) то есть устроенные аппаратно, есть виртуальные, то есть процесс моделируется обычным процессором с помощью программы. Вот это как раз наш когнитрон на базе АС (ц)Предложенный в лаборатории автоматизации моделирования СПИИРАН формализм алгоритмических сетей (АС), с успехом применяется в практике моделирования уже в течение более двадцати лет [1, 2]. На его основе разработано несколько версий систем автоматизации моделирования (последняя версия – система КОГНИТРОН). Выдержка из /УДК 681.3.06
О. Ф. Королев. Алгоритмические сети как визуальный язык программирования/

Отредактировано robur (12.10.2014 21:35:29)

0

92

robur написал(а):

Нейросети бывают разные есть нейросети натуральные )) то есть устроенные аппаратно, есть виртуальные, то есть процесс моделируется обычным процессором с помощью программы. Вот это как раз наш когнитрон на базе АС (ц)Предложенный в лаборатории автоматизации моделирования СПИИРАН формализм алгоритмических сетей (АС), с успехом применяется в практике моделирования уже в течение более двадцати лет [1, 2]. На его основе разработано несколько версий систем автоматизации моделирования (последняя версия – система КОГНИТРОН). Выдержка из /УДК 681.3.06
О. Ф. Королев. Алгоритмические сети как визуальный язык программирования/

Значит я вас не так понял, под словами "не касаются языков программирования", я имел ввиду, что на них языки программирования не пишутся, но конечно нейросети можно запрограммировать с помощью языков.
Я сам написал нейросеть на D и она у меня обучается каждый день...
Ну и вы наверно имели тогда язык, который специально приспособлен для создания нейросетей и облегчающий этот процесс.

Отредактировано Yaisis (13.10.2014 18:06:31)

0

93

Yaisis написал(а):

Ну и вы наверно имели тогда язык, который специально приспособлен для создания нейросетей и облегчающий этот процесс.

  :yep:  Он самый, с явственной "прошивкой" теории графов.

0

94

кстати, обратил внимание, что в словаре замен для слова "регистр" замены нет. Можно попробовать "хранитель"

Лучше "слайд" и короче и образнее...

0

95

CALL — "нырнуть"
RET — "вынырнуть"
JMP —  "скачок"
J*** —  "скачок-если"
Преобразование байта в слово (Convert Byte to Word) — "растяжка"; "стрейтч"
Преобразование двойного слова в счетверённое слово — "2стрейтч4"
HLT — Останов — "Точка"
...

0

96

Колос написал(а):

Лучше "слайд" и короче и образнее...

А что такое «слайд»? Это снимок? Причём тут это вообще?
И нужно русское слово для замены, а не варваризм. Иначе и смысла менять слово «регистр» нет. Как говорится, шило на мыло.

0

97

Колос написал(а):

CALL — "нырнуть"
RET — "вынырнуть"
JMP —  "скачок"
J*** —  "скачок-если"
Преобразование байта в слово (Convert Byte to Word) — "растяжка"; "стрейтч"
Преобразование двойного слова в счетверённое слово — "2стрейтч4"
HLT — Останов — "Точка"
...

На мой взгляд, глуповато как-то выглядят слова «нырнуть», «вынырнуть».

Товарищ Колос!
Такие слова-варваризмы, как «стрейтч» и «слайд» на этой площадке предлагать не нужно!
Это больше похоже на т.н. тролление.

0

98

«стрейтч» и «слайд» соглсен, не нравится самому, просто, для раздвигания ассоциативных пределов.
«ныр» - «выныр» с  той-же целью, отход от костности и оживления извилин, как отправной, а не конечный вариант.
Хорошо, "тролить" не буду, если это так расценено...

0

99

С простыми указаниями всё более или менее просто: можно просто выписать как можно больше подходящих слов, а потом выбрать наилучшие.

Самое трудное здесь — придумать, как называть регистры и указания, подобные J** и сдвигам.

Хотелось бы, чтобы исходник на таком низкоязе был как можно понятнее.

0

100

CALL — "нырнуть"
RET — "вынырнуть"
JMP —  "скачок"
J*** —  "скачок-если"

А чем Вам не понравилиcь мои замены?
CALL   ()
RET     <--
JMP     -->
JLE      <=
JG       >
JE       ==
MOV    =

0

Быстрый ответ

Напишите ваше сообщение и нажмите «Отправить»