|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Сен 30, 2003 17:49:22 Приветствую! Помогите написАть программу, нужно сдавать, а я вообще дуб дубом в АСМе, тоесть не совсем, но дуб:)) Фишка такая: например вводятся две строки: 1строка) .k, 2строка) kukareku. mama sjela kabana. Нужно вывести строку uareu mama sjela abana Тоесть вывести все символы строки кроме тех, что были заданны в первой строке. Поможите пожалуйста!!! ОЧЕНЬ НУЖНО!:( |
|
|
Дата: Сен 30, 2003 19:03:53 Мдя, видимо никого нету:) Ответьте тогда на следующие вопросы: 1)
read: mov ah, 01h ;;zadajom funkciju dlia chtenija posimvolno
int 21h ;;scitivajem odnu bukvu
cmp al, 0dh ;;sravnivajem scitivajemij simvol(on pojavitsia v registre al) s simvolom klavishi ENTER
jz saveandgo ;;jesli enter to perehodim na metku saveandgo
mov cs:[di], al ;;inache zapihivajem etot simvol v nash bufer
inc di ;;i uvelichivajem index bufera stobi pisAt' dalshe simvoli
jmp short read
У меня сейчас в буфере есть эта строка. Как считать тпере эти символы по одному из неё? 2)Какой код пробела передавать нужно? |
|
|
Дата: Сен 30, 2003 19:07:50 · Поправил: KiNDeR XpoHuKC octa@bk.ru - Описание вопроса и сроки решения сюда. И под какую ось это нужно: Win32 или DOS? |
|
|
Дата: Сен 30, 2003 19:24:47 Проблема в том, что отплатить никак не смогу:) Эта програмка нужна для практики на завтра:) тоесть я в обломе, если из Литвы то пак пива поставлю без проблем. Постараюсь сам справится! Если есть желание помочь, задание - первое сообщение, или ответь на вопросы плз. Спасибо. |
|
|
Дата: Сен 30, 2003 19:47:32 XpoHuKC Пиши на мыло, все бесплатно... |
|
|
Дата: Сен 30, 2003 19:49:33 · Поправил: KiNDeR Ладно давай свое мыло, и через часок, а то и меньше, вышлю или здесь запостю... Под какую ось WIN или DOS? |
|
|
Дата: Сен 30, 2003 19:56:20 technos@takas.lt ICQ: 104266389 (Nurriol) Огромное спасибо что поможешь!!! Уже запарился:( |
|
|
Дата: Сен 30, 2003 20:03:05while(not end of string)
{
if(letter != 'k')
puts(letter);
} |
|
|
Дата: Сен 30, 2003 20:12:55 · Поправил: XpoHuKC забыл сказать, всё это дело в ТАСМе и под ДОС. |
|
|
Дата: Сен 30, 2003 21:10:56 XpoHuKC Слушай, нет у меня времени. Рассмотри кусок кода в верху. Тебе не нужно ни создавать буфер, ни что-то туда писать. Работаешь в цикле до конца строки. Встретил букву. Не 'k'? Напечатать на экран. Что тут думать? |
|
|
Дата: Сен 30, 2003 21:21:00 · Поправил: Asterix [ volodya: Не 'k'? Напечатать на экран. Что тут думать?] Удалить из строки ;-))) XpoHuKC Фиг его знает как написать это под DOS. Но решается это приблизительно так, копируешь строку из одного буфера в другой побайтно, можно копировать в этот же буфер, встретив символ "k" не копируешь а переходишь к следующему символу, и так до конца строки, т.е. до 0, потом полученную строку вывести на экран :-) |
|
|
Дата: Сен 30, 2003 22:09:21
;
;
; Компиляция:
; tasm.exe str.asm
; tlink.exe /x/t str.obj
;
;
.MODEL TINY
.CODE
.386 ; Разрешаем инструкции 386 процессора.
ORG 100h ; COM программа.
;
;
_start:
mov ax,3
int 10h ; Очистим экран.
mov dx,offset mess1
mov ah,09h
int 21h ; Выведем приглашение ко вводу 1 строки.
mov dx,offset Buff1
mov ah,0Ah
int 21h ; Считаем 1 строку символов в буфер.
mov dx,offset crlf
mov ah,09h
int 21h ; Перевод строки.
mov dx,offset mess2
mov ah,09h
int 21h ; Выведем приглашение ко вводу 2 строки.
mov dx,offset Buff2
mov ah,0Ah
int 21h ; Считаем 2 строку символов в буфер.
xor ax,ax
xor cx,cx
xor dx,dx
mov dl,l_Buff1 ; В DX длинна 1 строки(для организации большого цикла)
mov cl,l_Buff2 ; В CX длинна 2 строки(для организации малого цикла)
mov si,offset StrBuff1 ; В SI адрес 1 строки.
; Большой цикл
scan_str1:
mov di,offset StrBuff2 ; В DI адрес 2 строки.
mov bx,offset TmpBuff ; В BX адрес временной строки.
mov ah,byte ptr[si] ; В AH символ из 1 строки
test ah,ah ; Если буфер не содержит
jz _exit_process ; символов? то выходим.
; Малый цикл
scan_str2:
mov al,byte ptr[di] ; В AL символ из 2 строки
test al,al ; Если буфер не содержит
jz _exit_process ; символов? то выходим.
cmp ah,al ; Если символ не совпадает,
je char_equ ; то мы копируем его во
mov byte ptr[bx],al ; временную строку.
inc bx
char_equ:
inc di ; И так делаем пока
dec cx ; не достигнем конца
jnz scan_str2 ; второй строки.
; Конец малого цикла
; Ниже следующий код
push si ; делает то, что
mov cx,128 ; копирует символы
mov di,offset StrBuff2 ; из временного буфера
; в буфер 2 строки
push di ;
mov al,0 ;
rep stosb ;
pop di ;
;
mov cx,128 ;
mov si,offset TmpBuff ;
rep movsb ;
dec di ;
mov byte ptr[di],24h ;
pop si ;
;
mov cx,128 ; Очистим временный буфер.
mov di,offset TmpBuff ;
mov al,0 ;
rep stosb
mov di,offset StrBuff2 ; Посчитаем длинну
l_scan: ; оставшейся, после удаления
mov al,byte ptr[di] ; символа, строки
cmp al,00h ;
je _go ;
inc cx ;
inc di ;
jmp short l_scan ;
_go:
inc si ; Если первая строка содержит
dec dx ; более 1 символа, то повторим
jnz scan_str1 ; операции удаления символа.
; Конец большого цикла
mov dx,offset crlf
mov ah,09h
int 21h ; Перевод строки.
mov dx,offset StrBuff2
mov ah,09h
int 21h ; Вывод результата.
_exit_process:
ret
; Приглашения для ввода строк.
mess1 db 'Введите 1 строку:',24h
mess2 db 'Введите 2 строку:',24h
crlf db 0Ah,0Dh,24h ;
;
; Буфер для ввода 1 строки.
Buff1 db 128
l_Buff1 db ?
StrBuff1 db 128 dup(?)
;
; Буфер для ввода 2 строки.
Buff2 db 128
l_Buff2 db ?
StrBuff2 db 128 dup(?)
;
;
TmpBuff db 128 dup(0)
end _start
|
|
|
Дата: Сен 30, 2003 22:39:35 KiNDeR, respect!!! ОГРОМНОЕ СПАСИБО ТЕБЕ!!! СПАС!!! ЕЩЕ РАЗ СПАСИБО! |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.263 |