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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: