; Простая программа сложения 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