Объясните построчно пожалуйста - 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:

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

  1. В начале кода объявляется переменная str типа db (байт) с длиной 20 символов, заполненная пустыми символами ('').
  2. Затем идет сегмент кода, где используются регистры cx, cy, si, bx, ah, al, dl, dx.
  3. Переменная cx инициируется значением cx-1, возможно, это счетчик количества символов в строке ввода.
  4. В цикле cycl происходит проверка нажатия клавиши Enter (13), если это так, то текущий символ ввода добавляется в строку str и увеличивается индекс si для следующего символа.
  5. После ввода всех символов, происходит перевод строки с помощью функции 02h (перевод строки) и возврат каретки с помощью функции 02h (возврат каретки).
  6. Затем происходит проверка на значение переменной cx, если она не равна нулю, то происходит переход к функции 86h для создания задержки.
  7. Функция 86h принимает на вход AH=86h, CX=время задержки в микросекундах (002Dh=25000 микросекунд или 25 секунд), DX=младший байт времени задержки.
  8. Возвращается обратно в цикл cycl, где продолжается обработка введенных символов.
  9. Если значение cx равно нулю, то происходит переход к метке ex, где происходит очистка регистров и возврат в основную программу.

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


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

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

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