Автор Тема: Ввод строки с клавиатуры, модификация, вывод.  (Прочитано 4256 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ImThe

  • Постоялец
  • ***
  • Сообщений: 113
    • Просмотр профиля
Сомневаюсь конечно, что кто-нибудь поможет, но все-таки спрошу. Имеется такая задача: ввести строку с клавиатуры, удалить пробелы, заменить строчную а на А и bb на В.
С первыми двумя пунктами проблем нет, а вот с последним не выходит. Буду признателен, если скажете где ошибка, ну и если не трудно, то как сделать правильно.
SI — вход, DI — выход. MASM.


STAK    SEGMENT STACK
        DB 256 DUP (?)
STAK    ENDS
 
 
DATA    SEGMENT
    BUF DB 30, 0, 30 DUP ('$'), '$'
    OUTP DB 30, 0, 30 DUP (' '), '$'
DATA ENDS
 
CODE SEGMENT
ASSUME CS:CODE, DS:DATA, SS:STAK
 
START:
        XOR AX, AX
        MOV BX, DATA
        MOV DS, BX
        MOV AH, 0AH
        LEA DX, BUF
        INT 21H
        XOR CX, CX
        MOV CL, [BUF+1]
        LEA SI, [BUF+2]
        LEA DI, OUTP
       
 
M1:
        MOV AL, [SI]
        MOV AH, [SI+1]
        CMP AL, 'a'
        JE CHANGE
        CMP AL, ' '
        JE SKIP
        CMP AL, 'b'
        JNZ COPY
        CMP AH, 'b'
        JE CHANGE1
        JMP COPY
 
CHANGE:
        MOV AL, 'A'
        JMP COPY
       
CHANGE1:
        MOV AL, 'B'
        INC DI
       
COPY:
        MOV [DI], AL
        INC DI
       
SKIP:
        INC SI
        LOOP M1
        MOV AH, 09H
        LEA DX, OUTP
        INT 21H
        LEA DX, BUF+2
        INT 21H
        MOV AH, 4CH
        INT 21H
CODE ENDS
END START

Оффлайн ImThe

  • Постоялец
  • ***
  • Сообщений: 113
    • Просмотр профиля
Нашел и исправил ошибки. Оставлю тут, может кому пригодится, как образец.

STAK   SEGMENT   STACK
       DB   256 DUP (?)
STAK   ENDS
         ;Определение сегмента данных
DATA   SEGMENT
BUF   DB   30,00,30 DUP ('$'),'$'   ;Входной буфер
OUTP   DB   13,10,30 DUP ('$'),'$'         ;Выходной буфер
               ;Определение других переменных
DATA   ENDS
         ;Определение сегмента кода
CODE   SEGMENT
ASSUME  CS:CODE,DS:DATA,SS:STAK
         ;Определение подпрограммы

START: 
    XOR   AX,AX    ;Точка входа в программу START
    MOV   BX, DATA ;и обязательная инициализация
    MOV   DS,BX    ;регистра DS в начале программы
    MOV    AH, 0AH    ;
    LEA    DX, BUF
   INT    21H
   XOR    CX, CX
   MOV    CL, [BUF+1]
   LEA    SI, BUF+2
   LEA   DI, OUTP+2
M1:
   MOV    AL, [SI]   
   MOV   AH, [SI+1]
   CMP    AL, 'a'
   JE    CHANGE
   CMP    AL, ' '
   JE      SKIP
   CMP   AL, 'b'
   JNZ     COPY
   CMP   AH, 'b'
   JNZ   COPY
   MOV     AL,'B'
   INC   SI
   JMP   COPY
CHANGE:
   MOV   AL, 'A'
   JMP   COPY
COPY:
   MOV    [DI], AL
   INC    DI
SKIP:
   INC   SI
   LOOP   M1
   MOV   AH, 09H
   LEA   DX, OUTP
   INT   21H
    MOV   AH,4CH   ;Операторы завершения программы
    INT   21H
CODE   ENDS
END   START

 

Задача на строки в Паскале. Упорядочить и найти средний вес

Автор Ana

Ответов: 13
Просмотров: 8163
Последний ответ 23 Февраля 2010, 22:33:15
от Asix
Помогите решить задачи на СИ, про матрицы и символьные строки.

Автор katerinka777

Ответов: 4
Просмотров: 8286
Последний ответ 25 Апреля 2010, 12:56:01
от InfStudent
задача на паскале - строки

Автор Та_Нюшенька

Ответов: 1
Просмотров: 5673
Последний ответ 28 Декабря 2010, 08:50:36
от testtest
Строки в Паскале

Автор Faizov

Ответов: 3
Просмотров: 6365
Последний ответ 19 Ноября 2009, 23:34:30
от Данила
Делфи(строки)

Автор Астасья

Ответов: 13
Просмотров: 5332
Последний ответ 14 Мая 2012, 15:08:22
от ki