Тема: Потрібна допомога! Обробка рядкових змінних
В нас Асемблер вивчається з ціллю ознайомлення, але лабораторні здавати потрібно.
Завдання: Ввести рядок тексту . Перевірити , чи є цей текст гіперпосиланням у форматі « http://www.abc.ua ». Якщо так , то надрукувати повідомлення : «Це гіперпосилання » в іншому випадку : «Це не гіперпосилання ».
Було дано приклад роботи із строковими змінними:
.model small
.stack 100h
.data
string db 80 dup(?)
promt db 0Dh,0Ah,'Enter password: $'
all db 0Dh,0Ah,'That is all$'
ok db 0Dh,0Ah,'Working!!! $'
password db 'pass$'
pass_len dw 3
.code
start:
mov ax,@data
mov ds,ax ;В АХ-адреса початку сегмента даних
@beg1:
mov ah,09h ;Вивiд запиту на введення пароля
mov dx,offset promt ;Адреса запиту
inc dx
int 21h
;Введемо пароль
mov bx,0 ;iнiцiалiзацiя iндексацiї введення
lea si, string
@pass:
mov ah,08h ;Функцiя введення символу в AL без ехо
int 21h
cmp al,13 ;<Enter> ?
je @compare ;Так, на порiвняння
mov [si],al
mov ah,02
mov dl,'*' ;Запишемо на екран *
int 21h
inc si
jmp @pass ;Повторювати
;Порiвняння введеного пароля з дiйсним (порiвняння рядкiв)
@compare:
push ds ;Встановити ES на сегмент даних
pop es
lea si,string ;DS:SI- початок string
inc si
lea di,password ;ES:DI- початок password
inc di
cld ;DF=0- перегляд вперед
mov cx,pass_len ;Встановити лiчильник порiвняння
repe cmpsb ;Порiвнювати, поки CX<>0 i ZF=1 (тобто повторювати
;поки символи двох рядкiв спiвпадають, але не бiльш CX раз)
jne @err ;Рядки не рiвнi
;Виведення повiдомлення ОК, пiдтверджуючого правильнiсть пароля
mov ah,09h
mov dx,offset OK
inc dx
int 21h
jmp @end1
@err:
jmp @beg1 ;Повторити введення пароля
@end1:
mov ah,09h
mov dx,offset All
inc dx
int 21h
jmp @beg1
MOV AH,4ch ;DOS-функцiя завершення роботи програми
INT 21h ;Виклик переривання DOS
start end
end
Я щось там намагалася переробляти. Наприклад , щоб підраховувало довжину рядка ... на цьому і заглохло все ( (