Несовсем понял

Тема в разделе "WASM.BEGINNERS", создана пользователем xANDREYx, 30 окт 2009.

  1. xANDREYx

    xANDREYx New Member

    Публикаций:
    0
    Регистрация:
    28 сен 2009
    Сообщения:
    6
    Я вот писал прогу, которая считает количество букв О в тексте. В приведенном ниже виде программа работает верно. Но столкнулся с одной проблемой.
    Если я вместо mov ax, 0 пишу xor ax,ax, то у меня к выводимому количеству букв О прибавляется 2. Если я после xor ax,ax напишу nop, то программа снова работает верно.
    Если же nop добавить после mov ax,0, то к выводимому количеству букв О прибавляется 1.
    Если в самом начале кода писать mov cx, 0, то программа работает верно во всех вариантах.
    При этом в отладчике работает всё перечисленное.Знакомый гонял у себя на машине этот код всё тоже самое.Внимание, вопрос [гонг ]. Почему так происходит?
    Код (Text):
    1. ORG 0x100
    2. M1:
    3. ADD CX,1
    4. MOV AH,8
    5. INT 0x21
    6. XOR AH,AH
    7. PUSH AX
    8. MOV AH,2
    9. MOV DL,AL
    10. INT 0x21
    11. CMP AL,0xD
    12. JNZ M1
    13. MOV AH,9
    14. MOV DX,S1
    15. INT 0x21
    16. [b]mov ax,0[/b]
    17. M2:
    18. POP BX
    19. CMP BL, 0x4F
    20. JNZ M3
    21. ADD AX,1
    22. M3:
    23. LOOP M2
    24. MOV SI,5
    25. M4:
    26. SUB SI,1
    27. MOV BX,10
    28. XOR DX,DX
    29. DIV BX
    30. ADD DL,0x30
    31. MOV [K2+SI],DL
    32. CMP AL,0
    33. JNZ M4
    34. MOV AH,9
    35. MOV DX,K2
    36. INT 0x21
    37. XOR AX,AX
    38. INT 0x16
    39. int 0x20
    40. S1: DB '',10,'$'  
    41. K2: DB '00000$'
     
  2. Y_Mur

    Y_Mur Active Member

    Публикаций:
    0
    Регистрация:
    6 сен 2006
    Сообщения:
    2.494
    xANDREYx
    Подсчёт определённых символов в тексте бурно обсуждался здесь:
    http://www.wasm.ru/forum/viewtopic.php?id=16358
     
  3. valterg

    valterg Active Member

    Публикаций:
    0
    Регистрация:
    19 авг 2004
    Сообщения:
    2.105
    Кто сказал что CX=0 на входе? У меня например 0С00 - в debug.com. Вот и тащит из стека не пойми чего. А влияние команд - стек слегка сдвигается - вот и считает по разному. Скорее всего еще 1-2 буквы O находит на стеке - возможно вообще в команды влазит.