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

Форум программистов: 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 сообщение ] 


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

Зарегистрированные пользователи: Google [Bot]


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

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