2023-01-27

vak: (Кризис так себе)
Гляньте, какую симпатичную рекламу мне подсунул сегодня фейсбук в ленте. Дважды! Первый раз я нажал кнопочку "sexually inappropriate", так она потом второй раз вылезла. Удивительные перемены происходят в политике фейсбука! И это ещё Илон Маск их не купил.

детям не показывайте )
vak: (Default)
Встречался ли вам процессор, где sizeof(int) равен трём? Не древность какая, а вполне современный чип. На Маузере $12 баксов стоит. Это тот самый eZ80, что в компьютере Agon Light, что я упоминал. Он хоть и уродился от 16-битного z80, но размер всех регистров увеличили до 24 бит. Получился странный размер целого числа.

Zilog поставляет бесплатный компилятор Си, но только для Windows. К счастью, оно успешно ставится и работает на Линуксе посредством Wine. Скачивается по ссылке: ZDS II eZ80Acclaim. После установки пакет оказывается в каталоге ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim!_5.3.4.

Чтобы выяснить размер int, скомпилируем тривиальную програмку и глянем ассемблерный результат:
$ cat szint.c
int szint()
{
return sizeof(int);
}

$ export WINEDEBUG=-winediag,-systray
$ wine ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim\!_5.3.4/bin/ez80cc.exe -cpu:EZ80F92 -noasm szint.c

$ cat szint.src
; Zilog eZ80 ANSI C Compiler Release 3.4
; -nomodsect -peephole -globalopt -localcse -optsize
; -const=ROM
FILE ".\szint.c"
.assume ADL=1
SEGMENT CODE
; 1 int szint()
; 2 {
_szint:
; 3 return sizeof(int);
LD HL,3
; 4 }
RET

;**************************** _szint ***************************
;Name Addr/Register Size Type

; Stack Frame Size: 6 (bytes)
; Spill Code: 0 (instruction)

XDEF _szint
END
Видите команду LD HL,3? Это возвращаемое значение sizeof(int) = 3.

Глянем для интереса значения INT_MAX и INT_MIN:
$ grep -rh define\ INT_M ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim\!_5.3.4/include
#define INT_MAX 8388607 /* max value for int */
#define INT_MIN (-8388607 - 1) /* min value for int */
Такой вот странный процессор.