1117
.pdfosh_v db 0 |
|
rezult dq 0 |
|
kol dq 0 |
|
datasg ends |
; конец сегмента данных |
;- сегмент кода---------------------------------- |
|
codesg segment para 'Code' ; para – параграф (сегмент должен начинаться с |
|
; |
адреса, кратного шестнадцати, т.е. на границе параграфа) |
begin proc far |
; начало процедуры (begin – имя процедуры; far – дальняя) |
assume cs:codesg,ds:datasg,ss:stacksg ; директива, устанавливающая соответствие
;сегментных регистров (cs, ds, ss) сегментам (ее обычный вид для EXE-программы)
;следующие строки должны быть в любой EXE-программе:
push ds |
|
; сохранение содержимого регистра ds в стеке (для возврата в DOS) |
|
xor ax,ax |
|
; ax:=0 |
|
push ax |
|
; ячейка в стеке для MS-DOS (требование – д.б. равна нулю) |
|
mov ax,datasg |
; инициализация регистра ds (заносится адрес |
||
mov ds,ax |
|
; начала сегмента данных) |
|
;--------- |
|
|
|
mov ax,0600h |
;\ |
| ah=06(прокрутка),al=00(весь экран) |
|
mov bh,07 |
|
; \ |
| нормальный атрибут (черно-белый) |
mov cx,0000 ; |
очистка экрана | верхняя левая позиция |
||
mov dx,314fh |
; / |
| нижняя правая позиция |
|
int 10h |
|
;/ |
| передача управления в BIOS |
mov ah,02 |
|
;\ |
| установка курсора |
mov bh,00 |
|
; \ |
| экран 0 |
mov dh,00 ; управление курсором | строка 00 |
|||
mov dl,00 |
|
; / |
| столбец 00 |
int 10h |
|
;/ |
| передача упр. в BIOS |
snova: |
|
|
|
xor ax,ax |
;\ |
|
|
mov al,b1 |
; | b1*b2 |
|
|
mul b2 |
;/ |
|
|
mov word ptr rezult,ax |
; занесение одного слова в байты rezalt и rezalt+1, т.е. в |
; |
мл. слово учетверенного слова rezalt (байты с rezalt+2 по rezalt+7 не изменяются) |
||||
|
call bin_ASCII |
;вызов процедуры перевода из bin в ASCII |
|||
|
mov ah,09h |
;вывод на экран |
|||
|
lea dx,msg_b1b2 |
; сообщения «b1*b2=» |
|||
|
int 21h |
|
|
|
|
|
mov ah,09h |
;вывод на экран |
|||
|
lea dx,ascval |
; полученного значения |
|||
|
int 21h |
|
|
|
|
|
call cursor |
|
|
|
|
|
mov ax,w1 |
|
|
|
|
|
mul w2 |
; w1*w2 |
|
||
|
mov word ptr rezult,ax |
; занесение одного слова в байты rezalt и rezalt+1 |
|||
|
mov word ptr rezult[2],dx |
; занесение одного слова в байты rezalt+2 и rezalt+3 |
|||
; |
call bin_ASCII |
|
|
(байты с rezalt+4 по rezalt+7 не изменяются) |
|
|
;вызов процедуры перевода из bin в ASCII (результат -> в ascval) |
||||
|
mov ah,09h |
; вывод на экран |
|||
|
|
|
|
|
111 |
lea dx,msg_w1w2 |
; сообщения « w1*w2= » |
|||
int 21h |
|
|
|
|
mov ah,09h |
|
; вывод на экран |
||
lea dx,ascval |
|
; полученного значения |
||
int 21h |
|
|
|
|
call cursor |
|
|
|
|
xor bx,bx |
;\ |
|
|
|
mov ax,w1 |
; | w1*b1 |
|
|
|
mov bl,b1 |
; | |
|
|
|
mul bx |
;/ |
|
|
mov word ptr rezult,ax |
|
; занесение одного слова в байты rezalt и rezalt+1 |
||
mov word ptr rezult+2,dx |
; занесение одного слова в байты rezalt+2 и rezalt+3 |
|||
; |
|
|
|
(байты с rezalt+4 по rezalt+7 не изменяются) |
call bin_ASCII |
|
;вызов процедуры перевода из bin в ASCII |
||
mov ah,09h |
|
; вывод на экран |
||
lea dx,msg_w1b1 |
|
; сообщения « w1*b1= » |
||
int 21h |
|
|
|
|
mov ah,09h |
|
; вывод на экран |
||
lea dx,ascval |
|
; полученного значения |
||
int 21h |
|
|
|
|
call cursor |
|
|
|
|
xor ax,ax |
|
|
|
|
mov al,b1 |
|
|
|
|
mul w2 |
|
|
|
|
mov word ptr rezult,ax |
|
; занесение одного слова в байты rezalt и rezalt+1 |
||
mov word ptr rezult+2,dx |
; занесение одного слова в байты rezalt+2 и rezalt+3 |
|||
; |
|
|
|
(байты с rezalt+4 по rezalt+7 не изменяются) |
call bin_ASCII |
|
;вызов процедуры перевода из bin в ASCII |
||
mov ah,09h |
|
; вывод на экран |
||
lea dx,msg_b1w2 |
|
; сообщения «b1* w2= » |
||
int 21h |
|
|
|
|
mov ah,09h |
|
;вывод на экран |
||
lea dx,ascval |
|
; полученного значения |
||
int 21h |
|
|
|
|
call cursor |
|
|
|
|
mov ah,02 ;\ |
| установка курсора |
|||
mov bh,00 ; \ |
| экран 0 |
|||
mov dh,24 ; управление курсором | строка 24 |
||||
mov dl,00 |
; / |
| столбец 00 |
||
int 10h |
;/ |
| передача упр. в BIOS |
||
mov ah,09h ;\ |
|
|
lea dx,msg_e ; вывод на экран сообщения «Для вывода нажмите любую клавишу»
int 21h |
;/ |
mov ah,0 |
; ожидание нажатия клавиши |
int 16h |
|
ret |
;выход в DOS |
begin endp |
|
; процедуры |
----------------------------- |
|
112 |
;сюда вставляется текст процедуры l_1proc7.asm из файла с таким же именем include l_1proc7.asm
;сюда вставляется текст процедуры bin_ASCII из файла bin_asci.asm
include bin_asci.asm codesg ends
end begin
==================================================================
Пример 1.8
;lab1pr8.asm ред. 17_12_05
;РАЗРАБОТАЛ МИШУРИН А.О., СТУДЕНТ ГРУППЫ 11БИ, ИЮЛЬ 2003 ГОДА. ;Программа (работает с МП 8086) вычисляет по формулам: w1/b1; b1/b2; d1/w1.
;Компиляция (clab1pr8.bat):
;tasm.exe lab1pr8.asm
;tlink.exe lab1pr8.obj
;-сегмент стека---------------------------------
stacksg segment para stack 'Stack' db 1024 dup(?)
stacksg ends
;-сегмент данных----------------------------------
datasg segment para 'Data' msg_b1 db "b1=","$" msg_w1 db "w1=","$" msg_d1 db "d1=","$" msg_b1b2 db "b1/b2=","$" msg_w1w2 db "w1*w2=","$" msg_d1w1 db "d1/w1=","$" msg_w1b1 db "w1/b1=","$"
msg_e db "Для выхода нажмите любую клавишу!","$" msg_err1 db "Ошибка#1: ошибка ввода!","$" msg_err2 db "Ошибка#2: деление на нуль!","$" ascval db "00000000000000000000","$" perevod_cursora db 0dh,0ah,"$"
; сюда вставляются списки параметров (из файла vvod_bwd.asm)
include vvod_bwd.asm ; include – директива, вставляющая в текст программы текст
; |
файла (в данном случае вставляется текст файла vvod_bwd.asm) |
b1 db 255 |
|
b2 db 10 |
|
w1 dw 65535 |
|
w2 dw 1000 |
|
d1 dd 2147483647 |
|
d2 dd 3000000000 |
|
prom dw 0 |
|
promd dd 0 |
|
fml dd 0 |
|
osh_v db 0 |
|
rezult dq 0 |
|
kol dq 0 |
|
datasg ends |
; конец сегмента данных |
|
113 |
;- сегмент кода---------------------------------- |
; para – параграф (сегмент должен начинаться с |
codesg segment para 'Code' |
|
; |
адреса, кратного шестнадцати, т.е. на границе параграфа) |
begin proc far |
; начало процедуры (begin – имя процедуры; far– дальняя) |
assume cs:codesg,ds:datasg,ss:stacksg ; директива, устанавливающая соответствие
;сегментных регистров (cs, ds, ss) сегментам (ее обычный вид для EXE-программы)
;следующие строки должны быть в любой EXE-программе:
push ds |
|
|
|
|
|
sub ax,ax |
|
|
|
|
|
push ax |
|
|
|
|
|
mov ax,datasg |
|
|
|
||
mov ds,ax |
|
|
|
|
|
mov ax,0600h |
;\ |
| ah=06(прокрутка), al=00(весь экран) |
|||
mov bh,07 |
|
; \ |
| нормальный атрибут (черно-белый) |
||
mov cx,0000 ; очистка экрана | верхняя левая позиция |
|||||
mov dx,314fh |
; / |
| нижняя правая позиция |
|||
int 10h |
|
;/ |
| передача управления в BIOS |
||
mov ah,02 ;\ |
|
| установка курсора |
|||
mov bh,00 ; \ |
|
| экран 0 |
|
||
mov dh,00 ; управление курсором | строка 00 |
|||||
mov dl,00 |
; / |
|
| столбец 00 |
|
|
int 10h |
;/ |
|
| передача упр. в BIOS |
||
snova: |
|
|
|
|
|
; деление слова на байт |
|
|
|||
xor dx,dx |
;\ |
dx:=0 |
|
|
|
xor bx,bx |
; \ |
bx:=0 |
|
|
|
mov ax,w1 |
; |w1/b1 |
ax:w1 |
|
||
mov bl,b1 |
; / |
bx:=b1 |
|
||
div bx |
;/ |
ax:= w1/b1 и dx:=остаток |
|||
mov word ptr rezult,ax |
; подготовка к вызову bin_ASCII |
||||
call bin_ASCII |
|
;вызов процедуры перевода из bin в ASCII |
|||
; |
|
|
|
помещает результат в ascval |
|
mov ah,09h |
|
; вывод на экран |
|||
lea dx,msg_w1b1 |
|
; сообщения |
«w1/b1= » |
||
int 21h |
|
|
|
|
|
mov ah,09h |
|
; вывод на экран |
|||
lea dx,ascval |
|
; полученного значения |
|||
int 21h |
|
|
|
|
|
call cursor |
|
|
|
|
|
; деление байта на байт |
|
|
|||
xor ax,ax |
;\ |
|
|
|
|
mov al,b1 |
; | b1/b2 |
|
|
||
div b2 |
; | |
|
|
|
|
xor ah,ah |
;/ |
|
|
|
|
mov word ptr rezult,ax |
|
|
|||
call bin_ASCII |
|
;вызов процедуры перевода из bin в ASCII |
|||
mov ah,09h |
|
; вывод на экран |
|||
lea dx,msg_b1b2 |
|
;сообщения |
«b1/b2=» |
||
|
|
|
|
|
114 |
int 21h |
|
|
|
mov ah,09h |
; вывод на экран |
||
lea dx,ascval |
; полученного значения |
||
int 21h |
|
|
|
call cursor |
|
|
|
;деление двойного слова на слово (d1/w1)
;деление вычитанием (результат верен даже в случае, когда частное превышает число
;65536, т.е. не помещается в слово)
cmp w1,0 ;\ |
|
|
|
|
jz s1er |
|
; обнаружена попытка деления на нуль |
||
mov ax,word ptr d1 |
|
|
||
mov dx,word ptr d1+2 |
|
|
||
xor bx,bx |
|
|
|
|
xor cx,cx |
|
|
|
|
s1: cmp dx,0 |
|
|
|
|
jnz s2 |
|
|
|
|
cmp ax,w1 |
|
|
|
|
jnb s2 |
|
|
|
|
jmp s3 |
; | d1/w1 (вычитанием) + проверка деления на нуль |
|||
s2: sub ax,w1 |
|
|
|
|
sbb dx,00 |
|
|
|
|
add bx,1 |
|
|
|
|
adc cx,0 |
|
|
|
|
jmp s1 |
|
|
|
|
s3: jmp s4 |
|
|
|
|
s1er: mov ah,09h |
|
|
|
|
lea dx,msg_err2 |
|
|
|
|
int 21h |
|
|
|
|
jmp sn_e |
|
|
|
|
s4: |
|
|
|
|
mov word ptr rezult,bx |
|
|
||
mov word ptr rezult+2,cx |
|
|
||
call bin_ASCII |
|
;вызов процедуры перевода из bin в ASCII |
||
mov ah,09h |
|
;вывод на экран |
||
lea dx,msg_d1w1 |
|
; сообщения «d1/w1=» |
||
int 21h |
|
|
|
|
mov ah,09h |
|
;вывод на экран |
||
lea dx,ascval |
|
; полученного значения |
||
int 21h |
|
|
|
|
call cursor |
|
|
|
|
sn_e: mov |
ah,02 |
;\ |
| |
установка курсора |
mov bh,00 |
; \ |
| экран 0 |
||
mov dh,24 ; управление курсором | строка 23 |
||||
mov dl,00 |
; / |
| столбец 00 |
||
int 10h |
;/ |
| передача упр. в BIOS |
; деление через div (но если частное превышает число 65536, то результат НЕВЕРЕН!) mov ax,word ptr d1
mov dx,word ptr d1+2
115
div w1 |
|
|
|
mov word ptr rezult,ax |
; результат деления d1/w1 |
||
mov word ptr rezult+2,0 |
|
|
|
call bin_ASCII |
;вызов процедуры перевода из bin в ASCII |
||
mov ah,09h |
;вывод на экран |
||
lea dx,msg_d1w1 |
; сообщения «d1/w1=» |
||
int 21h |
|
|
|
mov ah,09h |
;вывод на экран |
||
lea dx,ascval |
; полученного значения |
||
int 21h |
|
|
|
call cursor |
|
|
|
mov ah,09h |
; вывод на экран сообщения |
||
lea dx,msg_e |
;"Для выхода нажмите любую клавишу!" |
||
int 21h |
|
|
|
mov ah,0 |
;-ожидание нажатия клавиши |
||
int 16h |
|
|
|
ret |
; возврат в DOS |
||
begin endp |
|
|
;процедуры
;сюда вставляется текст процедуры l_1proc7.asm из файла с таким же именем include l_1proc7.asm
;сюда вставляется текст процедуры bin_ASCII из файла bin_asci.asm
include bin_asci.asm codesg ends
end begin
116
|
|
|
|
|
|
|
|
|
|
Приложение 1.1 |
||
|
|
Варианты формул для программирования |
|
|
||||||||
|
|
Первая формула (в 1 – 5, 7, 9 – 12 и 14 лабораторных работах) |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
№ |
Выполняемые |
№ |
Выполняемые |
|
|
№ |
Выполняемые |
|||||
п/п |
вычисления |
п/п |
вычисления |
|
|
п/п |
вычисления |
|||||
1 |
b1+b2-w1*w2+d1/b3 |
17 |
|
w1*w2-d1/b1+w3+b2 |
33 |
d1+b1-w1*w2*b3+w3/b2 |
||||||
2 |
b1-b2+w1*w2-d1/b3 |
18 |
|
w1*w2+d1/b1-(w3+b2) |
34 |
d1-b1-w1*w2*b3+w3/b2 |
||||||
3 |
w1+w2-b1*b2+d1/b3 |
19 |
|
b1*b2-w1/b3+d1+d2 |
35 |
d1+w1+b4-b1*b2+w2/b3 |
||||||
4 |
w1-w2+b1*b2-d1/b3 |
20 |
|
b1*b2+w1/b3-(d1-d2) |
36 |
d1-w1+b1*b2*b4-w2/b3 |
||||||
5 |
w1+b1-w1*w2+d1/b2 |
21 |
|
w1*w2-w3/b1+d1+b2 |
37 |
w1*w2*b3-d1/b1+b2+b3 |
||||||
6 |
w1-b1+w1*w2-d1/b2 |
22 |
|
w1*w2+w3/b1-(d1-b2) |
38 |
w1*w2*b3+d1/b1-(b2-b3) |
||||||
7 |
d1+d2-b1*b2+w1/b3 |
23 |
|
b1*b2-w1/b3+d1+w2 |
39 |
b1*b2*b3-d1/b3+w1+w2 |
||||||
8 |
d1-d2+b1*b2-w1/b3 |
24 |
|
b1*b2+w1/b3-(d1-w2) |
40 |
b1*b2*b3+d1/b3-(w1+w2) |
||||||
9 |
d1+b1-w1*w2+w3/b2 |
25 |
|
b1+b2+b3-w1*w2+d1/b3 |
41 |
w1*w2-d1/b1+w3+b2+b3 |
||||||
10 |
d1-b1-w1*w2+w3/b2 |
26 |
|
b1-b2-b3+w1*w2-d1/b3 |
42 |
w1*w2+d1/b1-w3+b2*b3 |
||||||
11 |
d1+w1-b1*b2+w2/b3 |
27 |
|
w1+w2+w3-b1*b2+d1/b3 |
43 |
b1*b2*b3-w1/b3+d1+d2 |
||||||
12 |
d1-w1+b1*b2-w2/b3 |
28 |
|
w1-w2-w3+b1*b2-d1/b3 |
44 |
b1*b2*b3+w1/b3-(d1-d2) |
||||||
13 |
w1*w2-d1/b1+b2+b3 |
29 |
|
w1+b1+b3-w1*w2+d1/b2 |
45 |
w1*w2-w3/b1+d1+b2 |
||||||
14 |
w1*w2+d1/b1-(b2-b3) |
30 |
|
w1-b1-b3+w1*w2-d1/b2 |
46 |
w1*b3+w3/b1-(d1-b2) |
||||||
15 |
b1*b2-d1/b3+w1+w2 |
31 |
|
d1+d2-b1*b2*b4+w1/b3 |
47 |
b1*b2*b3-w1/b3+d1+w2 |
||||||
16 |
b1*b2+d1/b3-(w1+w2) |
32 |
|
d1-d2+b1*b2*b4-w1/b3 |
48 |
b1*b2+w1/b3-(d1-w2) |
||||||
|
|
Вариант № 49 для лабораторной работы №1 |
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Выполняемые |
|
Х1= |
|
Выполняемые |
Х1= |
|
Выполняемые |
Х1= |
|
|
|
|
вычисления |
|
|
|
вычисления |
|
|
вычисления |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
b1*b2 |
|
1 |
|
d5/d6 |
12 |
|
w16-w17 |
23 |
|
|
|
|
w1*w2 |
|
2 |
|
d7/w9 |
13 |
|
w18+b17 |
24 |
|
|
|
|
b3*w2 |
|
3 |
|
d8/b10 |
14 |
|
w19-b18 |
25 |
|
|
|
|
b4*d1 |
|
4 |
|
w10/w11 |
15 |
|
d13+d14 |
26 |
|
|
|
|
w3*d2 |
|
5 |
|
w12/b11 |
16 |
|
d15-d16 |
27 |
|
|
|
|
w4*b5 |
|
6 |
|
d9/d10 |
17 |
|
d17+b19 |
28 |
|
|
|
|
d3*b6 |
|
7 |
|
d11/w13 |
18 |
|
d18-b20 |
29 |
|
|
|
|
d4*w5 |
|
8 |
|
d12/b12 |
19 |
|
d19+w20 |
30 |
|
|
|
|
b7/b8 |
|
9 |
|
b13+b14 |
20 |
|
d20-w21 |
31 |
|
|
|
|
w6/w7 |
|
10 |
|
b15-b16 |
21 |
|
|
|
|
|
|
|
w8/b9 |
|
11 |
|
w14+w15 |
22 |
|
|
|
|
|
b1, b2, b3 – переменные, занимающие один байт, т.е. определенные директивой db;
w1, w2, w3 – переменные, занимающие одно слово (два байта), т.е. определенные директивой dw;
d1, d2 – переменные, занимающие двойное слово (четыре байта), т.е. определенные в сегменте данных директивой dd.
117
Приложение 1.2
Структура (схема) программы
А. Общая структура
; Лабораторная работа №1 ; выполнена студентом группы <обозначение группы> <Фамилия Имя Отчество>;
;тема: «Определение данных. Операции двоичной арифметики. Экранные операции»
;вычисление по формуле <первая формула индивидуального задания>
; г.Омск, СибАДИ, <месяц> <год> г.
;Ограничения: не вводить отрицательных чисел;
;не получать отрицательный результат.
;Сегмент стека
;Сегмент данных
;Сегмент кода
;Начало сегмента кода
;Начало главной процедуры
;Директива, устанавливающая соответствие сегментных регистров сегментам (директива assume)
;Команды, которые должны быть в любой EXE-программе
;Вывод на экран сообщения 'Привет, пользователь!'
;Вывод на экран сообщения 'Эта программа производит вычисления по формуле d1 - (b1+ w1/b2)*w2’
;ввод с клавиатуры числа b1
;ввод с клавиатуры числа b2
;ввод с клавиатуры числа w1
;ввод с клавиатуры числа w2
;ввод с клавиатуры числа d1
; вычисление по формуле |
<формула> |
;Вывод результата на экран
;выход из главной процедуры (возврат в DOS)
;Конец главной процедуры
;Конец сегмента кода (директива ends)
;Конец программы (директива end)
118
Продолжение прил. 1.2
Б. Детализированная структура (шаг 1)
; Лабораторная работа №1 ; выполнена студентом группы <обозначение группы> <Фамилия Имя Отчество>;
;тема: «Определение данных. Операции двоичной арифметики. Экранные операции»
;вычисление по формуле <первая формула индивидуального задания>
; г. Омск, СибАДИ, <месяц> <год> г.
;Ограничения: не вводить отрицательных чисел;
;не получать отрицательный результат.
;Сегмент стека
;Начало сегмента стека (директива segment)
;резервирование ячеек памяти под стек
;Конец сегмента стека (директива ends)
; Сегмент данных
;Начало сегмента данных (директива segment)
;ячейки памяти b1, b2,…,bm, определенные директивой db;
;ячейки памяти w1, w2,…,wn, определенные директивой dw;
;ячейки памяти d1, d2,…,dk, определенные директивой dd;
;списки параметров для ввода с клавиатуры
;символьные константы (тексты сообщений, выдаваемых на экран)
;ячейки промежуточных результатов
;Конец сегмента данных (директива ends)
;Сегмент кода
;Начало сегмента кода (директива segment)
;Начало главной процедуры (директива proc)
;Директива, устанавливающая соответствие сегментных регистров сегментам (директива assume)
;Команды, которые должны быть в любой EXE-программе
;Вывод на экран сообщения 'Привет, пользователь!' ;Вывод на экран сообщения
;'Эта программа производит вычисления по формуле d1 - (b1+ w1/b2)*w2’
;ввод с клавиатуры и преобразование из ASCII в двоичное (bin) числа b1
;ввод с клавиатуры и преобразование из ASCII в двоичное (bin) числа b2
;ввод с клавиатуры и преобразование из ASCII в двоичное (bin) числа w1
;ввод с клавиатуры и преобразование из ASCII в двоичное (bin) числа w2
;ввод с клавиатуры и преобразование из ASCII в двоичное (bin) числа d1
; вычисление по формуле <формула> ; Вывод результата на экран
; выход из главной процедуры (возврат в DOS, команда ret)
;Конец главной процедуры (директива endp)
;Конец сегмента кода (директива ends)
;Конец программы (директива end)
119
Продолжение прил. 1.2
В. Детализированная структура (шаг 2)
; Лабораторная работа №1 ; выполнена студентом группы <обозначение группы> <Фамилия Имя Отчество>;
;тема: «Определение данных. Операции двоичной арифметики. Экранные операции»
;вычисление по формуле <первая формула индивидуального задания>
; г. Омск, СибАДИ, <месяц> <год> г.
;Ограничения: не вводить отрицательных чисел;
;не получать отрицательный результат.
;Сегмент стека
;Начало сегмента стека (директива segment)
;резервирование 1024 ячеек памяти под стек
;(директива db оператор dup)
;Конец сегмента стека (директива ends)
; Сегмент данных
;Начало сегмента данных (директива segment)
;ячейки памяти b1, b2,…,bm, определенные директивой db;
;ячейки памяти w1, w2,…,wn, определенные директивой dw;
;ячейки памяти d1, d2,…,dk, определенные директивой dd;
;списки параметров для ввода с клавиатуры значений, занимающих
;один байт, т.е. значений b1, b2,
; список параметров vvod_b (поле для символов - field_b);
;одно слово (w1, w2)
;список параметров vvod_w (поле для символов - field_w); двойное слово (d1)
;список параметров vvod_d (поле для символов - field_d);
;символьные константы (тексты сообщений, выдаваемых на экран)
;ячейки памяти, используемые процедурами ascii_binb, ascii_binw, ascii_bind, bin_ascii и др.
;ячейки промежуточных результатов
;Конец сегмента данных (директива ends)
;Сегмент кода
;Начало сегмента кода (директива segment)
;Начало главной процедуры (директива proc)
;Директива, устанавливающая соответствие сегментных регистров сегментам
(директива assume)
;Команды, которые должны быть в любой EXE-программе ;очистка экрана ;Вывод на экран сообщения 'Привет, пользователь!',
;Вывод на экран сообщения
;'Эта программа производит вычисления по формуле d1- (b1+ w1/b2)*w2’
;***************************************************************************
;ввод с клавиатуры и преобразование из ASCII в двоичное (bin) числа b1 ;***************************************************************************
;вывод на экран сообщения: 'b1= '
;ввод с клавиатуры (функция 0ah) значения переменной b1 в field_b списка параметров vvod_b
120