Имеется строка символов, содержащая не только латинские буквы, но и цифры. Заменить все буквы номером символа - Assembler
Формулировка задачи:
Имеется строка символов, содержащая не только латинские буквы, но и цифры. Заменить все буквы номером символа в строке.
Решение задачи: «Имеется строка символов, содержащая не только латинские буквы, но и цифры. Заменить все буквы номером символа»
textual
Листинг программы
;TASM, COM-файл ; ;Создание СОМ-файла ;tasm.exe /m filename.asm ;tlink.exe /t /x filename.obj ; .model tiny .code .386 ORG 100h START: mov ah,9 ;вывод строки lea dx,str int 21h mov si,dx xor cx,cx ;сбросить счетчик m2: lodsb cmp al,10 ;конец строки? jz short exit inc cx ;увеличить счетчик ;цифра или нет sub al,30h cmp al,9 ja short m1 ;цифра, вывод на экран add al,30h int 29h jmp short m2 ;на следующий символ ;не цифра, вывод счетчика на экран m1: push cx mov ax,cx ;счетчик xor cx,cx mov bx,10 ; основание сс. 10 для десятеричной и т.п. oi2: xor dx,dx div bx ; Делим число на основание сс. В остатке получается последняя цифра. ; Сразу выводить её нельзя, поэтому сохраним её в стэке. push dx inc cx ; А с частным повторяем то же самое, отделяя от него очередную ; цифру справа, пока не останется ноль, что значит, что дальше ; слева только нули. test ax,ax jnz short oi2 ; Теперь приступим к выводу. oi3: pop ax add al,'0' int 29h ; Повторим ровно столько раз, сколько цифр насчитали. loop oi3 pop cx jmp short m2 ;на следующий символ строки exit: xor ax,ax ;ждать нажатой клавиши int 16h ret ;завершить программу str db '1ab2W8bha0',10,13,'$' end start
Объяснение кода листинга программы
В этом коде выполняется следующая задача: считывание строки символов, включая цифры, и вывод на экран этой же строки, но с заменёнными цифровыми символами на соответствующие числа. Код можно разделить на следующие части:
- Создание СОМ-файла.
- Объявление переменных и их значений:
- Строка символов, включая цифры: str = '1ab2W8bha0',10,13,'$'.
- Счётчик: cx.
- Флаг окончания строки: bx.
- Флаг начала вывода чисел: oi2.
- Флаг, определяющий, является ли текущий символ цифрой: m1.
- Переменная для хранения последней цифры: dx.
- Основание системы счисления: bx = 10.
- Основной цикл обработки строки:
- Чтение следующего символа: m2.
- Если символ является цифрой, то он выводится на экран с добавлением соответствующего числа: jmp short m1.
- Если символ не является цифрой, то счётчик выводится на экран, и из стека выталкивается последняя цифра: jmp short oi3.
- Если счётчик равен нулю, то в стеке на его место кладётся единица, и из стека выталкивается последняя цифра: jmp short oi2.
- Если счётчик не равен нулю, то он уменьшается на единицу, и цикл повторяется.
- Вывод чисел:
- Если счётчик не равен нулю, то в стеке на его место кладётся единица, и из стека выталкивается последняя цифра: oi3.
- Если счётчик равен нулю, то в стеке на его место кладётся ноль, и из стека выталкивается последняя цифра: jmp short oi2.
- Если в стеке не осталось чисел, то цикл повторяется.
- Код завершения программы:
- Вывод числа, ожидающего нажатия клавиши: xor ax,ax.
- Вывод символа: int 16h.
- Завершение программы: ret.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д