, EDX, ESP, EBP, ESI, EDI.
Використовуючи регістр покажчика вази BP, до будь-якого елементу стека можна звернутися наступним чином:
BP, SP; (SP) ® BP
MOV AX, [BP +6]; (SS: (BP +6)) ® AX.
Вміст двох байтів пам'яті, починаючи з адреси, певного друга операндом, пересилається в регістр AX.
Наведемо приклад програми, що використовує розглянуті команди і директиви для пересилання вмісту 4 байтів пам'яті з однієї області пам'яті в іншу і вивід на екран.
Prom.ASM
Page, 120
; опис сегмента стека
SSeg Segment Para stack stack 100h DUP (?) ends
; опис сегмента даних
DSeg Segment Para Public Data ??p>
DAN DB 1, 3, 5, 7 DB 4 DUP (?)
DSeg endS
; кодовий сегмент оформлений як одна зовнішня процедура
СSeg Segment Para Public Сode SS: SSeg, DS: DSeg, CS: CSeg Proc FAR
PUSH DS; організація зв'язку з ОС
XOR AX, AX
PUSH AX
MOV AX, DSeg; ; завантаження адреси сегмента даних в регістр DS
MOV DS, AX;
; пересилання даних в зворотній послідовності з виведенням на екран
MOV AH, 6DL, DANREZ +3, DL21h
MOV DL, DAN +1 REZ +2, DL21h
MOV DL, DAN +2 REZ +1, DL21h
MOV DL, DAN +3
MOV REZ, DL21h
;
MOV AH, 4CH21hendp ends
End Start
Директива TITLE визначає заголовок лістингу програми, може містити до 60 символів. Директива NAME визначає кількість рядків на сторінці лістингу - 1-й параметр і кількість символів на сторінці - 2-й параметр. Якщо якийсь з параметрів відсутня, то використовується значення за замовчуванням. Якщо відсутні обидва параметри, то директива здійснює перехід на наступну сторінку лістингу.
Директива початку сегмента
Загальний вигляд директиви:
<ім'я> Segment <Вирівнювання> <Тип> <Розмір> < клас>
Будь-який з операндів може бути відсутнім. Якщо є, то буде виведено повідомлення про помилку при спробі запису в цей сегмент.
Операнд <вирівнювання> визначає вимоги до адресою початку сегмента. Значеннями цього операнда можуть бути:
BYTE - адреса початку сегмента може бути будь-яким,
WORD - адреса початку сегмента кратний 2,
DWORD - адреса початку сегмента кратний 4,
Para - адреса початку сегмента кратний 16 - по-замовчуванню,
Page - адреса початку сегмента кратний 256.
Операнд <тип> визначає тип сегмента. У сегменті стека вказується stack, для інших сегментів - Public. Якщо такий параметр присутній, то всі сегменти з одним ім'ям і різними класами об'єднуються в послідовність у порядку їх запису. Значення Common, каже, що сегменти з одним ім'ям об'...