→ Для вступления в общество новичков и профессионалов программирования, пожалуйста нажмите здесь ...

Форум программистов: C++, Basic, Delphi, Pascal, JavaScript
Логин: Пароль:
Запомнить?  
@Mail.ru



Начать новую тему Ответить на тему  [ 1 сообщение ] 
Перевод курсора на заданную позицию в даном алгоритме 
Автор Сообщение
Начинающий

Регистрация: 05.01.2010
Сообщения: 2
Языки:
Специальность:

Репутация: 0 [ ? ]
 Перевод курсора на заданную позицию в даном алгоритме
Здраствуйте, уважаемые форумчане !

Вот сделала небольшой курсовой проэкт на 90 %.

Задание:

Найти индексы заданого символа в строке. Строку и символ пользователь вводит сам. В случае успешного поиска установить курсор на позицию посдледнего вхождения искомого символа.


Есть код программы, осуществляющей поиск.Компилятор -TASM. Вверху макрос,что я нашла в интернете, для установки курсора в определенное место экрана. Он закоментирован,т.к. не работает(каретка начинает бегать по экрану). Это не единственный способ, который я пыталась сделать для выполнения этой задачи. Ни один не хочет работать.Возможно, я запуталась с регистрами, но времени почти и нету ,чтобы разобратся.((

может у кого была похожая задача или человек просто понимает Асемблер. очень прошу -помогите! Преподаватель дул курсач перед детальным изучением ассемблера и поэтому очень тяжело разбиратся.

Код:

;kursor macro
;mov ah, 02h
;mov cur,bx
;mov bh, 0
;mov dh, 1 {строка}
;mov dl, cur {столбец}
;int 10h
;endm




.model small
.stack 100h
.data
stroka db 80 dup(?),'$'
symb db ?,' ','$' ; можно и не выделять память для символа
msg_inp db 0ah,0dh,"Vvedite stroku:",0ah,0dh,"$"
msg_in db 0ah,0dh,"Vvedite simvol:",0ah,0dh,"$"
msg db 0ah,0dh,"Simvol ","$"
msg1 db "nayden! Ego index - ","$"
msg_err db "ne nayden.","$"
c10 dw 10
curlen dw ?
.code
start:

mov ax,@data
mov ds,ax
lea dx,msg_inp ; вывод msg_inp
mov ah,09h
int 21h
xor bx,bx ; в bx - индекс вводимого символа

input_loop:
mov ah,01h ; считываем символ
int 21h
cmp al,13 ; если это enter
je for_find ; то конец ввода
mov stroka[bx],al ; иначе записываем символ в строку
cmp bx,80 ; если ввели 80 символов
je for_find ; то конец ввода
inc bx ; увеличиваем bx
jmp input_loop
for_find:
lea dx,msg_in ; вывод msg_in
mov ah,09h
int 21h
mov ah,01h ; ввод нужного символа
int 21h
mov byte ptr symb,al ; сохраняем его в symb
mov cx,bx ; в cx - длина строки
mov curlen,bx
xor bx,bx ; bx - индекс элемента
mov ah,byte ptr symb ; в ah - нужный символ

er: cmp ah,stroka[bx] ; сравниваем текущий элемент с нужным символом
je find ; если совпадают, то jmp на found
jne iter


find:
cmp ah,stroka[bx] ; сравниваем текущий элемент с нужным символом
je vuvod ; если совпадают, то jmp на found
jne next
vuvod :

found: ; если найден символ
lea dx,msg ; вывод msg
mov ah,09h
int 21h
lea dx,symb ; вывод самого символа
int 21h
lea dx,msg1 ; вывод msg1
int 21h
mov ax,bx ; сохраняем индекс в ax
xor cx,cx ; cx - счетчик цифр
number_to_string:
xor dx,dx ; подготовка к делению
div c10 ; деление
add dx,30h ; в dx - ASCII-код остатка от деления
push dx ; сохраняем его в стеке
inc cx ; инкремент счетчика цифр
cmp ax,0 ; цикл, пока частное ненулевое
jne number_to_string
out_index_loop: ; цикл вывода индекса
pop dx ; извелекаем очередную цифру
mov ah,02h ; выводим ее на экран
int 21h
loop out_index_loop
xor cx,cx
mov cx,curlen
mov ah,byte ptr symb ; в ah - нужный символ
next:

inc bx
cmp bx,cx
jne find ;цикл повторяется cx раз
call end_program ; завершить программу

iter:
inc bx
cmp bx,cx
jne er ;цикл повторяется cx раз

lea dx,msg ; если символ не найден, то
mov ah,09h ; вывод msg
int 21h
lea dx,symb ; вывод самого символа
int 21h
lea dx,msg_err ; вывод msg_err
int 21h
call end_program ; завершить программу

end_program proc near
mov ah,4ch
int 21h
end_program endp

end start

Код сильно нелогичен, но работает.

Повторю просьбу: Помогите установить курсор на последнее вхождение символа в строку! буду очень благодарна не за пример,а за функцию конкретно в этой программе! Которая будет работать ))

Заранее спасибо! [smile]


05.01.2010 14:55
Профиль Отправить email
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 


Кто сейчас на конференции

Зарегистрированные пользователи: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
cron
© 2013 «Форум программистов Украины»