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