1. Если вы только начинаете программировать на ассемблере и не знаете с чего начать, тогда попробуйте среду разработки ASM Visual IDE
    (c) на правах рекламы
    Скрыть объявление

Помогите разобраться с кодом

Тема в разделе "WASM.BEGINNERS", создана пользователем Artyom2, 20 фев 2011.

  1. Artyom2

    Artyom2 New Member

    Публикаций:
    0
    Регистрация:
    4 фев 2011
    Сообщения:
    3
    Программа, по идее, должна выдавать 5 разноцветных окон. На самом деле появляется окно, которое тут же закрывается. Вот исходный код:
    CSEG segment
    org 100h
    Begin:
    xor al,al
    mov bh,10h
    mov cx,0510h
    push cx
    mov dx,103Eh
    mov ah,06h
    int 10h
    mov cx,0004h
    Next_sym:
    call Color
    loop Next_sym
    mov ah,10h
    int 16h
    int 20h
    Color proc
    add bh,10h
    mov bl,ch
    pop cx
    add cx,0101h
    sub dx,0101h
    int 10h
    push cx
    xor cx,cx
    mov ch,bl
    ret
    Color endp
    CSEG ends
    end Begin

    Объясните ещё, пожалуйста, как правильно использовать AFDpro. Пчему-то если я нажимаю на F2, то дойдя до строки "call Color" AFD пишет, что программа завершена успешно, и возвращается на 100-ю строку. Если нажимать F1 то вроде как всё в порядке (дохожит до конца инструкции, в регистрах и стеке загружены нужные данные).
     
  2. AsmGuru62

    AsmGuru62 Member

    Публикаций:
    0
    Регистрация:
    12 сен 2002
    Сообщения:
    689
    Адрес:
    Toronto
    Регистр CX не должен меняться внутри процедуры Color - его значение надо для работы цикла.
     
  3. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    При pop cx в процедуре Color из стека достается не значение cx, а адрес возврата. После int 16 в той же процедуре значение cx уже не определено, но возможно равно return_address+257 т.е. по ret программа продолжает свое выполнение не на команде loop Next_sym, а через 257 байт после нее. Пройдите программу в пошаговом режиме - не такая уж она и большая