Формирование массива из 10 двухбайтных чисел, переписать во второй массив все положительные числа

Страницы работы

Содержание работы

Федеральное государственное образовательное учреждение

 высшего профессионального образования

СИБИРСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ

ПОЛИТЕХНИЧЕСКИЙ ИНСТИТУТ

Кафедра: «Радиотехника»

Лабораторная работа №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

Похожие материалы

Информация о работе