Объясните построчно пожалуйста - Assembler
Формулировка задачи:
.data str db dup 20('') .code dec cx cycl: mov ah,01h int 21h cmp al,13 je @2 mov str[si],al inc si loop cycl @2: mov ah,02h mov dl,0dh int 21h mov ah,02h mov dl,0ah int 21h mov bx,si xor si,si xor ax,ax @1: cmp bx,si je ex mov ah,86h mov CX,002Dh mov DX,9000h int 15h mov dl,str[si] mov ah,02h int 21h inc si jmp @1 ex:
Решение задачи: «Объясните построчно пожалуйста»
textual
Листинг программы
.data str db dup 20('') .code dec cx <-- сх=сх-1 cycl: mov ah,01h int 21h cmp al,13 <-- нажали на Enter? je @2 <-- если да, тогда mov str[si],al <-- очередной символ в строку для ввода inc si <-- адрес следующего символа loop cycl <-- циклимся пока CX<>0 @2: mov ah,02h mov dl,0dh <-- перевод строки int 21h mov ah,02h mov dl,0ah int 21h <-- переход в начало строки mov bx,si xor si,si xor ax,ax @1: cmp bx,si je ex mov ah,86h mov CX,002Dh mov DX,9000h int 15h Функция 86h специально предназначена для формирования задержек. Она позволяет определять время задержки в микросекундах, что достаточно удобно для многих задач. Во время выполнения задержки разрешены прерывания. ;Формат вызова функции: ;На входе: AH = 86h; ; CX = старший байт времени задержки, ; задается в микросекундах ; DX = младший байт времени задержки. mov dl,str[si] mov ah,02h int 21h inc si jmp @1 ex:
Объяснение кода листинга программы
- В начале кода объявляется переменная
str
типаdb
(байт) с длиной 20 символов, заполненная пустыми символами (''). - Затем идет сегмент кода, где используются регистры
cx
,cy
,si
,bx
,ah
,al
,dl
,dx
. - Переменная
cx
инициируется значениемcx-1
, возможно, это счетчик количества символов в строке ввода. - В цикле
cycl
происходит проверка нажатия клавиши Enter (13), если это так, то текущий символ ввода добавляется в строкуstr
и увеличивается индексsi
для следующего символа. - После ввода всех символов, происходит перевод строки с помощью функции 02h (перевод строки) и возврат каретки с помощью функции 02h (возврат каретки).
- Затем происходит проверка на значение переменной
cx
, если она не равна нулю, то происходит переход к функции 86h для создания задержки. - Функция 86h принимает на вход AH=86h, CX=время задержки в микросекундах (002Dh=25000 микросекунд или 25 секунд), DX=младший байт времени задержки.
- Возвращается обратно в цикл
cycl
, где продолжается обработка введенных символов. - Если значение
cx
равно нулю, то происходит переход к меткеex
, где происходит очистка регистров и возврат в основную программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д