"Hello, Cray"
2024-02-05 16:02Хорошо, юникс на Крэе мы установили. А где юникс - там и Си компилятор. Попробуем запустить классический "Hello World".
Будем делать это от юзера root. В принципе так неправильно, но от обычного юзера имеющийся Си компилятор не запускается. Потому что установлен в папке /usr/gen/bin, а к ней доступ открыт почему-то только для суперпользователя. Настроить права доступа можно, но я здесь не хочу отвлекаться.
В системе установлены текстовые редакторы vi и emacs. Оба нормально работают, если установить тип терминала и высоту экрана. Скажем, если у вас 30 строк в окошке:
Будем делать это от юзера root. В принципе так неправильно, но от обычного юзера имеющийся Си компилятор не запускается. Потому что установлен в папке /usr/gen/bin, а к ней доступ открыт почему-то только для суперпользователя. Настроить права доступа можно, но я здесь не хочу отвлекаться.
В системе установлены текстовые редакторы vi и emacs. Оба нормально работают, если установить тип терминала и высоту экрана. Скажем, если у вас 30 строк в окошке:
После этого можно смело вызывать emacs или vi, к чему душа больше лежит. Введём классический текст программы и скомпилируем:# export TERM=xterm
# export LINES=30
Поглядим, что за бинарник получился. Запустим.# cat hello.c
#include <stdio.h>
int main()
{
printf("Hello, Cray\n");
}
# /usr/gen/bin/cc hello.c -L/usr/gen/lib -o hello
Работает. Глянем ассемблерный код.# file hello
hello: executable CRAY-SV1 SV1-multitask-cache-safe block-read-after-write-safe ETSI-safe mtcmr-safe not stripped
# size hello
hello: 23647 + 9506 + 10472 = 43625
# ./hello
Hello, Cray
Первый раз в жизни вижу реальный ассемблерный текст процессора Cray! До этого только в публикациях. Можно открывать описание системы команд (PDF) и изучать. Описание ассемблера Крея: PDF.# /usr/gen/bin/cc -S hello.c
# cat hello.s
IDENT hello$c
**********************************************
* Assemble with Cal Version 2.0 *
* *
* Generated by Std C 6.x.x *
* on 02/04/24 at 21:47:27 *
* *
**********************************************
* ALLOW UNDERSCORES IN IDENTIFIERS
EDIT OFF
FORMAT NEW
@DATA SECTION DATA,CM
@DATA = W.*
BSSZ 1
CON O'0665413226700000000000 ;main
CON O'0000000000000001200004 ;trbk tbl
VWD 32/0,32/P.main ;trbk tbl
CON O'0040000000000000000006 ;trbk tbl
CON O'0000000000000000000001 ;trbk tbl
CON O'0000000000000000000004 ;trbk tbl
BSSZ 1 ;trbk tbl
hello_c___gstatic@1@Fe_gsym0 SECTION DATA,CM
hello_c___gstatic@1@Fe_gsym0 = W.*
CON O'0441453306615713020103
CON O'0711413620500000000000
@CODE SECTION CODE
@CODE = P.*
L3 = P.* ;std entr
B02 A2 ;new base
B66 A3 ;stk top
B01 A6 ;arg base
A7 P.L4 ;ofrn rtn
B00 A7 ;return
A6 @DATA
J $STKOFEN ;$STKOFEN
main = P.*
A0 @DATA+2 ;(trbk)
B77 A0 ;(trbk)
A1 4 ;num Bs
A0 B66 ;stk top
A2 B66 ;stk tmp
A4 B67 ;stk limt
0,A0 B77,A1
A7 6 ;stk size
A3 A2+A7
A0 A4-A3
JAM L3 ;overflow
B02 A2 ;new base
B66 A3 ;new top
B01 A6 ;arg base
L4 = P.* ;ofrn rtn
S7 1073741829 ; 5
S7 S7<32 ; 5
S6 1 ; 5
A7 hello_c___gstatic@1@Fe_gsym0 ;hello_c_ 5
A6 4 ; 5
S5 S7!S6 ; 5
A5 B02 ;regs 5
4,A5 S5 ; 5
5,A5 A7 ; 5
A6 A6+A5 ; 5
R P.printf ;printf 5
S1 0 ; 6
A0 B02 ;std exit 6
A1 4 ;num Bs 6
B66 A0 ; 6
B77,A1 0,A0 ; 6
J B00 ; 6
EXT $STKOFEN:p
START main
EXT printf:p
END

no subject
Date: 2024-02-06 00:22 (UTC)Очень странный ассемблер.
no subject
Date: 2024-02-06 00:41 (UTC)no subject
Date: 2024-02-06 00:57 (UTC)Хм. Т.е. регистр результата определяет команду? Это какой-то типизированный ассемблер!
no subject
Date: 2024-02-06 01:03 (UTC)B02 A2означает пересылку значения из регистра A2 в регистр B02.А сложение записывается как:
A3 A2+A7То есть сложить A2 и A7 и записать в A3.no subject
Date: 2024-02-06 11:52 (UTC)Ну классно. А скобки можно?
A3 (A2+A3)*A4? Не должно бы, конечно.no subject
Date: 2024-02-06 18:06 (UTC)no subject
Date: 2024-02-06 18:50 (UTC)Ну да, одна строчка превращается в более чем одну команду. Голимый Фортран.
no subject
Date: 2024-02-06 15:40 (UTC)Более страх, чем Itanium, но менее, чем Каисса на М-20 (https://web.archive.org/web/20140810111020/http://m20.googlecode.com/svn/doc/M-20-Kaissa.pdf)
no subject
Date: 2024-02-06 18:54 (UTC)Ни фига себе какие аспекты! М20, 4к памяти. Знакомые команды, 016 - передача управления, 05 - квадратный корень... И, конечно, где-то ИС-2, шедевр Михаила Романовича, прячется на магнитном барабане, в самом его начале.
no subject
Date: 2024-02-08 19:19 (UTC)Вот тут: https://raw.githubusercontent.com/wiki/besm6/m20/doc/M-20-Kaissa.pdf
no subject
Date: 2024-02-10 05:44 (UTC)no subject
Date: 2024-02-10 05:56 (UTC)