- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
static int parse_num(const char *s, size_t *out) {
if (s == NULL || *s == '\0')
return -1;
char *end = 0;
errno = 0;
uint64_t num = strtoull(s, &end, 0);
if (errno != 0)
return -1;
if (*end != '\0')
return -1;
if (num > SIZE_MAX)
return -1;
*out = (size_t)num;
return 0;
}
bormand # 0
Кто там хотел посоставлять 64 битный код из ascii символов?
DypHuu_niBEHb # 0 ⇈
А нету констант чтоли?
> fprintf(stderr, "RAX=%016llx RBX=%016llx RCX=%016llx RDX=%016llx\n", regs.rax, regs.rbx, regs.rcx, regs.rdx);
fprintf(stderr, "RSI=%016llx RDI=%016llx RSP=%016llx RBP=%016llx\n", regs.rsi, regs.rdi, regs.rsp, regs.rbp);
fprintf(stderr, "R8 =%016llx R9 =%016llx R10=%016llx R11=%016llx\n", regs.r8, regs.r9, regs.r10, regs.r11);
fprintf(stderr, "R12=%016llx R13=%016llx R14=%016llx R15=%016llx\n", regs.r12, regs.r13, regs.r14, regs.r15);
блядь, ну и регистров там у вас
именно по этому я за real mode
bormand # 0 ⇈
Дык очевидно же: 0x0B код, 0х03 данные.
Это ещё не все регистры кста. Там же ещё от сопроцессора и SSE'шные. Я на них тупо забил.
З.Ы. Завтра добавлю генерецию пейджтейбла, а то руками указывать как-то некрасиво.
DypHuu_niBEHb # 0 ⇈
Что вообще самое сложное в написании самой простой ос? шедулер? драйверы для всякого современного говна типа pci-e и usb 3?
bormand # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
на всяк случай напомню, что лежит в system32 и syswow64 в винде
bormand # 0 ⇈
А у интела походу реально подгорело после фейла итантума аля IA-64 и взлёта амд64.
Настолько подгорело, что IA-32e там везде упоминается просто как костыль, прикрученный сбоку, а не как часть архитектуры. Во всех главах рассказывается сначала про 32 бита, а потом "ну а если IA-32e - то ещё вот это".
amd'шная дока в этом плане на порядок приятнее читается.
MAPTbIwKA # 0 ⇈
А вот от AMD и правда погорело, потому что софт стал называть режим AMD64, и до сих пор иногда называет. Как Интел мог такое вынести?
А еще AMD первые допёрли унсети драм контроллер в die.
А книжки и мануалы небось раньше писались, потом их просто апгрейтнули, не?
bormand # 0 ⇈
А на практике народ в 2020 году юзает всякую 16-битную опердень.
MAPTbIwKA # 0 ⇈
прикладушечку на няшной, написанную и проверенную под 32, пересобрать под другую арху и 64? Это же наверное нужно быть очень аккуратным парнем, не?
А если с астмавставками?
Вообще странная политика. Интел всякий там 16ти битный режим тянет же ровно потому, что не весь софт можно перекомпилировать
bormand # 0 ⇈
Дык никто не заставляет юзать 64-битные типы. Сделай в конпеляторе режим, в котором все размеры как в оригинале. И никто не заметит подвоха.
Ну асмовставки - да. И проебанные исходники.
MAPTbIwKA # 0 ⇈
32 же работает в 64, и ничего.
Ну ладно, а что делать с асмом-то? И со всякими тонкими оптимизациями?
А всякий ядреный софт? драва? Там же небось другой лейаут памяти, i/o нету, еще чонить
bormand # 0 ⇈
А надо? Оно ж раньше как-то работало, памяти хватало.
> оптимизациями
Ну если новый проц мощнее - тупо забить. Не хуже чем раньше - и ладно. Для переезда сойдёт.
guest # 0 ⇈
>И проебанные исходники.
или просто лень человечья.
Зачем мне вообще думать, и покупать за много денег какую-то новую архитектуру, которую я не знаю, и под которую еще хуй знает какой там софт есть, и мои админы её не знают итд, если я могу сидеть на старой, и течь?
bormand # 0 ⇈
guest # 0 ⇈
В то же время в целочисленных вычислениях он лишь немного превосходил процессоры равной частоты с системой команд x86.
При выполнении неоптимизированного под Itanium программного кода для x86-систем его производительность была в 8 раз меньше, чем у x86-процессоров на той же частоте.
дальше -- больше
Программная эмуляция системы команд x86 работает быстрее, что демонстрирует Itanium 2, который показывает производительность не оптимизированного под Itanium программного кода, сравнимую с x86-процессорами на той же частоте
bormand # 0 ⇈
guest # 0 ⇈
В первом итаниуеме делали хардварно, в 2 -- софтварно
Но могли наврать в вики, надо искать источник
bormand # 0 ⇈
guest # 0 ⇈
Я помню, что MMX вроде изначально запилили где-то в районе FPU, и он даже регистры его переиспользовал, так что высокая скорость плавучки может намекать нам на то, что SSE могли придумать и в нем.
Помню, что появился SSE в районе третьего пня, и был еще большой прыг (sse 3 чтоли?) в районе прескотта (первый 775-й)
а ну хотя третий пень (коппермайн какойнить?) же был раньше, чем итаниум
но с другой стороны разрабатывали то его давно
bormand # 0 ⇈
А вот это вроде одна из причин, по которой в десктопную винду PAE не завезли. Все понахардкодили себе 32-битных адресов.
> i/o нету
Ты давно видел железку с i/o? Ну кроме легаси хуйни, которая не может на него забить и просто бахнуть MMIO регион.
guest # 0 ⇈
AFAIK, логика была там такая:
* на десктопе часто ставят говно, и драйверы к нему пишут лалки
* на десктопе редко бывает потребность в больших объемах памяти
То есть включать PAE на десктопе во-первых опасно, во-вторых не нужно.
>Ты давно видел железку с i/o?
лол)
https://i.postimg.cc/1RksqMwq/lol.png
там еще и IRQ, хотя везде же уже MSI
Fike # 0 ⇈
Konardinho # 0 ⇈
Fike # 0 ⇈
guest # 0 ⇈
ты имеешь ввиду систему сегмент:смещение с ее оверлапом и Gate A20?
Когда два 16-ти битных регистра в итоге превращаются в один адрес до мегабатйа?
А как бы ты сделал? Логарифм от 20 по основанию 2 чото какой-то не ровный
bormand # 0 ⇈
Вот уж реально плевок в вечность. Одни долбоёбы поюзали недокументированнную фичу. Другие долбоебы ее узаконили, привернув костыль через клавиатурный порт. А теперь все страдают и эмулируют это говнище.
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
Fike # 0 ⇈
bormand # 0 ⇈
Fike # 0 ⇈
bormand # 0 ⇈
Fike # 0 ⇈
DypHuu_niBEHb # 0 ⇈
уменьшать размер регистра сегмента и его двигать потом?
Fike # 0 ⇈
bormand # 0 ⇈
К примеру, чтобы работать с 40кб массивом который начинается на 0х8000 тебе постоянно придется дрочить сегментные регистры.
Нахлёстом сегментов они эту проблему и пытались решить: ты ставишь ds на начало массива и течёшь.
Fike # 0 ⇈
guest # 0 ⇈
Konardinho # 0 ⇈
Myxa # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
или я путаю?
bormand # 0 ⇈
Без дескрипторных табличек так не выйдет. Будет что-то одно из джвух.
guest # 0 ⇈
Konardinho # 0 ⇈
Konardinho # 0
3.14159265 # 0
bormand # 0 ⇈
3.14159265 # 0 ⇈
Полная говнина.
Сайт-эффектная питушатня errno, код разврата, ещё и кокозатель.
bormand # 0 ⇈
> кокозатель
Ну за это спасибо, кстати. Хоть допарсить можно или проверить что до конца разобрал. В atoi было хуже.
3.14159265 # 0 ⇈
Так atoX это же по сути просто «удобные» обёртки над strtoX, без указателя и прибитой десятичкой.
Если бы туда завезли гарантированный errno, были бы нормальные функции.
bormand # 0 ⇈
3.14159265 # 0 ⇈
Edit: а длинные питухи действительно потом появились:
Konardinho # 0 ⇈
bormand # 0 ⇈
Какая ошибка уровня E_NOTICE )))
Для строк функция скорее всего вернет 0, хотя это зависит от первого символа в строке.
guest # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
>тру
ок
а если Null или что там у них?
guest # 0 ⇈
Единственным ответом будет "почему нет?"
guest # 0 ⇈
guest # 0 ⇈
>""
ну это где акак
bormand # 0 ⇈
3.14159265 # 0 ⇈
Ахаха
bormand # 0 ⇈
Тот самый момент, когда распарсить аргумент сложнее, чем поднять виртуальную машину, которой он понадобился.
bormand # 0 ⇈
На входе const char*, на выходе просто char*.
3.14159265 # 0 ⇈
С-с-с-ука.
Зачем? Зачем?
bormand # 0 ⇈
3.14159265 # 0 ⇈
bormand # 0 ⇈
Поэтому на выходе конста в стандартной либе нет.
guest # 0 ⇈
3.14159265 # 0 ⇈
guest # 0 ⇈