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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2013, 21:31   #1
datileo
Пользователь
 
Регистрация: 12.05.2011
Сообщений: 20
По умолчанию Как переделать программу на TASM? подскОжите как упростить данную программу а то билеберда какая-то

Удалить элементы массива А(I) имеющие одинаковые значения. I=1,2,..,10, Определить количество оставшихся элементов.


Код HTML:
.286
.model tiny
.code
start:
; ищем повторяющиеся элементы и заменяем их на 0FFh
    mov cx,lenth+1
    mov bx,offset array 
a2: push cx
    mov al,[bx]
    cmp al,0FFh
    je a1
    mov di,bx
    inc di
a0: repne scasb
    jcxz a1
    mov byte ptr [di-1],0FFh
    loop a0
a1: inc bx
    pop cx
    loop a2
; ищем элемены отличающиеся от 0FFh и сдвигаем их в начало массива
; таким образом происходит удаление из массива повторяющихся элементов
    mov al,0FFh
a5: xor bx,bx
        mov cx,lenth
    mov di,offset array 
a4:     repne scasb
        jcxz a3
    cmp al,[di]
    je a4
    xchg al,[di]
    xchg al,[di-1]
        mov bl,1
        jmp a4
a3: cmp bx,1
    jz a5
; ищем первый элемент с кодом 0FFh, отнимаем от его адреса адрес начала 
;массива, таким образом мы определяем количество оставшихся элементов.
        mov cx,lenth
    mov di,offset array 
    mov si,di
    repne scasb
    sub di,si
    dec di
    ret
array db 1,2,1,1,4,2,7,4,1,10
lenth = $ - array
end start;конец программы
datileo вне форума Ответить с цитированием
Старый 25.02.2013, 11:56   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

datileo,
там откуда ты эту программу взял еще и текст был
задача решается в три этапа:
  1. Поиск повторяющихся элементов. Берем первый элемент массива и последовательно сравниваем его с остальными элементами. Если находим совпадающий, то заменяем его значение на 0FFh. Потом берем второй элемент массива и так до тех пор пока не проверим все элементы, а повторяющиеся значения не заменим на 0FFh
  2. Удаление повторяющихся элементов. Все элементы со значением равным 0FFh сдвинем в конец массива. Ищем элемент равный 0FFh, если у элемента справа значение не равно 0FFh, тогда обмениваем их значения, если произошел обмен делаем регистр BX=1 проходим всю строку до последнего элемента. Если был хоть один обмен, тогда возвращаемся в начало массива, если BX=0 значит все элементы стоят на своих местах.
  3. Запоминаем в SI адрес начала массива. Ищем первый элемент со значением 0FFh его адрес равен DI-1. количество элементов с неповторяющимися значениями равно DI - SI - 1
Написано это было из расчета, что stas9In разберется в алгоритме и напишет программу сам, но затем stas9In пожалели и добавили уже текст программы, который ты называешь "билебердой"...
Mikl___ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VB Я не понимаю как написать данную программу Alenka18 Помощь студентам 2 19.11.2012 18:11
Как можно упростить программу? sullen Общие вопросы C/C++ 2 08.06.2012 18:54
подкажите как реализовать данную программу Shab Общие вопросы C/C++ 0 24.11.2010 12:43
Как можно упростить программу? Евгений92 Общие вопросы C/C++ 0 07.11.2010 17:50
Нужно переделать программу - упростить lukoie Фриланс 14 29.01.2010 01:09