Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [ASM]Заполнение массива целыми числами, указан размер и начальное число ряда 
V
    Опции темы
Drakonovod
Дата 29.4.2009, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Задача такая:
На ассемблере под Intel8086 написать кусок кода, выполняющий заполнение массива целыми числами натурального ряда, то есть 0,1,2,3 и т.д. Начальное число ряда указывается в регистре SI, число заполняемых ячеек массива в регистре CX.
Вроде бы просто, но бьюсь 4 часа и не могу понять как это делать. Ассемблер преподавался хреново, так что я практически вот 4 часа по урокам Chingachguk'а пытался понять, что такое ассемблер и как он вообще работает, и это весь мой опыт его изучения. Вот всё что смог набросать:


Код

mov si,00005h    - пишем в si стартовое число, например 5 (не уверен что правильно понял как тут указывать числа)
mov bx,0            - смещаем базовый регистр на ноль
mov cx,00064h   - кладем в регистр число повторений, например 100
mov bx,si          - кладем в bx содержимое si

тут както делаем массив размера cx и кладем в первую ячейку содержимое bx, после чего переходим к циклу

@repeat
ADD bx,1              - смещаем bx на один
ADD si,1               - увеличиваем число в si на единицу
mov bx,si             - кладем в bx содержимое si

тут по идее bx уже смещен на одну позицию и может выгрузить число в следущую ячейку

CMP bx,cx            - сравниваем содержимое bx с содержимым cx (тут хранится число повторений, если второе меньше первого то программа останавливается - массив закончился)
JBE @repeat        - если меньше или равно, перескакиваем на repeat


Всё, больше у меня мозгов не хватает, организацию массива и запись в него я никак не могу понять, и сильно сомневаюсь что то что я нацарапал вообще имеет смысл, а сдать это надо завтра, один день дали на решение.
Напишите живую программу, пожалуйста... Я сам попытаюсь доделать, но времени очень мало, знаний ещё меньше, и инет работает так, что скорость гугления опечалила бы даже будду.
Помогите студенту сохранить статус...
PM MAIL   Вверх
airyashov
Дата 29.4.2009, 07:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Код

mov si,5    - пишем в si стартовое число, например 5 (не уверен что правильно понял как тут указывать числа)
lea bx,Massiv            - адрес массива ,если массив уже существует и это массив слов
mov cx,100   - кладем в регистр число повторений, например 100

@repeat:
mov word ptr[bx],si             - кладем в bx содержимое si
ADD bx,2              - смещаем bx на один
ADD si,1               - увеличиваем число в si на единицу
loop @repeat



--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
Drakonovod
Дата 29.4.2009, 07:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо. А если массива еще не существует? Как его сделать?
PM MAIL   Вверх
airyashov
Дата 29.4.2009, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



выделить память функцией ДОС например, в задании про это ничего не сказано


--------------------
icq:3(один)7748666
mail:airyashov( а )inbox.ru
PM MAIL   Вверх
WWWlad
Дата 29.4.2009, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



писалось на коленке, но вроде без ошибок...

Код

Code      segment
          assume cs:code,ds:code,es:code,ss:code
          org 100h

StartNum     EQU 5     ; начальное число
NumCount   EQU 10   ; кол-во чисел

Begin:
          
   mov   si, StartNum      ; загружаем в si начальное значение
   mov   cx, NumCount    ; загружаем в cx кол-во чисел
   mov   bx, offset Array  ; загружаем в bx адрес массива

@Lp:
   mov   [bx], si      ; пишем в массив очередное число
   inc      si             ; увеличиваем текущее число на 1
   add    bx, 2        ; смещаем указатель в массиве на 2 байта
   loop   Lp            ; повторяем, пока cx не станет равным 0 (после каждой итерации инструкция loop уменьшает его на 1)

   int      20h          ; завершаем работу программы
   

Array   dw NumCount dup (?)    ; массив из NumCount двухбайтовых значений

Code ends
end Begin


PM   Вверх
Drakonovod
Дата 30.4.2009, 05:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем спасибо, я всё еще студент =)
PM MAIL   Вверх
Evacuucky
Дата 12.10.2022, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Ciminance
Дата 24.10.2022, 03:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
Queuego
Дата 4.11.2022, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
wectula
Дата 10.12.2022, 07:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
unaburb
Дата 24.1.2023, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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




Модератор: Сообщение скрыто.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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