St segment stack
dw 64 dup (?)
St ends
N equ 1000
Data segment public
A dw N dup (?)
public A,N; Входные точки
extrn Summa:word; Внешняя переменная
Diagn db 'Переполнение!',13,10,'$'
Data ends
Code segment public
assume cs:Code,ds:Data,ss:St
Start:mov ax,Data
mov ds,ax
mov cx,N
sub bx,bx; индекс массива
L: inint A[bx];Ввод массива A
add bx,type A
loop L
extrn Sum:far; Внешнее имя
call Sum; Процедура суммирования
outint Summa
Newline
; А теперь вызов с ошибкой
mov A,7FFFh; Maxint
mov A+2,1; Для переполнения
call Sum
outint Summa; Сюда возврата не будет
Newline
finish ; Вообще-то не нужен
public Error; Входная точка
Error:lea dx,T
Outstr
Finish
Code ends
end Start; головной модуль
В нашем головном модуле три входные точки с именами A,N и Error и два внешних имени: Sum, которое имеет тип дальней метки, и Summa, которое имеет тип слова. Работу программы подробно рассмотрим после написания текста второго модуля с именем p2.asm.
Comment * модуль p2.asm
Суммирование массива, контроль ошибок
include io.asm не нужен – нет ввода/вывода
Используется стек головного модуля
В конечном end не нужна метка Start
*
Data segment public
Summa dw ?
public Summa; Входная точка
extrn N:abs; Внешняя константа
extrn A:word; Внешний адрес
Data ends
Code segment public
assume cs:Code,ds:Data
public Sum; Входная точка
Дата добавления: 2015-10-05; просмотров: 1164;