Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Макрокоманда выборки из массива, выбор чисел из массива 
:(
    Опции темы
SergeyDolmatov
Дата 4.1.2014, 11:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 4.1.2014

Репутация: нет
Всего: нет



Доброго времени суток. Так как я, откровенно, не силен в Эссемблере, прошу проверить, то что я написал и по возможности указать на ошибки. 
Вот само задание:
Вот собственно технические требования, записанные с точностью, с его слов. Текст программы:
Написать макрокоманду для выборки из некоторого массива слов со знаком всех элементов больших
одного значения, но меньших другого. С помощью этой макрокоманды обработать два массива, выбирая из 1-го элементы большие 1000, но меньшие 2000, а из 2-го - большие (-5000), но меньшие 5000
Код

Name Program
    min1 = 1000        ; промежуток от 1000 до 2000
    max1 = 2000
    min2 = -5000            ; промежуток от -5000 до 5000
    max2 = 5000

;Описание  переменных
Data segment
      x1 dw 4B0h
         dw 8520h
         dw 3EDh
         dw 7D1h
         dw 384h
         dw 601h
          
      Y1 dw 6 Dup(?)  
    
      X1 dw 8300h
         dw 1F4h
         dw 0F448h
         dw 13ECh
         dw 0EC14h
         dw 0D05h
      Y2 dw 6 dup(?) 
          
Data ends

Stack SEGMENT
    DW 16 dup(?)
    StkTOp LABEL  word
Stack ends

Code SEGMENT
    ASSUME CS: Code, DS: Data, ES: Data, SS: Stack
    
abc macro X, Y, N, min, max ; x - входной массив. у - выходной массив. n - кол-во чисел во входном массиве. min, max - промежуток для выборки
          local M1, M2
          
    mov cx, N        ; кол-во чисел
    lea si, X          ; адрес массива чисел
    lea di, Y                ; адрес выходного массива
    
M1: mov ax, [si]        ; загружаем первое число
    cmp ax, min        ; сравниваем
    JL M2            ; если меньше то идем на М2
    cmp ax, max        ; сравниваем
    JG M2            ; если больше идем на M2                       
    mov [di], ax        ; выборка числа
    add di, type Y            ; переходим на другое число
    
M2: add si, type X        ; переходим на следующее число
    dec cx                ; цикл
    JNZ M1
endm

; Основная программа
Start:    
     mov AX, Data
     mov DS, AX
     mov ES, AX
     mov Ax, Stack
     mov SS, AX
     mov SP, offset StkTop
     
         abc X1, Y1, 6, min1, max1
         abc X2, Y2, 6, min2, max2
code ends
end start




PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Asm для начинающих"
MAKCim
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой КОД.
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, MAKCim.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Asm для начинающих | Следующая тема »


 




[ Время генерации скрипта: 0.0362 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.