Автор 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
...
ссылка
давно я с ассемблером не работал.. . а что показывает в итоге? или программа зацикливается?
Ассемблер. Команда cmp.
искать нужно полную документацию по intel assembler, например. вот кусок древней:
CMP
подробнее...
Реализовать на ассемблере циклы For и While.
for:
mov cx,i
m1: тело цикла
loop m1
while:
L2: cmp ax,0
jle L1
подробнее...
Вывод значения регистра на экран. ассемблер
Прежде всего, необходимо преобразовать число в строку.
А вам могу дать (не самую лучшую)
подробнее...
Ассемблер сдвиги. Как умножить любое число на 13 с помощью сдвигов в ассемблере
13 = (2 + 1) * 4 + 1 - меньше сдвигов (3 против 5), хотя это актуально только для процессоров,
подробнее...
как в ассемблере сравнивать числа
>В любом случае числа необходимо поместить в регистры процессора
не правда.
подробнее...
Нужна программа на Ассемблере [Assembler, SOS =D]
1ая. SASM IDE (NASM + макросы для вывода), на базе Linux, но с миним. переделками заработает в
подробнее...
Условие на ассемблере if
там не if только по флагам
Slava m
Искусственный Интеллект
(126516)
подробнее...
ассемблер
jg,jge,jl,jle - инструкции для операций перехода по результатом сравнения ЗНАКОВЫХ значений !
подробнее...
Помогите ответить на вопрос. Языки программирования. Программы. Виды трансляторов
Поконкретнее бы вопрос.
Компьютер понимает только двоичные коды. Нолики и единицы. И все!
подробнее...
С++, Чем отличаеться цикл for, от while?
По сути своей мало чем отличаются, нюансами - сильно отличаются.
while (условное выражение)
подробнее...
помогите с ассемблерной вставкой С++
const char* fmt = "%d ";
__asm {
mov eax, 2012
push eax
push fmt
подробнее...
Сортировка массива на ассемблере
>Сам пробовал, не получается.
Не верю. Пустой цикл попыткой не считается.
data
подробнее...
Деление отрицательного числа. Ассемблер
Денис Евдоченко, не обижайтесь, но здесь нужно просто правильно применить знаковое деление, а не
подробнее...