Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [ASM]Заполнение массива целыми числами


Автор: Drakonovod 29.4.2009, 06:46
Задача такая:
На ассемблере под 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


Всё, больше у меня мозгов не хватает, организацию массива и запись в него я никак не могу понять, и сильно сомневаюсь что то что я нацарапал вообще имеет смысл, а сдать это надо завтра, один день дали на решение.
Напишите живую программу, пожалуйста... Я сам попытаюсь доделать, но времени очень мало, знаний ещё меньше, и инет работает так, что скорость гугления опечалила бы даже будду.
Помогите студенту сохранить статус...

Автор: airyashov 29.4.2009, 07:27
Код

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

Автор: Drakonovod 29.4.2009, 07:39
Спасибо. А если массива еще не существует? Как его сделать?

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

Автор: WWWlad 29.4.2009, 20:16
писалось на коленке, но вроде без ошибок...

Код

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


Автор: Drakonovod 30.4.2009, 05:52
Всем спасибо, я всё еще студент =)

Автор: Evacuucky 12.10.2022, 21:00
Модератор: Сообщение скрыто.

Автор: Ciminance 24.10.2022, 03:09
Модератор: Сообщение скрыто.

Автор: Queuego 4.11.2022, 21:32
Модератор: Сообщение скрыто.

Автор: wectula 10.12.2022, 07:26
Модератор: Сообщение скрыто.

Автор: unaburb 24.1.2023, 14:45
Модератор: Сообщение скрыто.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)