Assembler. Обработка Строковых Переменных

Тема в разделе "Другие задачи", создана пользователем Rolana, 13 дек 2013.

  1. Rolana

    Rolana New Member

    Регистрация:
    29 ноя 2013
    Сообщения:
    4
    Симпатии:
    0
    Ооооочень нужна помощь. У нас Ассемблер изучается ознакомительно, а лабораторные сдавать надо.

    Задание: Ввести строку текста. Проверить, является ли этот текст гиперссылкой в формате «http:\\www.abc.ua». Если да, то напечатать сообщение: «Это гиперссылка» в другом случае: «Это не гиперссылка».

    Был дан пример работы со строковыми переменными:

    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Код</div></div><div class="sp-body"><div class="sp-content">
    Код (Text):
    .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
    Я что-то там пыталась переделывать. Например, чтобы подсчитывало длину строки... на этом и заглохло всё((
     
Загрузка...

Поделиться этой страницей