Вывод на экран с пом. BIOS и прямым доступом

Тема в разделе "WASM.ASSEMBLER", создана пользователем Daredevil, 18 фев 2006.

  1. Daredevil

    Daredevil New Member

    Публикаций:
    0
    Регистрация:
    18 фев 2006
    Сообщения:
    1
    Привет, прошу небольшой помощи:
    Код (Text):
    1.  
    2. .model tiny
    3. .code
    4. org 100h
    5. start: push es
    6.  pop ds
    7. lea di, StringEnd-1
    8. mov ax,es:[046ch]
    9. mov cx,10
    10. std
    11.  
    12. Repeat: xor dx,dx
    13. div cx
    14. xchg ax,dx
    15. add al,'0'
    16. stosb
    17. xchg ax,dx
    18. or ax,ax
    19. jne Repeat
    20.  
    21. xor bp,bp
    22. mov bp, word ptr es:[di]
    23.  
    24. push ax
    25. push cx
    26. push si
    27.  
    28. tt: mov ah,09h
    29. mov al, byte ptr [bp+si]
    30. mov cx,10
    31. mov bl,00011111b
    32. int 10h
    33. inc si
    34. cmp bp,'$'
    35. jne tt
    36.  
    37. int 20h
    38. String db 8 dup (?), '$'
    39. StringEnd=$-1
    40.  




    Программа берет время, прошедшее со времени сброса процеесора из BIOS, конвертирует его в строку, и выводит на экран с пом. BIOS и прямым доступом.

    С пом. BIOS я написал, только он почему-то выводит 10 одинаковых символов и считает этот цикл, как бесконечный. Почему он выводит не строку, которая хранится в bp ?
     
  2. crypto

    crypto Active Member

    Публикаций:
    0
    Регистрация:
    13 дек 2005
    Сообщения:
    2.533
    Вспомним DOS!

    1. Цикл бесконечный, потому что bp не изменяется

    2. Не настроен регистр si, вообще непонятно, откуда берется байт al

    3. Объясни, для чего нужны эти строки

    xor bp, bp

    mov bp, es:[di]

    Что у тебя будет после этого в регистре bp?



    А почему ты не пользуешься тем же CodeView или другим дебуггером для отладки программы? Он здорово помогает!