2024-02-05

vak: (Default)
Хорошо, юникс на Крэе мы установили. А где юникс - там и Си компилятор. Попробуем запустить классический "Hello World".

Будем делать это от юзера root. В принципе так неправильно, но от обычного юзера имеющийся Си компилятор не запускается. Потому что установлен в папке /usr/gen/bin, а к ней доступ открыт почему-то только для суперпользователя. Настроить права доступа можно, но я здесь не хочу отвлекаться.

В системе установлены текстовые редакторы vi и emacs. Оба нормально работают, если установить тип терминала и высоту экрана. Скажем, если у вас 30 строк в окошке:
# export TERM=xterm
# export LINES=30
После этого можно смело вызывать emacs или vi, к чему душа больше лежит. Введём классический текст программы и скомпилируем:
# 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
Работает. Глянем ассемблерный код.
# /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
Первый раз в жизни вижу реальный ассемблерный текст процессора Cray! До этого только в публикациях. Можно открывать описание системы команд (PDF) и изучать. Описание ассемблера Крея: PDF.