Сборный / Говнокод #27782 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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 digitalEugene, (Updated )

Комментарии (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
                    (или как-то так)
                    Ответить
      • Чур не списывать в того, кому дали "mov" eax, eax
        Ответить
      • Пили XCHG, там NOP автоматически подтянется.
        Кстати, я бы параллелил разработку по опкодам, а не по мнемоникам.
        Ответить
        • Тогда все халявщики активисты набегут на векторные типа HURRDURR32648. У штеуда изменялся подход к ихнему ассеблеру, в дос все системные погромисты на нем писали, а сейчас только фрики. Именно поэтому вставлять JMP SHORT, JMP NEAR или JMP FAR решит копулятор, а векторные надо нацарапывать ногтями.
          Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8