1. Assembler / Говнокод #27782

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    .org 80h
    data:
    	db "Hello, world!\n"
    	db 0
    start:
    	mov %c 1h
    	mov %bp @data
    	mov %si 0
    	.loop:
    		mov %al [%si + %bp]
    		inc %si
    		cmp %al 0h
    		jz @.exit
    		int 5h
    		jmp @.loop
    	.exit:
    	int 0h
    
      0080  48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0A 00 02 02
      0090  01 00 02 06 80 00 02 05 00 00 03 0A 38 09 05 0C
      00A0 0A 00 00 0E AB 00 0B 05 0D 9A 00 0B 00 00 00 00

    накодил виртуальную машину, заспидранил Hello World за четыре дня. рекорд.
    https://github.com/kcalbSphere/PVC-16

    Запостил: digitalEugene, 01 Ноября 2021

    Комментарии (26) RSS

    • забыл убрать дебагпетушню
      .org 80h
      data:
      	db "Hello, world!\n"
      	db 0
      start:
      	.loop:
      		mov %al [%si + @data]
      		inc %si
      		int 5h
      		cmp %al 0h
      		jnz @.loop
      	int 0h
      Ответить
      • Волосатые ли у тебя яйца, Диджитал Евгений? Сфоткай их в профиль.
        Ответить
    • Групповая разработка:
      Итак, каждый возьмет себе по ассемблерной команде. Начнем сначала... ты, Петенька, реализуешь команду AAA. Ты, Васенька... хм, нет, лучше начнем с наиболее важных команд. Ты сделаешь команду MOV.
      Ответить
      • А что, отлично параллелится )))
        Ответить
      • --А ты реализуешь CVTTSS2SI
        --А чего сразу я-то??
        Ответить
        • Главное чтобы не "ret" и "call"... Там псевдокода на пару листов.

          А sse'шные инструкции то довольно простые, на самом деле. Их просто дохуя.
          Ответить
          • Кол и рет этож по сути сохранить адрес и джампнуть куда-то? Или там хаускипинга много
            Ответить
            • Ну глянь в доке, там ёбаный пиздец из-за всех этих 16/32/64 и взаимодействий между ними.
              Ответить
              • Блин, точно: можно же кольнуть в другой сегмент, да и размер регистра надо понимать в зависимости от разрядности сегмента
                https://c9x.me/x86/html/file_module_x86_id_26.html

                Еще и хардварное переключение тасок надо, вероятно, поддержать?
                Ответить
                • Надо кстати глянуть, как у армов сделали 32-битные таски на 64-битной оси. Раньше то у них таких проблем не было, всё было одной битности.

                  З.Ы. А, ну почти так же, битность меняется на переходе в экцепшен и обратно.
                  Ответить
                  • У меня в контроллерах никаких "меняющихся битностей" нет. Поэтому я за контроллеры.
                    Ответить
                    • У STM32, если я не путаю, есть два режима команд. Причем они как-то выбираются младшим битом адреса - реальные адреса команд все равно четные из-за выравнивания, поэтому младший бит выделили для указания режима... Засада может быть, если делаешь таблицу переходов. Надо писать не
                      db Label1
                      db Label2
                      , а
                      db Label1 | 1
                      db Label2 | 1
                      (или как-то так)
                      Ответить
                      • В ARM младшие биты адреса перехода используются для включения режима thumb, поэтому в нём нужно аналогично мудрить.
                        Ответить
                      • Ну это не везде так.

                        https://community.st.com/s/question/0D53W00000aJJLt/thumbs2-instruction-set-only-

                        > ST does make processors like that, for example their STM32MP157 has two processor cores - one is an arm cortex M4 that can only execute thumb. But the other is an arm cortex A7 which can run in either Armv7-A or Thumb2. So you'b be able to use that switch with that processor-core on that mpu.

                        Про четные-нечетные адреса это как раз про переход из arm в thumb
                        https://govnokod.ru/20245#comment335899
                        Ответить
                        • Cortex M вроде все только thumb2 умеют, независимо от вендора?

                          Энергосбережение, площадь кристалла, вся хуй-ня...
                          Ответить
                          • Думаю да, но это надо какие-то даташиты смотреть, чтоб наверняка.
                            https://developer.arm.com/-/media/Arm%20Developer%20Community/PDF/Cortex-A%20R%20M%20datasheets/Arm%20Cortex-M%20Comparison%20Table_v3.pdf?revision=a2b3e330-d417-49cc-8037-7f034a19197e&hash=87AF3D4C6743322A02ACD8B5396FF47A1765E24C

                            вот там сравнение всех этих Cortex-M. Instruction Set Architecture встречаются Armv6-M, Armv8-M Baseline, Armv7-M, Armv8-M Mainline, Armv8.1-M Mainline

                            На асме под ARM я не писал нихуя, только читать доводилось, когда одну херню реверсил.
                            Ответить
                            • > На асме под ARM я не писал нихуя

                              Вот что значит продуманная архитектура! То ли дело "x86".

                              З.Ы. Ну вот реально, без единой строчки асма можно и загрузиться и прерывания обработать. Разве что какие-нибудь интринсики нужны иногда, но это везде так.
                              Ответить
                              • З.Ы. Хотя это походу только на М'ках, а вот на А уже надо немного асма.
                                Ответить
      • А можно мне NOP?
        Ответить
        • Чур не списывать в того, кому дали "mov" eax, eax
          Ответить
        • А мне CLC и STC.
          Ответить
        • Пили XCHG, там NOP автоматически подтянется.
          Кстати, я бы параллелил разработку по опкодам, а не по мнемоникам.
          Ответить
          • Тогда все халявщики активисты набегут на векторные типа HURRDURR32648. У штеуда изменялся подход к ихнему ассеблеру, в дос все системные погромисты на нем писали, а сейчас только фрики. Именно поэтому вставлять JMP SHORT, JMP NEAR или JMP FAR решит копулятор, а векторные надо нацарапывать ногтями.
            Ответить
    • На ноль поделил.
      Ответить

    Добавить комментарий