Имеется строка символов, содержащая не только латинские буквы, но и цифры. Заменить все буквы номером символа - 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

Объяснение кода листинга программы

В этом коде выполняется следующая задача: считывание строки символов, включая цифры, и вывод на экран этой же строки, но с заменёнными цифровыми символами на соответствующие числа. Код можно разделить на следующие части:

  1. Создание СОМ-файла.
  2. Объявление переменных и их значений:
    • Строка символов, включая цифры: str = '1ab2W8bha0',10,13,'$'.
    • Счётчик: cx.
    • Флаг окончания строки: bx.
    • Флаг начала вывода чисел: oi2.
    • Флаг, определяющий, является ли текущий символ цифрой: m1.
    • Переменная для хранения последней цифры: dx.
    • Основание системы счисления: bx = 10.
  3. Основной цикл обработки строки:
    • Чтение следующего символа: m2.
    • Если символ является цифрой, то он выводится на экран с добавлением соответствующего числа: jmp short m1.
    • Если символ не является цифрой, то счётчик выводится на экран, и из стека выталкивается последняя цифра: jmp short oi3.
    • Если счётчик равен нулю, то в стеке на его место кладётся единица, и из стека выталкивается последняя цифра: jmp short oi2.
    • Если счётчик не равен нулю, то он уменьшается на единицу, и цикл повторяется.
  4. Вывод чисел:
    • Если счётчик не равен нулю, то в стеке на его место кладётся единица, и из стека выталкивается последняя цифра: oi3.
    • Если счётчик равен нулю, то в стеке на его место кладётся ноль, и из стека выталкивается последняя цифра: jmp short oi2.
    • Если в стеке не осталось чисел, то цикл повторяется.
  5. Код завершения программы:
    • Вывод числа, ожидающего нажатия клавиши: xor ax,ax.
    • Вывод символа: int 16h.
    • Завершение программы: ret.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.889 из 5
Похожие ответы