sizeof(int) == 3
2023-01-27 18:56Встречался ли вам процессор, где 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, скомпилируем тривиальную програмку и глянем ассемблерный результат:
Глянем для интереса значения INT_MAX и INT_MIN:
Zilog поставляет бесплатный компилятор Си, но только для Windows. К счастью, оно успешно ставится и работает на Линуксе посредством Wine. Скачивается по ссылке: ZDS II eZ80Acclaim. После установки пакет оказывается в каталоге ~/.wine/drive_c/ZiLOG/ZDSII_eZ80Acclaim!_5.3.4.
Чтобы выяснить размер int, скомпилируем тривиальную програмку и глянем ассемблерный результат:
Видите команду LD HL,3? Это возвращаемое значение sizeof(int) = 3.$ 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
Глянем для интереса значения 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 */

no subject
Date: 2023-01-28 10:14 (UTC)