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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.11.2012, 20:10   #1
Skull_psyhothik
Пользователь
 
Регистрация: 07.09.2012
Сообщений: 18
Вопрос TASM/ Сравнение символов в строке

Доброго времени суток! Есть такое вот задание: Ввести строку, если соседние символы одинаковые, то заменить их на один такой символ, вывести результат.
Собственно ввод и вывод по примерам в инете я написал, но сравнение и замена символов не даются( помогите с этим заданием плз)
вот то что есть
Код:
        page    60,132
TITLE   CTRNAME (EXE) Ввод имен и вывод в центр экрана
;--------------------------------------------------------
STACKSG SEGMENT PARA STACK 'Stack'
        DW      32 DUP(?)
STACKSG ENDS
;--------------------------------------------------------
DATASG  SEGMENT PARA 'Data'
NAMEPAR LABEL   BYTE            ;Имя списка параметров:
MAXNLEN DB      20              ; макс. длина имени
NAMELEN DB      ?               ; число введенных символов
NAMEFLD DB      20 DUP(' '),'$' ;имя и ограничитель для вывода на экран
PRIMPT  DB      'Vvedite stroku: ', '$'
DATASG  ENDS
;--------------------------------------------------------
CODESG  SEGMENT PARA 'Code'
BEGIN   PROC    FAR
        ASSUME  CS:CODESG,DS:DATASG,SS:STACKSG,ES:DATASG
        PUSH    DS
        SUB     AX,AX
        PUSH    AX
        MOV     AX,DATASG
        MOV     DS,AX
        MOV     ES,AX
        CALL    Q10CLR          ;Очистить экран
A20LOOP:
        MOV     DX,0000         ;Установить курсор в 00,00
        CALL    Q20CURS
        CALL    B10PRMP         ;Выдать текст запроса
        CALL    D10INPT         ;Ввести имя
        CALL    Q10CLR          ;Очистить экран
        CMP     NAMELEN,00      ;Имя введено?
        JE      A30             ; нет - выйти
        CALL    E10CODE         ;Установить звуковой сигнал
                                ; и ограничитель '$'
        CALL    F10CENT         ;вывод
        ;JMP     A20LOOP
        A30:
                RET             ;Вернуться в DOS
BEGIN   ENDP
;               Вывод текста запроса:
;               --------------------
B10PRMP PROC    NEAR
        MOV     AH,09           ;Функция вывода на экран
        LEA     DX,PRIMPT
        INT     21H
        RET
B10PRMP ENDP
;               Ввод имени с клавиатуры:
;               -----------------------
D10INPT PROC    NEAR
        MOV     AH,0AH          ;Функция ввода
        LEA     DX,NAMEPAR
        INT     21H
        RET
D10INPT ENDP
;              Установка сигнала и ограничителя '$':
;              ------------------------------------
E10CODE PROC   NEAR
        MOV    BH,00           ;Замена символа Return (0D)
        MOV    BL,NAMELEN      ; на зв. сигнал (07)
        MOV    NAMEFLD[BX],07
        MOV    NAMEFLD[BX+1],'$' ;Установить ограничитель
        RET
E10CODE ENDP
;               вывод на экран:
;              ------------------------------------
F10CENT PROC   NEAR
	MOV     DX,0000         ;Установить курсор в 00,00
        CALL   Q20CURS          ;Установить курсор
        MOV    AH,09
        LEA    DX,NAMEFLD       ;Вывести имя на экран
        INT    21H
        RET
F10CENT ENDP
;              Очистить экран:
;              --------------
Q10CLR  PROC   NEAR
        MOV    AX,0600H         ;Функция прокрутки экрана
        MOV    BH,07            ;Цвет (07 для ч/б)
        MOV    CX,0000          ;От 00,00
        MOV    DX,184FH         ;До 24,79
        INT    10H              ;Вызов BIOS
        RET
Q10CLR  endp
;              Установка курсора (строка/столбец):
;              ----------------------------------
Q20CURS PROC   NEAR             ;DX уже установлен
        MOV    AH,02            ;Функция установки курсора
        MOV    BH,00            ;Страница #0
        INT    10H              ;Вызов BIOS
        RET
Q20CURS ENDP

CODESG  ENDS
        END    BEGIN


________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!

Модератор.

Последний раз редактировалось Serge_Bliznykov; 25.11.2012 в 22:37.
Skull_psyhothik вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение кол-ва слов в строке и сопоставление аналогичной строке. kish_mish Общие вопросы C/C++ 0 12.03.2012 20:58
TASM. Сравнить слова в строке S1av0k Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 13.12.2011 10:14
[TASM] Сравнение массива FromShadow Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 6 15.06.2010 14:02
TASM: Замена символов в строке. APTEMUC Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 18.01.2010 05:48