1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

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

  1. Rolana

    Rolana New Member

    Репутация:
    0
    Регистрация:
    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">
    Код:
    .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
    Я что-то там пыталась переделывать. Например, чтобы подсчитывало длину строки... на этом и заглохло всё((
     
Загрузка...

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