Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler
Регистрация

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

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

Я в ассемблере полный ноль, прошу помощи у опытных ребят. Задание такое, заменить в строчке "." на "..." . Я нашел схожую программу, она заменяет "." на "*". Проблема в том, что многоточие занимает 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 в 19:38.
Raspberry28 вне форума   Ответить с цитированием
Старый 10.04.2015, 11:27   #2
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,230
Репутация: 1048
По умолчанию

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

Пример окна:
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, 06:25   #3
Mikl___
Профессионал
 
Регистрация: 11.01.2010
Сообщений: 1,129
Репутация: 943
По умолчанию

R71MT,
процедуру change можно и проще
Код:

;-------(под)программа вывода трёх точек
change:
   int 29h; в AL и так код точки
   int 29h      
   int 29h
jmp istr            ; передаём управление клавиатуре

Mikl___ вне форума   Ответить с цитированием
Старый 14.04.2015, 08:21   #4
R71MT
Профессионал
 
Аватар для R71MT
 
Регистрация: 16.06.2011
Сообщений: 1,230
Репутация: 1048
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


18:02.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru