· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ASSEMBLER —› Поможите с программой зелёному

Посл.отвђт Сообщен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:05

while(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