5

У меня есть два сегмента данных

Data 1
    A1 dw 2 dup (6 dup (7 dup (5 dup (?))))
Data1 ends

Data2 segment
    A2 dd 2 dup (6 dup (7 dup (5 dup (?))))
Data2 ends

Мне нужно переместить элемент с массива А2[0,1,2,3] во все елементы масива А1

Code1 segment 
    assume DS:Data2, ES:Data1, CS:Code2
    begin2:
    mov ax,Data2
    mov bx,Data1
    mov DS, ax
    mov ES, bx
    cld
    xor ax,ax
    xor cx,cx
    mov ebx,48    ;смещения в массиве А2[0,1,2,3] относительно начала массива А2
   ; это будет 48 елемент
    lea eax,A1
    mov es, eax
    lea eax,A2
    lea eax,[eax+ebx*4]
    mov cx,420  
    Rep stosd 
    mov AX, 4c00h
    int 21h

    end begin2
Code1 ends  

Правильно ли я сделал?

insolor
  • 49,104
  • вы это откомпилить то пробовали. оно же даже не скомпилиться, хотя бы потому, что вы в es пытаетесь занести значение из eax (кстати не понято зачем, в es вы уже загрузили сегмент в начале), а у них разные размеры. Кроме того у вас элементы в A2 четрыхбайтные (dd), а в A1 двубайтные (dw), не понимаю как можно четырехбайтные элементы копировать в дву. можно конечно, но там же непонятно что выйдет. И команд stosd сохраняет eax нужное кол-во раз, заполняя область памяти этим значением. но значение то у вас всего 4 байта, а 4 элемента массива A2 это 16 байт ... И в eax у вас некий адрес, а не знач – Mike Nov 26 '17 at 11:47
  • А нельзя сделать просто lea ax, А2[0,1,2,3] ? И если у вас код 16 битный, то использовать 32 битный eax и stosd, так же работающую по 32 бита не надо. (разве что размножить адрес в eax дважды и уменьшить в 2 раза количество операций – Mike Nov 26 '17 at 12:32
  • Проверил в MASM там прокатил такой синтаксис lea ax, A2[0][1][2][3] – Mike Nov 26 '17 at 12:36
  • @Mike Спасибо очень большое – Саша Коровій Nov 26 '17 at 12:40

0 Answers0