Заполнение доп. сегмента ES (Nasm) - Assembler

Узнай цену своей работы

Формулировка задачи:

Привет всем. Подскажите пожалуйста. Нужно составить подпрограмму заполнения всего сегмента ES числами вроде 1,2,4,8...64,128, 1, 2, 4...(бегущая единица) Ниже примерно набросал, как должно выглядеть...нужно ещё добавить проверку на макс. значение, и как то определить размер сегмента ES, цикл, буду благодарен если поможете разобраться. Заранее спасибо.
N13Func proc 
 
x db 1 ;присвоил х = 1
mov eax, x ; передал в eax значение x
add eax, x  ; добавил х + х
 
N13Func endp

Решение задачи: «Заполнение доп. сегмента ES (Nasm)»

textual
Листинг программы
mov es,какое-то значение
mov cx,65535
mov di,0; заполняем сегмент с 0 по 65535 байт
mov al,1
a0: stosb; mov es:[di],al   di:=di+1
     rol al,1
     loop a1

Объяснение кода листинга программы

  1. mov es,какое-то значение - Здесь ES (Extra Segment) присваивается определенное значение, которое будет использоваться в дальнейшем коде. Без этого значения невозможно корректно работать с сегментом.
  2. mov cx,65535 - CX (Counter) устанавливается в максимальное значение, которое может быть использовано в 16-битном режиме. Это значение будет использоваться для итерации по каждому байту в сегменте.
  3. mov di,0; заполняем сегмент с 0 по 65535 байт - DI (Data Indicator) устанавливается в 0, что определяет начальный адрес сегмента. Затем, используя цикл, каждый байт в диапазоне от 0 до 65535 будет заполнен значением AL (Accumulator).
  4. mov al,1 - AL (Accumulator) устанавливается в 1. Это значение будет использоваться для заполнения байтов в сегменте.
  5. a0: stosb; mov es:[di],al   di:=di+1 - Здесь начинается цикл, который будет выполняться до тех пор, пока не будет достигнуто максимальное значение CX. Команда STOS (Store String) используется для записи значения AL в байт по адресу ES:[DI]. Затем DI увеличивается на 1, чтобы перейти к следующему байту.
  6. rol al,1 - Команда ROL (Rotate Left) используется для сдвига значения AL на 1 бит влево. Это необходимо для обеспечения корректной работы цикла.
  7. loop a1 - Здесь начинается цикл, который будет выполняться до тех пор, пока не будет достигнуто максимальное значение CX. Команда LOOP (Loop) используется для перехода к началу цикла и продолжения его выполнения до тех пор, пока не будет выполнено условие выхода из цикла.

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы