![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 05.01.2010
Сообщений: 4
|
![]()
Здраствуйте, уважаемые форумчане !
Вот сделала небольшой курсовой проэкт на 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 Код сильно нелогичен, но работает. Повторю просьбу: Помогите установить курсор на последнее вхождение символа в строку! буду очень благодарна не за пример,а за функцию конкретно в этой программе! Которая будет работать )) Заранее спасибо! ![]() |
![]() |
![]() |
![]() |
#2 |
equ asm
Участник клуба
Регистрация: 02.05.2009
Сообщений: 1,605
|
![]()
не меняя логику программы :
Код:
|
![]() |
![]() |
![]() |
#3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
ну, позволю себе опубликовать свой вариант...
Код:
p.p.s. кстати, Maemi_IT, Вы знаете, что в Вашем коде найденные индексы считаются (и выводятся) от нуля?... |
![]() |
![]() |
![]() |
#4 |
Регистрация: 05.01.2010
Сообщений: 4
|
![]()
Знаю, индексация с нуля. Это не так важно! Спасибо за помощь! надеюсь,получится )
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 05.01.2010
Сообщений: 4
|
![]()
Огромное спасибо вам, великие программисты! )))
Все работает как надо! Сажусь писать записку ))) |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Помогите с переводом HexToBin | fedrom | Общие вопросы C/C++ | 7 | 24.01.2015 17:21 |
Помогите с переводом! | Nattallia | Свободное общение | 1 | 20.09.2009 18:24 |
Помогите пожалуйста с переводом Delphi на C++ | Jupiter | Помощь студентам | 0 | 07.07.2009 23:33 |
как рисовать график в режиме реального времени? помогите пожалуйста | Master_S7 | Общие вопросы Delphi | 2 | 05.06.2009 22:04 |
Помогите с переводом формулы | SYL@R | Помощь студентам | 1 | 25.11.2008 08:37 |