cmp ассемблер



Автор Comewinter задал вопрос в разделе Другие языки и технологии

assembler tasm - в чем ошибка? и получил лучший ответ

Ответ от Миоко Таканава[гуру]
Код программы очень большой, поэтому привожу только фрагменты с ошибками.
...
Search:
    mov si, offset string+2; загрузка адреса начала введённой строки
;Чтобы адрес на каждой итерации цикла не устанавливался снова на
;начало строки, переход следует делать сюда, а не на Search (это причина зависания)
Search1:
;Символ имеет размер 1 байт, поэтому везде ax нужно заменить на al
    mov al,[si]; и не нужно делать замену сегмента
;Проверку на окончание строки следует делать до всех прочих проверок
    cmp al, 0Dh; Строка, введённая функцией 0Ah, оканчивается кодом 0Dh, а не "долларом"
    jne Tests ; Так нелогично приходится делать, потому что у процессора i8086 нет
    jmp Output ; близких условных переходов (near), только короткие (short +/- 127 байт)
; чтобы сделать красивее, можно или компилировать для процессора i80386 и старше, или
; использовать директиву jumps, тогда TASM, когда метка перехода расположена дальше
; 127 байт, сам будет заменять их (короткие переходы) на подобную пару jncc и jmp
Tests:
    cmp al, 30h
    je Zero
    cmp al, 31h
    je One
    cmp al, 32h
    je Two
    cmp al, 33h
    je Three
    cmp al, 34h
    je Four
    cmp al, 35h
    je Five
    cmp al, 36h
    je Six
    cmp al, 37h
    je Seven
    cmp al, 38h
    je Eight
    cmp al, 39h
    je Nine
; Выброшены проверки больше 9 и меньше 0, так как если выше ни одно условие равенства
; не выполнится, то всё равно выполнение программы дойдёт до этой точки
Output1:
    mov ah,2; вывод одного символа - это функция 2
    mov dl, [si]; и выводит она символ, записанный в регистр dl
    int 21h
;Вместо предыдущих 3 строк можно написать просто int 29h - вывод символа из al
    inc si
    jmp Search1; Переход должен быть на команду после загрузки адреса начала строки
Zero:
    mov ah,9
    mov dx, offset sk0
    int 21h
    inc si
    jmp Search1; Здесь тоже метку перехода нужно изменить. И так для каждой цифры
...
Output:
    mov ah, 9
    mov dx, offset enteris; Здесь нужен перевод строки
    int 21h
    lea dx,msg2
    mov ah,9
    int 21h
    mov al,string+1
    call Print
...
ссылка

Ответ от Петрина Александр[гуру]
давно я с ассемблером не работал.. . а что показывает в итоге? или программа зацикливается?

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: assembler tasm - в чем ошибка?
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*