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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.11.2014, 18:32   #1
Raspberry28
Новичок
Джуниор
 
Регистрация: 26.11.2014
Сообщений: 2
По умолчанию Обработка массивов.

Я в ассемблере полный ноль, прошу помощи у опытных ребят. Задание такое, заменить в строчке "." на "..." . Я нашел схожую программу, она заменяет "." на "*". Проблема в том, что многоточие занимает 3 байта, а никак не знаю, как впихнуть в код..
Вот код:
.
Код:
model tiny
.386
.code
new_line:   db  0Dh,0Ah,'$'
msg:    db  'Enter string:$'
unk:    db  'no replaces$'
okay:   db  '00 replased$'
stroka:  db 99          ; длина строки - 255 симв. макс.
len:    db  ?                       ; сюда вернется настоящая длина
buf:    db  99 dup(?)              ; тут будет то, что ввели
s db '.'

 org 100h    
start:  
        push    cs
        push    cs
        pop ds
        pop es
; Вывод на экран 
    mov     ah, 09h
    lea     dx, msg
    int     21h
; ввод строки
    mov ah, 0Ah
    lea dx, stroka
    int 21h
    mov si, dx
    lodsw
    mov di, si
    shr ax, 8
    mov cx, ax
    inc cx
; cx - str length, DS:SI = ES:DI -> string buf
    xor bx, bx
    mov al, s    ; '.'
_loop:  repne   scasb
        jcxz    @d
    jnz @l      ; нет '.'
    mov byte ptr es:[di-1], '*'
    inc bx
@l: jmp _loop
@d: mov dword ptr es:[di],240A0Dh     ; собственно, CR,LF,'$' для cputs 
    mov ax, bx
    aam
    or  ax, '00'
    xchg    al, ah
    mov word ptr [okay], ax
    or  bx, bx
    jnz ok
error:  lea dx, unk
    jmp @ok
ok: lea dx, okay
@ok:    push    dx
; новая строка
    mov     ah, 09h
    lea     dx, new_line
    int     21h
 
; Вывод на экран 
    mov     ah, 09h
    lea     dx, buf
    int     21h
    pop dx
    int 21h
; выход
    mov ah, 4Ch
    int 21h
    end start


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

Модератор.

Последний раз редактировалось Serge_Bliznykov; 26.11.2014 в 18:38.
Raspberry28 вне форума Ответить с цитированием
Старый 10.04.2015, 10:27   #2
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Код ниже, заменяет (при вводе) каждую точку - троеточием:

Пример окна:
Input string: abcde...12345...@#$%^...
----------------------
Press any key..

Код:
use16
org 100h
jmp start

mUser1 db 13,10,' Input string: $'
mUser2 db 13,10,' ---------------------'
       db 13,10,' Press any key.. $'

start:
   mov  dx,mUser1
   call message     ; мессага юзеру

;-------вводим строку---------|
istr:
   xor  ax,ax
   int  16h         ; ждём символ
   cmp  al,'.'      ; это точка?
   je   change      ; если да - вставляем 3 точки.
   cmp  al,0dh      ; это Enter?
   je   exit        ; если да - выходим.
   int  29h         ; печатаем символ
jmp istr            ; ждём следующий символ

;-------выход------------------|
exit:
   mov  dx,mUser2
   call message
   xor  ax,ax       ; ждём любую клавишу и выходим
   int  16h
   int  20h

;-------(под)программа вывода трёх точек
change:
   mov  cx,3        ; счётчик
kLoop:              
   mov  al,'.'      ; в AL отправляем точку
   int  29h         ; печатаем её
   loop kLoop       ; мотаем цикл CX-раз
jmp istr            ; передаём управление клавиатуре
;-------(под)программа вывода сообщений
message:
   mov  ah,9
   int  21h
ret
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Старый 14.04.2015, 05:25   #3
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

R71MT,
процедуру change можно и проще
Код:
;-------(под)программа вывода трёх точек
change:
   int 29h; в AL и так код точки
   int 29h      
   int 29h
jmp istr            ; передаём управление клавиатуре
Mikl___ вне форума Ответить с цитированием
Старый 14.04.2015, 07:21   #4
R71MT
Участник клуба
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,428
По умолчанию

Mikl___, точно. Чёт я тупанул...
Но ассемблер мне понравился тем, что одну и ту-же задачу можно расписать на две страницы, а можно ограничится и двумя строчками. Всё зависит от хода-мысли программиста.
Нашедшего выход - затаптывают первым..
R71MT вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка массивов! Bohdan1993 C# (си шарп) 1 23.10.2012 10:15
«Обработка массивов в С++ Лилия396 Помощь студентам 2 29.02.2012 20:25
обработка массивов Pepsik Помощь студентам 4 12.07.2011 08:33
Обработка массивов Юлёна Паскаль, Turbo Pascal, PascalABC.NET 1 15.03.2011 22:01