Assume CS:code, DS:data, SS:stk

; Простая программа сложения 32-разрядных чисел

data segment para public "data" ; Сегмент данных

Sum dd 0 ; Переменная для суммы

Data ends

stk segment para stack "stack" ; Сегмент стека

Db 256 dup (?) ; Буфер для стека

Stk ends

code segment para public "code" use16 ; Сегмент кода

begin:

Mov ax,data ; Адрес сегмента данных в регистр AX

Mov ds,ax ; Запись AX в DS

; Основной фрагмент программы

Mov eax,12345678h ; Первый 32-разрядный операнд

Add eax,87654321h ; Второй 32-разрадный операнд

Mov dword ptr sum,eax ; Запись результата в sum

; Завершение программы

Mov ax,4C00h ; Функция завершения программы

Int 21h ; Функция Dos

Code ends

END begin

 

Поскольку в данном примере обрабатываются 32-разрядные числа, в текст программы необходимо включить директиву .386, разрешающую использование команд 32-разрядных процессоров. Кроме того, при компоновке программы с помощью программы tlink.exe следует указать ключ /3 для разрешения 32-разрядных операций.

Если рассмотреть листинг этой программы, можно увидеть как ко­манды МП 8086 для работы с 16-разрядными операндами, так и команды МП 386 для работы с 32-разрядными операндами. Для облегчения текста из протокола трансляции удалены строчные комментарии.

1 .386

Assume CS:code, DS:data, SS:stk

Простая программа сложения 32-разрядных чисел

5 00000000 data segment para public "data"

Sum dd 0

Data ends

9 00000000 stk segment para stack "stack"

10 00000000 0100*(??) db 256 dup (?)

Stk ends

13 0000 code segment para public "code" use16

14 0000 begin:

B8 0000s mov ax,data

E D8 mov ds,ax

Основной фрагмент программы

18 0005 66| B8 12345678 mov eax,12345678h

19 000B 66| 05 87654321 add eax,87654321h

20 0011 66| 67| A3 00000000r mov dword ptr sum,eax

Завершение программы

B8 4C00 mov ax,4C00h

B CD 21 int 21h

D code ends