Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Работа со строками (assembler)

38K
02 июня 2008 года
Afrodita
1 / / 02.06.2008
Имеется строка-предложение из нескольких слов. Написать процедуру осуществляющую запись тех же строк словами переписанными с конца наперед. Дополнительных массивов не использовать. Осуществить вывод исходной строки и сформированной.
40K
10 июня 2008 года
axeman
1 / / 10.06.2008
выводишь строку в первом случае с df=0 , во втором df=1
37K
11 июня 2008 года
Sharaevskiy Vitaliy
11 / / 06.05.2008
Если заданием есть просто вывести на дисплэй строку в нормальном виде а потом ее же, но задом-наперед и результат такого переворачивания никуда не писать (в задании сказано не использовать дополнительных массивов), то можно воспользоваться такой процедурой:

INVERSE_DISPLAY_LINE PROC NEAR
; перед вызовом процедуры в стек занести адрес начала строки

; "вытягивавем" из стека адрес начала строки
PUSHA ; сохраняем все РОН в стеке
MOV BP, SP ; BP=указателю стека
MOV BX, [BP+18] ; извлекаем адрес начала строки (до него 8-мь РОН+адрес возврата=9 слов)
MOV CX, BX ; сохранение адреса начала строки в СХ

; вывод на дисплэй строки в нормальном виде
MOV DX, CX ; DX=адресу начала строки
MOV AH, 09h ; AH=номеру ф-ции "вывод строки на дисплэй"
INT 021h ; вызов прерывания

; переход на новую строку
MOV AH, 02h ; AH=номеру ф-ции "вывод символа на дисплэй"
MOV DL, 0AH ; код символа перевода строки
INT 021h
MOV AH, 02h ; AH=номеру ф-ции "вывод символа на дисплэй"
MOV DL, 0DH ; код символа возврат каретки
INT 021h

; вычисление адреса конца строки
SEARCH_END_LINE_ADDR:
MOV AL, [BX] ; загрузка очередного символа сроки
CMP AL, '$' ; AX=='$' ??
JE CONTINUE_SEARCH ; да - прекращаем поиск
INC BX ; нет - BX=BX+1
JMP SHORT SEARCH_END_LINE_ADDR
CONTINUE_SEARCH:
DEC BX ; ВХ=ВХ-1, так как ВХ указывал на символ конца строки

; вывод строки "задом-наперед" на дисплэй
INVERSE_DISP_LINE:
MOV AH, 02h ; AH=номеру ф-ции "вывод символа на дисплэй"
MOV DL, [BX] ; DX=ASCII-коду очередного выводимого символа
INT 021h ; вызов прерывания
CMP BX, CX ; BX=адресу начала строки??
JE END_INV_DISP_LINE ; да - прекращаем вывод
DEC BX ; нет - BX=BX+1
JMP SHORT INVERSE_DISP_LINE
END_INV_DISP_LINE:

POPA ; восстановления всех РОН

RET 2 ; возврат из процедуры и удаление слова с адресом строки из стека

INVERSE_DISPLAY_LINE ENDP

Можно, конечно, воспользоваться прямой пересылкой строки в видеопамять, но ИМХО прерывание удобнее
37K
16 июня 2008 года
airyashov
18 / / 09.06.2008
Помоему все ответы не верны, задание не строку наоборот а отдельные слова.
"ab cde"
"ba edc"
а, не
"edc ba"
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог