Подсчет длины строки - Assembler

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

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

Суть задачи:Ввести с клавиатуры строку, вкоторой содрежится символов не больше 10.Определить длину строки.
model small
.stack 100h
.data
buf label byte
stroka db 'Stroka string:$'
.code
Start: lea dx, stroka
       mov ah,9                          ;приглашение ввести строку
	   int 21h
	   lea dx, buf
	   mov ah, 0ah                       ;вводим строку
	   int 21h
	   mov eax, offset stroka
next_sym: mov eax, 0                     ;это счетчик длины строки
	   mov bl, byte ptr[eax+ecx]         ;загрузка символа из строки в регистр bl
	   test bl, bl
	   jz end_count
	   inc ecx                           ; прибавляем к счетчику единицу
	   jmp next_sym
end_count: 
	   mov eax, ecx 
END START

Решение задачи: «Подсчет длины строки»

textual
Листинг программы
.model  small
.386
dos_inp macro   lbl, sz
_ib_    struc  
max db  sz      ; наибольшая длина строки
len db  ?               ; сюда вернется настоящая длина
bf  db  sz dup(?)   ; тут будет то, что ввели
_ib_    ends            
lbl _ib_ <>
endm
.stack  
.data
req db  'Enter string:$'
dos_inp buf, 10
.code   
start:  
    mov ax, @data
    mov ds, ax
    mov es, ax
; Вывод на экран 
    mov     ah, 09h
    lea     dx, req
    int     21h
; ввод строки
    mov ah, 0Ah
    lea dx, buf
    int 21h
;;
    mov al, byte ptr buf.len
; Вывод на экран 
    or  al, 30h
    int     29h
; выход
    mov ah, 4Ch
    int 21h
    end start

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

  1. Объявлены макросы и переменные:
    • dos_inp macro lbl, sz - макрос для ввода строки с проверкой на длину
    • _ib_ struc - структура данных для хранения введенной строки
    • max db sz - поле структуры, содержащее максимальную длину строки
    • len db ? - поле структуры, в которое будет записана реальная длина введенной строки
    • bf db sz dup(?) - поле структуры, в которое будет записана сама введенная строка
    • lbl _ib_ <> - метка для обращения к структуре данных
    • buf db 10 dup(?) - буфер для ввода строки
    • req dbEnter string:$`` - строка-запрос для ввода строки
  2. В блоке .code располагается основной код программы:
    • mov ax, @data - установка регистра AX на значение регистра данных
    • mov ds, ax - установка сегмента данных на значение регистра AX
    • mov es, ax - установка сегмента стека на значение регистра AX
    • mov ah, 09h - установка регистра AH на значение 09h (функция вывода на экран)
    • lea dx, req - загрузка в регистр DX адреса строки-запроса
    • int 21h - вызов функции ввода/вывода
    • mov ah, 0Ah - установка регистра AH на значение 0Ah (функция ввода строки)
    • lea dx, buf - загрузка в регистр DX адреса буфера для ввода строки
    • int 21h - вызов функции ввода/вывода
    • mov al, byte ptr buf.len - загрузка в регистр AL значения поля len структуры _ib_
    • or al, 30h - перевод значения регистра AL в верхний регистр
    • int 29h - вызов функции вывода на экран
    • mov ah, 4Ch - установка регистра AH на значение 4Ch (функция завершения работы программы)
    • int 21h - вызов функции ввода/вывода Таким образом, данный код на языке Assembler выполняет ввод строки с проверкой на длину и выводит на экран введенную строку и ее длину.

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


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

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

6   голосов , оценка 3.833 из 5