Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Asm для начинающих > wsprintf меняет значения регистров


Автор: sidd 10.4.2011, 23:40
Вот есть такой цикл:
Код

m1: sub cx,3h
    jp m2
    jnp m3
    m2: sub ax,cx
        jmp m4
    m3: add ax,bx
    m4: cmp cx,0FFF2h
    jl m5
    inc cx
loop m1
m5: nop

Он работает. Хочу, чтоб на каждой интерации выводилось окошко со значениями регистов ax, bx и cx. Сделал вот так:
Код

m1: sub cx,3h
    jp m2
    jnp m3
    m2: sub ax,cx
        jmp m4
    m3: add ax,bx
    m4: cmp cx,0FFF2h
    jl m5

    pusha
    invoke wsprintf,offset message,offset format,ax,bx,cx
    invoke MessageBoxA,0,offset message,0,0
    popa

    inc cx
loop m1
m5: nop

И вот из-за wsprintf в регистры записывается какой-то бред. В результате цикл выполняется только два раза, а должен 14. Если wsprintf закомментировать, все нормально.
Объясните, пожалуйста, почему так происходит. Я ведь сделал pusha и popa.

Автор: Игорь1024 11.4.2011, 05:44
Возможно функция сама не убирает за собой в стеке.

Автор: Игорь1024 11.4.2011, 14:00
Прогоните через отладчик и понаблюдайте. Ольга в помощь.

Автор: sidd 11.4.2011, 23:02
После некоторых манипуляций заработало. Основной из которых была замена регистров на расширенные smile Спасибо за ответы.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)