Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.11.2018, 15:38   #1
heylo
Новичок
Джуниор
 
Регистрация: 17.11.2018
Сообщений: 1
Восклицание Задание по Assembler, NASM

Всем привет, помогите пожалуйста сделать задание следующее задание:

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

Пока что у меня есть только это:


Код:
org 100h
section .text

start:

call zapisz1parametr
call zapisz2parametr
mov cx,[text + 1]  	; получаем длину 
xor ch,ch
mov di,1

petla:
cmp al,[text+1+di]
je result
inc di
loop petla

result:
petla2:
push dx
mov dl,[text+1+di]
mov ah,01h
int 21h
pop dx
inc di
loop petla2

zapisz2parametr:  	; запись 2 параметра
mov ah,01h    		
int 21h
ret

zapisz1parametr:  	; запись 1 параметра
mov ah,0ah 		
mov dx,text 		
int 21h
ret

exit:
mov ax,4c00h 		; выход
int 21

section .data

text db 20  		
times 22 db "$"
Пожалуйста, оформляйте Ваш код согласно правилам.

Но это не работает как должно, надо еще добавить стек и выход по клавише backspase.

Последний раз редактировалось Вадим Мошев; 17.11.2018 в 15:53.
heylo вне форума Ответить с цитированием
Старый 18.11.2018, 10:49   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Цитата:
Сообщение от heylo Посмотреть сообщение
и выход по клавише backspase.
..если нужно выходить по 'Backspace', значит нужен посимвольный ввод и проверка на ASCII-код этой клавиши. Таблица кодов надеюсь имеется? При нажатии на 'Backspace' клава возвращает в AL код 08h, соответственно ввод средствами DOS можно организовать так:
Код:
;fasm-code
;----------
org  100h
jmp  start 

buff    db  128 dup('$')    ; буфер для приёма строки
size    db  0               ; тут будет длина ввода

start:  mov   di,buff       ; указатель на приёмник для STOSB
        mov   ah,1          ; fn.DOS - ввод с эхом!
@inp:   int   21h           ; (все fn.ввода возвращают символ в AL)
        cmp   al,8          ; это Backspace ???
        je    @stop         ; если да..
        stosb               ; иначе: запомнить его в буфере
        inc   byte[size]    ; длинна строки +1.
        jmp   @inp          ; на повтор..

@stop:  ret                 ; выход в DOS!
А дальше непонятно, что конкретно тебе нужно сделать.. стек там и прочее..
Если нужна отдельная функция с передачей ей аргументов через стек, то делай адресацию через BP, например так (первый аргумент будет по смещению BP+4, т.к. в BP+0 будет лежать адрес-возврата, а в BP+2 - сам регистр BP):
Код:
testFunc:
        push  bp
        mov   bp,sp
        mov   ax,[bp+4]     ; аргумент(1)
        mov   bx,[bp+6]     ; аргумент(2) если есть
;[...]                      ; тут делаешь что-надо..
        pop   bp            ; восстановить стек
retn                        ; выход из функции!
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сумма и произведение элементов массива (Assembler, NASM) ploopio Помощь студентам 0 22.06.2017 14:30
Assembler NASM, буду благодарен за помощь pl0t6i3 Помощь студентам 2 07.06.2015 15:35
Подсчет элементов массива. Assembler NASM IL_89 Помощь студентам 2 01.10.2013 15:44
Линии или прямоугольники на NASM, assembler Lexeres Помощь студентам 0 26.03.2011 11:25