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

    +242

    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
    22. 22
    23. 23
    24. 24
    main:
    	mov a, P0
    	dec a
    	inc a
    	jnz __div_part
    	jmp __mul_part
    __mul_part:
    	// mul
    	mov r0, P1
    	mov r2, P2
    	call __Mul
    	mov P1, r0
    	mov P2, r1
    	jmp __end		
    __div_part:
    	// div
    	mov r0, P1
    	mov r2, P2
    	call __Div
    	mov P1, r0
    	mov P2, r1
    	jmp __end
    __end:	
    end

    процедура main лабы по mcs-51

    Запостил: valik-32, 08 Апреля 2011

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

    • И что она делает?)
      Ответить
    • dec a
      inc a
      операция подергивания
      Ответить
    • jmp __mul_part
      __mul_part:


      jmp __end
      __end:

      Это не выхлоп плохого компилятора?
      Ответить
      • Нет, это рукотворное.
        Ответить
      • Когда-то давно встречал такой вот вид задержек, jmp $+2, делает ничего, но достаточное время, чтобы прочесть/записать из/в порт(а). В теории, может нести какую-то специфическую полезность.
        Ответить
    • Действительно похоже на хреновый оптимизатор. Неужто нет test/cmp/and на худой член? И передача аргументов/возврат значений какой-то... особо навязчивый.;)
      А насчет jmp для задержки... давно это было. Очень архитектурнозависимо.:) Выкинет его проц с предсказанием ветвлений, и время нестабильно. Сейчас видел чтение из порта в качестве задержки между командами ввода-вывода в порт. Хотя... Это же контроллер - там можно, так как команды выполняются строго определенное количество тактов. Но это, похоже, не наш случай. А! Для mcs-51 вообще никакого "передергивания" не надо - там же JZ/JNZ проверяет _значение_ аккумулятора на ноль.:)
      Так что это imho просто тяп-ляп сваяная лаба - лишь бы работала.
      Ответить

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