Я вот писал прогу, которая считает количество букв О в тексте. В приведенном ниже виде программа работает верно. Но столкнулся с одной проблемой. Если я вместо mov ax, 0 пишу xor ax,ax, то у меня к выводимому количеству букв О прибавляется 2. Если я после xor ax,ax напишу nop, то программа снова работает верно. Если же nop добавить после mov ax,0, то к выводимому количеству букв О прибавляется 1. Если в самом начале кода писать mov cx, 0, то программа работает верно во всех вариантах. При этом в отладчике работает всё перечисленное.Знакомый гонял у себя на машине этот код всё тоже самое.Внимание, вопрос [гонг ]. Почему так происходит? Код (Text): ORG 0x100 M1: ADD CX,1 MOV AH,8 INT 0x21 XOR AH,AH PUSH AX MOV AH,2 MOV DL,AL INT 0x21 CMP AL,0xD JNZ M1 MOV AH,9 MOV DX,S1 INT 0x21 [b]mov ax,0[/b] M2: POP BX CMP BL, 0x4F JNZ M3 ADD AX,1 M3: LOOP M2 MOV SI,5 M4: SUB SI,1 MOV BX,10 XOR DX,DX DIV BX ADD DL,0x30 MOV [K2+SI],DL CMP AL,0 JNZ M4 MOV AH,9 MOV DX,K2 INT 0x21 XOR AX,AX INT 0x16 int 0x20 S1: DB '',10,'$' K2: DB '00000$'
xANDREYx Подсчёт определённых символов в тексте бурно обсуждался здесь: http://www.wasm.ru/forum/viewtopic.php?id=16358
Кто сказал что CX=0 на входе? У меня например 0С00 - в debug.com. Вот и тащит из стека не пойми чего. А влияние команд - стек слегка сдвигается - вот и считает по разному. Скорее всего еще 1-2 буквы O находит на стеке - возможно вообще в команды влазит.