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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2021, 10:15   #1
Dushlak1
Новичок
Джуниор
 
Регистрация: 08.11.2020
Сообщений: 4
По умолчанию Заданный символьный массив (под windows)

есть задание (Заданный символьный массив S (n), n≤700. Разработать программу, которая изымает из этого массива все повторные вхождения цифр и арифметических знаков.)
я написал код но надо под windows в программе MASM32 помогите пожалуйста
Код:
org   100h
push  start
retn

mess0   db  13,10,10,'ARRAY...'
        db  13,10,'------------',13,10,'$'
mess1   db  13,10,10,'FOUND...'
        db  13,10,'------------',13,10,'$'

array   db  700 dup(0)          ; место под массив (и результат)
len     dw  0                   ; переменная с длиной массива

start:
;// получаем длину массива "от фонаря"
        in    ax,40h            ; АХ = рандом
        mov   bx,700            ; делитель
        xor   dx,dx             ;
        div   bx                ;
        cmp   dx,16             ; проверка остатка на минимум
        jb    start             ; повторить, если меньше
        mov   [len],dx          ; длина массива в диапазоне 16..699

;// заполняем массив случайным образом
        mov   di,array          ; приёмник
@@:     xor   cx,cx             ; задержка..
        loop  $                 ; ^^^
        in    ax,40h            ; берём рандом
        imul  ax,9E35h          ; разделить на полином
        and   al,7Fh            ; оставим только первую половину ASCII-кодов
        cmp   al,13             ; уберём возврат каретки,
        je    @b                ; ^^^
        cmp   al,10             ; ..и перевод строки.
        je    @b                ; ^^^
        stosb                   ; сохранить символ в ES:DI !
        dec   dx                ;
        jnz   @b                ; промотать вернюю метку(@@) DX-раз..

;// выводим получившийся массив на экран
        mov   ah,9              ; мессага
        mov   dx,mess0          ;
        int   21h               ;
        mov   cx,[len]          ; СХ = длина массива
        mov   si,array          ; SI = источник
@@:     lodsb                   ;
        int   29h               ;
        loop  @b                ;

        mov   ah,9              ; мессага
        mov   dx,mess1          ;
        int   21h               ;

;// поиск заданных символов в массиве
;// после чтения, источник больше не нужен.
;// найденные будем собирать туда-же (в источник) - начиная с головы.
        mov   cx,[len]          ;
        mov   si,array          ; источник
        mov   di,si             ;    ..он-же приёмник
        xor   dx,dx             ; сбросим счётчик найденных
@@:     lodsb                   ; читаем массив
        mov   bl,al             ; запомним символ в BL (для фильтра чисел)
        cmp   al,'*'            ; фильтр знаков..
        jz    @save             ; сохранить, если равно
        cmp   al,'/'            ;
        jz    @save             ;
        cmp   al,'+'            ;
        jz    @save             ;
        cmp   al,'-'            ;
        jz    @save             ;
        sub   bl,30h            ; проверка на число
        cmp   bl,9              ;
        ja    @next             ; пропустить, если больше
@save:  inc   dx                ; иначе: счётчик +1
        stosb                   ; запись символа в буфер!
@next:  loop  @b                ; промотать СХ-раз..

;// вывод найденных на экран
        mov   cx,dx             ; кол-во найденных
        mov   si,array          ; источник
@@:     lodsb                   ;
        int   29h               ;
        loop  @b                ;

        mov   ah,8              ; выход в DOS по клавише!
        int   21h               ;
        int   20h               ;
Dushlak1 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Символьный массив Ninochka_93 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 12.11.2014 13:52
Символьный массив(Си) d3fToR Помощь студентам 0 19.02.2012 11:49
Символьный массив ISV-777 Помощь студентам 0 14.11.2011 22:49
Символьный массив g00d_game Общие вопросы C/C++ 1 12.06.2010 13:38
подходит ли заданное слово под заданный шаблон Ivan_assm Помощь студентам 2 18.04.2010 20:44