Федеральное государственное образовательное учреждение
высшего профессионального образования
СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ
ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ
Кафедра: «Радиотехника»
Лабораторная работа №1
Выполнил:
Студент гр. Р54-4
Александров А. В.
Проверил:
Тронин О. А.
Красноярск 2007
model small ; директива модели памяти с параметром small
.data ; упрощенная директива сегмента данных
mass1 dw 10 dup (0) ; инициализация двухбайтного 10-элементного массива mass1
mass2 dw 10 dup (?) ; выделение памяти под двухбайтный 10-элементный массив mass2
buff db 8 dup (8) ; буфер ввода buff
mess1 db "Please enter 10 positive integers (0...65535): $" ; символьная цепочка mess1
mess2 db "chetnbIe chisla: $" ; символьная цепочка mess2
.stack 256h ; упрощенная директива для 256-байтного сегмента стека
.code ; упрощенная директива сегмента кода
innum proc ; начало процедуры innum
mov dx,offset buff ; инициализация dx адресом начала буфера ввода buff
mov ah,0Ah ; формирование функции буферизованного ввода с клавиатуры
int 21h ; программное прерывание типа 21h
mov dx,10 ; инициализация dx символом "Line Feed" ("Перевод Строки")
mov ah,02h ; формирование функции вывода единичного символа на экран
int 21h ; программное прерывание типа 21h
xor ax,ax ; очистка регистра ax
mov cl,buff[1] ; в младший байт регистра cx помещается число введенных символов
mov dl,buff[1] ; в младший байт регистра dx помещается число введенных символов
mov si,2 ; инициализация индексного регистра si двойкой
push 1 ; запись в стек числа 1
dec dl ; декремент dl
cmp dl,0 ; сравнение вида dl=0, и если true, то...
je stend ; ...переход на метку stend
push 10 ; запись в стек числа 10
dec dl ; декремент dl
cmp dl,0 ; сравнение вида dl=0, и если true, то...
je stend ; ...переход на метку stend
push 100 ; запись в стек числа 100
dec dl ; декремент dl
cmp dl,0 ; сравнение вида dl=0, и если true, то...
je stend ; ...переход на метку stend
push 1000 ; запись в стек числа 1000
dec dl ; декремент dl
cmp dl,0 ; сравнение вида dl=0, и если true, то...
je stend ; ...переход на метку stend
push 10000 ; запись в стек числа 10000
dec dl ; декремент dl
cmp dl,0 ; сравнение вида dl=0, и если true, то...
je stend ; ...переход на метку stend
stend: ; пользовательская метка stend
mov al,buff[si] ; запись в al si-ого символа буфера buff
sub al,30h ; разность вида ax:=al-30h
mov ah,0 ; обнуление ah
pop bx ; запись в регистр bx верхнего элемента стека
mul bx ; умножение вида (dx:ax):=ax*bx
add mass1[di],ax ; сумма вида mass1[di]:=mass1[di]+ax
inc si ; инкремент si
loop stend ; если cx еще не равно нулю, то cx:=cx-1 и переход к метке stend
ret ; возврат в основную процедуру
innum endp ; конец процедуры innum
outnum proc ; начало процедуры outnum
mov ah,9 ; формирование функции вывода строки на экран
mov dx,offset mess2 ; инициализация dx адресом начала символьной цепочки mess2
int 21h ; программное прерывание типа 21h
mov si,0 ; инициализация индексного регистра si нулем
star0: ; пользовательская метка star0
mov cx,0 ; инициализация счетчика cx нулем
mov ax,mass2[si] ; запись в регистр ax si-ого элемента массива array2
star1: ; пользовательская метка star1
xor dx,dx ; очистка dx
mov bx,10 ; запись в регистр bx числа 10
div bx ; деление вида (ax.dx):=ax/bx
mov bx,dx ; запись старшей части результата деления в bx
push bx ; запись содержимого bx в стек
inc cx ; инкремент cx
cmp ax,0 ; сравнение вида ax=0, и если false, то...
jne star1 ; ...переход на метку star1
star2: ; пользовательская метка star2
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.