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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2011, 13:56   #1
fuzo
Пользователь
 
Регистрация: 16.09.2010
Сообщений: 40
Лампочка Заменить в строке один символ на другой (assembler)

Составить программу, заменяющую в строке один заданный символ на другой. Строку и символы вводить с клавиатуры, обработанную строку вывести на экран.

Вот папочка с несколькими примерами таких прорам. Пробовал переделать str2 под нужное условие, но ничего не получилось

Помогите изменить даный код под моё условие. Убрать подсчёт замен и добавить ввод заменяемого и заменяюшещо знака.

Код:
;Обработка строк. Организация ввода-вывода данных.
;задача: Дана строка текста. Заменить в нем символ 'и' на 'i'.
;        Подсчитать количество замен. Организовать ввод данных с клавиатуры
;        и вывод результатов на экран.
;===================
 .model small
 .stack 100h
 extrn write:proc ;внешняя процедура для вывода чисел
 .data
;===================================
;параметры для поля ввода
 Enter_String   db 80           ;максимальная длина
 Len_S          db ?            ;реальная длина
 Str_Field      db 80 dup(' ')  ;введенные символы (поле ввода - цепочка)
 
 Ns     db '      $'     ;поле для размещения числа в строковом
                         ;представлении для последующего вывода
                         ;под число отводится 6 позиций (можно и больше)
public Enter_String,Len_S,Str_Field,Ns
;===================================
 S2    db 13,10,'Введите строку: $'
 S3    db 13,10,'Обработанная строка:',13,10,'$'        
 S4    db 13,10,'Для завершения нажмите <Enter>.$'      
 S5    db 13,10,'Количество произведенных замен <и> на <i> = $'
 k     dw 0
;===================================
 .code
 begin:
        mov ax,@data    ;инициализация
        mov ds,ax
        mov es,ax
 
        mov ah,9        ;вывод подсказки ввода
        lea dx,S2
        int 21h
        mov ah,10       ;ввод строки
        lea dx,Enter_String
        int 21h
 
        cld             
        lea di,Str_Field
        mov cl,Len_S
for:    mov al,'и'
        jcxz vyvod
        repne scasb
        je zamena
vyvod:
        ;вывод результата
        mov al,'$'
        stosb
        mov ah,9
        lea dx,S3
        int 21h
        mov ah,9
        lea dx,Str_Field
        int 21h
        mov ah,9
        lea dx,S5
        int 21h
        mov ax,k
        call write
        mov ah,9
        lea dx,S4
        int 21h
        mov ah,10
        lea dx,Str_Field
        int 21h
        jmp exit
zamena:
        inc k
        dec di
        mov al,'i'
        stosb
        jmp for
exit:
       mov ah,4ch ;выход в DOS
       int 21h
end begin
Вложения
Тип файла: zip L.zip (8.8 Кб, 17 просмотров)

Последний раз редактировалось fuzo; 26.03.2011 в 15:30.
fuzo вне форума Ответить с цитированием
Старый 06.05.2013, 12:11   #2
Fr0sT-Mag3
Новичок
Джуниор
 
Регистрация: 06.05.2013
Сообщений: 1
По умолчанию Вот программа, правда без использования некоторых команд

Код:
.model small
.stack 100h
.data
msg1	   db	  'Stroka:',10,13, '$'	 
Stroka	   db     60, 60 dup (?)
msg2       db     'Vvedite simvol kototii hotite zameniti' ,13,10,'$'
len1       db     ?
msg3       db     'Vvedite simvol na kotorii hotite proizvesti zamenu:',13,10,'$' 
msg4	   db     'Rezulitat:',13,10,'$' 
len2	   db     ?
NextLine   db     13,10,'$'
.code
mov ax, @data	
mov ds, ax	
mov es, ax	

;---------вывод 1-го сообщения---------;
mov ah, 09h
mov dx, offset msg1
int 21h 

;--------ввод строки--------;
   lea dx, Stroka
   mov ah, 0Ah 
   int 21h
   
   lea bx, Stroka
   inc bx
   mov cl, [bx]
   xor ch, ch	; теперь CX = длина строки
   inc bx
   add bx, cx
   mov al, 0
   mov [bx], al
      
;---------следующая строка---------;   
   lea dx, nextLine
   mov ah, 9
   int 21h  
   
;----------вывод 2-го сообщения-------;   
   lea dx, msg2
   mov ah, 9
   int 21h
   
;--------ввод символа-------;  
   mov ah, 01 
   int 21h
   mov len1, al
   mov bl, al ; сохраним в BL
   
;---------следующая строка---------;   
   lea dx, nextLine
   mov ah, 9
   int 21h
   
;----------вывод 3-го сообщения--------;   
   lea dx, msg3
   mov ah, 9
   int 21h
   
;------ввод символа-----;  
   mov ah, 01 
   int 21h
   mov len2, al
   mov bh, al
   
;--------ищем символ-------------;
   lea si, Stroka
   add si, 2
   
;-----------переход на следующий символ----------;   
sleduiushii_simvol:  mov al, [si]
                     or  al, al ; это ноль (конец строки)?
                     jnz proverka ; переход, если не 0
                     jmp simvola_net ; дошли до конца, так и встретили 
   
;-------------сравниваем символы------------;     
proverka:   cmp al, bl
            je  naiden
            inc si
            jmp sleduiushii_simvol
   
;---------символ найден-----------;   
naiden:    mov [si], bh ; заменили - больше ничего делать не надо - просто покажем 
           
;------------следующая строка----------;		   
		   lea dx, nextLine
           mov ah, 9
           int 21h
     
;-------------вывод преобразованной строки------------;
   lea dx, Stroka
   add dx, 2 ; пропускаем байты длины
   mov ah, 40h
   mov bx, 1 ; стандартый вывод
   push cx ; сохраним CX
   int 21h
   pop  cx  ; восстановим CX

;----------------следующая строка--------------ж
  lea dx, nextLine
  mov ah, 9
  int 21h
   
;----------вывод 4-го сообщения----------; 
 simvola_net:   lea dx, msg4
                mov ah, 9
                int 21h
				
;-------------завершение программы-----------;   
mov	ah, 04Ch	
int	21h
end
Fr0sT-Mag3 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите заменить символ izhrvd Microsoft Office Excel 8 27.10.2009 17:24
Перенести/Удалить один символ в ячейке Tirendus Microsoft Office Excel 4 31.07.2009 13:15
заменить символ в строке felmor Паскаль, Turbo Pascal, PascalABC.NET 1 25.12.2008 18:38
заменить в строке подстроку Lemo Помощь студентам 4 18.10.2008 21:54