Перенести из массива в стек - Assembler

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

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

Создать массив из 10 заданных целых чисел, записать 5 элемент в стек, используя режим прямой адресации с индексированием. Переписать элемент из стека в переменную оперативной памяти Five. Не понимаю как из стека переписать в переменную

Решение задачи: «Перенести из массива в стек»

textual
Листинг программы
.MODEL SMALL
.STACK 256
.DATA
A DB 25,3,95,7,12,31,75,19,61,45
.DATA?
FIVE DW (?)
.CODE
BEG:
MOV AX, @data
MOV DS, AX
XOR AX, AX
 
MOV SI, 5
MOV AL, A[SI-1]   ;AL=12=1Fh
PUSH AX           ;ax=001Fh
POP FIVE
 
MOV AX, 4C00h
INT 21h 
 
END BEG

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

  1. Объявляется модель памяти SMALL.
  2. Размер стека устанавливается на 256 байт.
  3. Объявляется секция .DATA, где объявляется переменная A со значениями 25, 3, 95, 7, 12, 31, 75, 19, 61 и 45.
  4. Объявляется секция .DATA?, где объявляется переменная FIVE с неизвестным значением.
  5. Объявляется секция .CODE, в которой содержится основной код программы.
  6. В начале основного кода, происходит сохранение адреса сегмента данных в регистр AX и перемещение его в регистр DS, чтобы установить сегмент данных на данные, объявленные в секции .DATA.
  7. Обнуляется регистр AX с помощью операции XOR AX, AX.
  8. В регистр SI помещается значение 5.
  9. В регистр AL помещается значение A[SI-1], то есть 12 (0x1F), полученное из массива A.
  10. Значение регистра AX помещается в стек с помощью операции PUSH AX.
  11. Значение из стека извлекается и помещается в переменную FIVE с помощью операции POP FIVE. Теперь переменная FIVE содержит значение 0x1F.
  12. В регистр AX помещается значение 4C00h.
  13. Происходит вызов прерывания 21h с помощью операции INT 21h.
  14. Программа завершается.

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

15   голосов , оценка 3.733 из 5