Подсчет длины строки - 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
Объяснение кода листинга программы
- Объявлены макросы и переменные:
dos_inp macro lbl, sz
- макрос для ввода строки с проверкой на длину_ib_ struc
- структура данных для хранения введенной строкиmax db sz
- поле структуры, содержащее максимальную длину строкиlen db ?
- поле структуры, в которое будет записана реальная длина введенной строкиbf db sz dup(?)
- поле структуры, в которое будет записана сама введенная строкаlbl _ib_ <>
- метка для обращения к структуре данныхbuf db 10 dup(?)
- буфер для ввода строкиreq db
Enter string:$`` - строка-запрос для ввода строки
- В блоке
.code
располагается основной код программы:mov ax, @data
- установка регистра AX на значение регистра данныхmov ds, ax
- установка сегмента данных на значение регистра AXmov es, ax
- установка сегмента стека на значение регистра AXmov 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 выполняет ввод строки с проверкой на длину и выводит на экран введенную строку и ее длину.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д