Как написать программу?
Вы пишете цикл, который последовательно читает с исходных адресов и записывает по адресам назначения.
Я имею в виду, как мне взять адрес?
Должен ли я считать адрес смещения или базовый адрес?
Для адресации памяти вам необходимо использовать оба компонента адреса.
Вы помещаете данное значение сегмента в регистр сегмента. DS
- более обычный выбор:
mov ax, 7000h
mov ds, ax
Вы помещаете предоставленное исходное смещение в адресный регистр, такой как BX
, SI
или DI
:
mov si, 0200h
Вы помещаете предоставленное смещение пункта назначения в другой адресный регистр:
mov di, 0300h
Вы помещаете запрошенное количество байтов в один из оставшихся регистров общего назначения, CX
является естественным выбором и действительно единственным выбором, если мы хотим использовать инструкцию LOOP
:
mov cx, 16
Все вышеперечисленные варианты приводят к следующему циклу:
Again:
mov al, [si] ;Get 1 byte from the source range
inc si ;Point to the next byte
mov [di], al ;Write 1 byte in the destination range
inc di ;Point to the next byte
loop Again ;Decrement the counter and jump to the label "Again"
; if the counter is not yet exhausted.
Это лишь одно из решений вашей задачи. Существует гораздо больше.
Самое короткое решение, однако, использует специальную инструкцию, такую как MOVS
. Найдите его в своем учебнике и посмотрите, что требуется, чтобы начать его использовать. Удачного открытия!
Обратите внимание, что весь приведенный выше код не является полноценной рабочей программой.
person
Sep Roland
schedule
25.06.2017
MOVSB
). - person Cody Gray   schedule 20.06.2017