vak: (Default)
[personal profile] vak
Простая программа: копирует входные байты на выход.
main() {
auto ch;

while (ch = read()) {
write(ch);
}
}
Пропускаем через Би компилятор, получаем ассемблерный код.
$ bbesm < cat.b > cat.madlen
$ cat cat.madlen
main:8,name,
program:,entry,
main:,bss,
b/save0:,subp,
b/ret:,subp,
,its,13
,call,b/save0
15,utm,1
/0:,bss,
7,utc,0
14,vtm,
,ita,14
read:,subp,
14,vtm,read
,its,14
,ati,14
14,utc,
13,vjm,
15,wtc,
,atx,
,uza,/1
write:,subp,
14,vtm,write
,ita,14
7,utc,0
14,vtm,
,its,14
,ati,14
14,xta,
14,vtm,-1
15,wtc,
13,vjm,
,uj,/0
/1:,bss,
,uj, b/ret
,end,
Компилируем в бинарник для БЭСМ-6. Линкуем с рантайм библиотекой Би.
$ besmc cat.madlen libb.obj
Запустим и подадим на вход собственный исходный код:
$ ./cat.exe < cat.b 
MAIN() [
AUTO CH;

WHILE (CH = READ()) [
WRITE(CH);
]
]
Всё перекодировалось в КОИ-7 по ходу. Это специфика мониторной системы Дубна, никуда не денешься. Ведь мы используем её механизм формирования входного потока программы.

Date: 2025-04-15 03:43 (UTC)
ufm: (Default)
From: [personal profile] ufm
а триграфы/диграфы у него в парсере есть?

Date: 2025-04-15 03:44 (UTC)
x86128: (Default)
From: [personal profile] x86128
Пару ламерских вопросов задам:
В мадлен если строка начинается не с пробела, то это опеределение метки - тут понятно.
А вот main:8,name, и main:,bss, - тут как понять?

может где краткая шпаргалка есть?

Date: 2025-04-15 03:57 (UTC)
x86128: (Default)
From: [personal profile] x86128
спасибо