Comments 43
MOV -(PC), -(PC)
для BSD -Linux ужали до 96 байт.Самое прикольное-до 300 байт вообще не напрягались, в течение часа ужали.А дальше дым коромыслом-убили 4 часа…
Вот теперь, похоже, всё.
А если так:
MOV #NUMBER,R1
CLRB -(R1)
1: CLR (R5)
2: INC R5
SUB #10.,R0
BHIS 2
ADD #58.,R0
MOVB R0,-(R1)
MOV R5,R0
SOB R0, 1
RET
14 слов, 11 инструкций.
Счетчик вычитаний в R5 начинается с нуля и после цикла будет на единицу больше, чем должен.
Команда SOB
вычтет лишнюю единицу, проверит на 0 и выполнит переход к началу цикла.
Правильно ли я понял, как работает эта самая короткая программа? Она узнаёт остаток и частное от деления числа на 10 методом вычитания этих самых десяток? И если например у нее на входе будет 30000 то она будет заниматься вычитаниями 3 тысячи раз, в первом проходе по большому циклу? И сколько это времени займёт? Полсекунды на БК? Может, действительно такая процедура самая короткая, но в реальной жизни неприменима.
Там может вообще не быть вывода десятичных чисел, только восьмеричных.
Не застал тех времён, но "перемещаемый" — значит мог запускаться вместе с другой программой, перезаписав все свои внутренние адреса?
И много кто старался делать такие?
Bы не правы. B linux например, даже 32битном, все .so (динамические библиотеки, аналог .dll в шиндошс) компилируются с флагом -fPIC (position-independent code) и не нуждаются в релокации при маппинге в разные виртуальные адреса каждому процессу. Tак что это сугубо вендовая недоработка.
Kак следствие, в linuxе одна и та же soшка может подставляться любому процессу в любые его вирт. адреса из одних и тех же физических страниц памяти.
А как с этим делом на i386?
БК. Это мое детство. Именно на ней я в 7 лет начинал изучать Бейсик, именно на ней в 12 лет на ассемблере в 98м году написал операционку DOS98 с FAT16 файловой системой :-D
Сколько игр на ней сыграно… А операционные системы? ANDOS, MKDOS, CSIDOS, NORD, RT-11… А демосцена? Не знал, что для нее еще пишут демки — честь и хвала вам!
P.S> В серверной, на полке в дальнем углу до сих пор лежит две пачки пятидюймовых дискет с софтом и наработками. Все еще надеюсь что записи прочтутся, что когда-нибудь найду комплект БК+флоповод и прочту все это. Не хочется выкидывать детство))
С прочтением дискет могу помочь (Москва). Есть активные БКшники в Питере и в Казани – они тоже могут помочь.
Вот бы побольше код-гольфинга на Хабре.
В свое время на zx spectrum делал печать числа в Dec путем сдвига числа на 2 и на 8. Остатки сдвигов — и есть ваше очередное число с конца. Точный алгоритм не помню но работало это очень быстро
Самая короткая программа вывода десятичного числа