Не уверен, что отвечу ваш полный безнадежности вопрос, но мне кажется, что вы странным образом сместили фокус. «Ни разу не встречал человека, который бы по 8 часов в сутки выполнял желания дяди и при этом был счастлив». А если вы это воспринимаете, не как «выполнение желаний дяди», а как совместое создание чего-то крутого и прекрасного? Например, пишете софт для ракет в SpaceX, реконструируете мозг или расшифровываете геном или помогаете придумывать новые фичи для Oculus Rift? Вы сидите на работе по 14-16 часов в сутки не потому, что у вас дедлайн, и не потому что дядя мудак, а потому вас прёт от этой работы, вы жрать её готовы, настолько сильно она вам нравится.
Найти такую работу и научиться получать от неё непрекращающееся удовольствие — это одна из самых осмысленных целей, которые могут быть у человека в жизни.
Еще я не очень понимаю, почему был выбран ассемблер как язык программирования для ОС.
Уважать этот выбор я могу, а понять — нет.
Выиграть в быстродействии у современных компиляторов с С/C++ довольно трудно.
В быстродействии — трудно. В размере кода — тривиально.
Я могу представить себе некий транслятор с ассемблера intel в ассемблер для ARM.
Я когда-то писал нечто похожее с интел в 3rd-party CPU для FPGA.
Мне тогда потребовалось срочно реализовать алгоритм SHA для специфичного процессора для которого существовал только компилятор ассемблера
Теперь понятно, вы просто представляете себе неправильный образ. Для кода, который принимает на вход блок данных и даёт на выход преобразованный блок данных — да, в принципе это возможно. Но операционная система — это не код, который как-то преобразует заданные данные.
Операционная система управляет ресурсами компьютера. Ресурсы PC в значительной степени одинаковы на разных машинах — по крайней мере, достаточно, чтобы одна и та же дискета или флешка могла загружаться и выводить картинку на всех PC. Зоопарк ARM — другой, там даже загрузиться-то переносимо нельзя, не говоря уже о выводе картинки.
> Хотя есть не так много мест, где можно оплачивать товары биткоинами, их можно обменять, как и любую другую валюту
То есть, игровая компьютерная валюта, теперь, получается, тоже валюта? Особенно если где-то кто-то за игровое золото окажет реальную услугу или продаст реальный товар. (я тебе табуретку, ты мне 10 000 золотых в WoW).
Уважаемая налоговая, довожу до вашего сведения, что вчера паладин Goodknight убил дракона Onixia, и тем самым получил шлем качества epic, ориентировочной ценой в 20 000 золотых, и 15 000 золотых лута. И, насколько мне известно, не уплатил подоходный налог. Прошу возбудить дело.
У нас действительно, во многих местах, для перевода нужно править исходный код. Ведь для каждого языка, склонение существительных, спряжение глаголов и длина слов разные:
if lang eq ru
; подождите 5 секунд, 4/3/2 секунды, 1 секунду
cmp al, 5
mov cl, ' '
jae @f
cmp al, 1
mov cl, 0xE3 ; 'у' in cp866
jz @f
mov cl, 0xEB ; 'ы' in cp866
@@:
mov [time_str+9], cl
else if lang eq et
cmp al, 1
ja @f
mov byte [time_str+9], ' '
mov byte [time_str+10], ' '
@@:
else if lang eq sp
; esperar 5/4/3/2 segundos, 1 segundo
cmp al, 1
mov cl, 's'
ja @f
mov cl, ' '
@@:
mov [time_str+10], cl
else
; wait 5/4/3/2 seconds, 1 second
cmp al, 1
mov cl, 's'
ja @f
mov cl, ' '
В других местах используется директива препроцессора, которая вставляет нужный файл с переводами, в зависимости от языка:
if lang eq ge
include "boot/bootge.inc" ; german system boot messages
else if lang eq sp
include "boot/bootsp.inc" ; spanish system boot messages
else if lang eq ru
include "boot/bootru.inc" ; russian system boot messages
include "boot/ru.inc" ; Russian font
else if lang eq et
include "boot/bootet.inc" ; estonian system boot messages
include "boot/et.inc" ; Estonian font
else
include "boot/booten.inc" ; english system boot messages
end if
Можно ещё сократить, первую и третью — до 24 байт, вторую — до 27 байт.
выходить из COM-программы можно не по int 20h, а по ret; в бинарнике второй программы это даже используется, в отличие от исходника;
int 29h сохраняет ah, так что «mov ah,1» и «int 29h» можно поменять местами, а пару команд «mov al,imm1» и «mov ah,imm2» можно заменить на одну «mov ax,imm2*256+imm1»;
если в мешанину условных переходов закрадывается безусловный, это повод подумать, нельзя ли переупорядочить код, избавляясь от безусловного перехода.
Первая программа:
org 100h
;;Угадай-ка
int 16h ;;Ожидаем нажатие на клавишу
mov bl, al ;;Сохраняем код клавиши в память
still: ;;Главный цикл
int 29h ;;Вывод символа на экран
mov ax, 1*256+13;;al=13 - Возврат каретки, ah=1 - Опрос клавиатуры
int 29h
int 21h
cmp al, bl ;;Сравнение кодов клавиш
mov al, '+'
ja still
mov al, '-'
jb still
true:
ret
Вторая программа:
org 100h
;;Баше
mov dl, 15+4 ;;Поместим в dl количество палочек
still: ;;Главный цикл
sub dl, 4
js fin
mov ax, 1*100h+'|' ;;Выведем символ палочки
mov cl, dl ;;с помощью цикла,
disp: ;;ровно cl раз
int 29h ;;вызвав прерывание 29h
loop disp
int 21h
sub al, '0' ;;Переводим ASCII-код в число
cmp dl, al ;;Забрали последнюю палочку - значит, победили
jne still
win:
int 29h ;;Выведем сердечко
fin:
ret
Третья программа:
;;Однорукий бандит
push 0b800H ;;Обращаемся к видеопамяти
pop ds
le: ;;Вывод символа
inc bx
inc bx ;;Переместим курсор
inf: ;;Почти вечный цикл
int 1AH ;;Вызываем таймер
add dl, bl ;;Мешаем игроку победить, быстро нажимая клавишу "Вправо"
mov [bx], dl ;;Выводим текущий символ на экран
;;Обработчик клавиатуры
in al, 60H
cmp al, 77 ;;Нажата кнопка "Стрелка влево", переходим к следующему символу
jnz inf ;;Почти вечный цикл повторяется почти вечно
re: ;;Пора выводить следующий символ или останавливать бандита
cmp bx, 6
jnz le
ret ;;Конец программы
xkcd.ru/554/
Найти такую работу и научиться получать от неё непрекращающееся удовольствие — это одна из самых осмысленных целей, которые могут быть у человека в жизни.
Теперь понятно, вы просто представляете себе неправильный образ. Для кода, который принимает на вход блок данных и даёт на выход преобразованный блок данных — да, в принципе это возможно. Но операционная система — это не код, который как-то преобразует заданные данные.
Операционная система управляет ресурсами компьютера. Ресурсы PC в значительной степени одинаковы на разных машинах — по крайней мере, достаточно, чтобы одна и та же дискета или флешка могла загружаться и выводить картинку на всех PC. Зоопарк ARM — другой, там даже загрузиться-то переносимо нельзя, не говоря уже о выводе картинки.
dabeaz.com/generators/
dabeaz.com/coroutines/
То есть, игровая компьютерная валюта, теперь, получается, тоже валюта? Особенно если где-то кто-то за игровое золото окажет реальную услугу или продаст реальный товар. (я тебе табуретку, ты мне 10 000 золотых в WoW).
Уважаемая налоговая, довожу до вашего сведения, что вчера паладин Goodknight убил дракона Onixia, и тем самым получил шлем качества epic, ориентировочной ценой в 20 000 золотых, и 15 000 золотых лута. И, насколько мне известно, не уплатил подоходный налог. Прошу возбудить дело.
В других местах используется директива препроцессора, которая вставляет нужный файл с переводами, в зависимости от языка:
Обрезать по бокам и прям мем
Первая программа:
Вторая программа:
Третья программа: