Работа с массивами Assembler

Нужна помощь. Пишу в emu8086.

  1. Сформировать массив данных объемом в 10 байт.
  2. Сформировать пустой массив объемом в 10 байт.
  3. Выполнить перенос данных из первого массива в другой, используя методы косвенной адресации (базовой, индексной и базово-индексной).
  4. С помощью команды XLAT определить 6(если считать от нуля) элемент второго массива. Вот начал код:
dat segment
array db 1,2,3,4,5,6,17,8,9,10
array1 db 10 dup(?)
elem db 1 dup(?)
dat ends

C первыми двумя пунктами справился, с остальными не получается. Помогите пожалуйста с остальными


Ответы (1 шт):

Автор решения: PRODIGY

Вот пример на fasm'e:

3. Выполнить перенос данных из первого массива в другой, используя методы косвенной адресации (базовой, индексной и базово-индексной).

     cld                     ;// Clear Direction (шаг слева на право)
     xor   ebx,ebx           ;// EBX = индекс = нуль 
     mov   esi,array         ;// адрес источника
     mov   edi,array1        ;// адрес приёмника
     mov   ecx,10            ;// длина массива
@@:  mov   al,byte[esi+ebx]  ;// AL = байт из ESI (индексная адресация)
     stosb                   ;// записать AL в EDI (edi +1)
     inc   ebx               ;// сл.индекс..
     loop  @b                ;// промотать цикл ECX-раз

;//******* Обычное копирование **********
     mov   esi,array         ;// источник
     mov   edi,array1        ;// приёмник
     mov   ecx,10            ;// длина
     rep   movsb             ;// скопировать из ESI в EDI

4. С помощью команды XLAT определить 6 (если считать от нуля) элемент второго массива.

 mov   ebx,array1    ;// адрес массива
 mov   al,6          ;// индекс в нём
 xlatb               ;// AL = 17
→ Ссылка