Посчитать количество цифр в строке - Assembler

Узнай цену своей работы

Формулировка задачи:

Помогите с ассемблером! Как посчитать количество цифр в строке? 3 день сижу... ничего не получается!

Решение задачи: «Посчитать количество цифр в строке»

textual
Листинг программы
.model tiny
 
.code
org 100h
start:
    lea si,msg
    xor bx,bx
    mov cx,len
    cntdig:
    lodsb
 
    sub al,'0'
    cmp al,9
    ja skip
 
    inc bx
 
    skip:
    loop cntdig
 
    int 20h
 
msg db 's1t2r3i46n5g7'
len = $-msg
end start

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

.model tiny — это указание компилятору, что код написан для 8-битного процессора, в котором используется небольшой стек и регистры .code — это указание компилятору, что здесь находится код программы org 100h — это указание начальной точки выполнения кода в памяти (100h — это 100 байт от начала памяти) start: — это точка входа в программу lea si,msg — это команда загрузки в регистр SI адреса строки msg xor bx,bx — это команда инициализации регистра BX значением 0 (BX — это один из регистров общего назначения, который может использоваться как индексный регистр для обращения к памяти) mov cx,len — это команда загрузки в регистр CX значения длины строки (CX — это другой регистр общего назначения, который может использоваться как счётчик) cntdig: — это начало цикла, который будет выполняться до тех пор, пока не будут выполнены все условия lodsb — это команда загрузки в регистр AL очередного символа из строки msg (отсюда следует, что msg должна быть в сегменте данных) sub al,'0' — это команда вычитания из регистра AL значения '0' (которое является ASCII-значением символа, а в десятичной системе счисления этот символ — цифра 1) cmp al,9 - это команда сравнения значения регистра AL со значением 9 (в десятичной системе счисления это цифра 9) ja skip — если значение регистра AL больше или равно 9, то происходит переход к команде skip inc bx — если значение регистра AL меньше 9, то происходит увеличение значения регистра BX на 1 skip: — это команда, которая выполняется, если значение регистра AL меньше 9 loop cntdig — это команда перехода к началу цикла cntdig (этот цикл будет выполняться до тех пор, пока не будут выполнены все условия) int 20h — это команда перехода в защищённый режим и завершения работы программы (при этом возвращается управление операционной системе) msg db 's1t2r3i46n5g7' — это строка-сообщение, которую программа выводит на экран (в сегменте данных) len = $-msg — это выражение, которое вычисляет длину строки msg (в сегменте данных) end start — это конец программы

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


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

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

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