Инициализация двухбайтного 10-элементного массива maximum. Выделение памяти под вспомогательную переменную maximum

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

Фрагмент текста работы

model       small

.data

V1                                  dw             1234h

V2                                  dw             1 DUP(?)

.code

mov           ax,@data                                                                                                                                         

mov           ds,ax                                                                                                          

mov Si,50                                                           ;индекс(начальный адрес)

mov           ax,V1                                                ;записываем число в регистр из массива

mov   bx,1010b                     ;делитель (10)

mov dx,0000h                              

add ax,0000h                                 ;опереляем знак

js minus                                          ;переход  если  ax<0 то перейти на метку minus

plus:                                                                                                            ;метка перехода

div bx                                                                   ;делим число  dx=остаток, aч=частное 

mov           V2[SI],Dx                    ;остаток записываем в массив V2

dec SI                                                                   ;отнимаем 1 от индекса

dec SI

mov Dx,0000h                              ;очищаем остаток

mov v2[SI],1100b    ; означает знак плюс(C) после перезаписи становится в старшей тетраде

cmp ax,0                                         ;сравниваем             частное с 0  если не равно 0 то переходим на метку next         

jne plus

jmp ennd                                                           ;безусловный переход на завершение программы

minus:     

not ax                                                                  ; инвертирование числа

minusfor:                   

div bx                                                                   ;делим число  dx=остаток, ax=частное 

mov           V2[SI],Dx                    ;остаток записываем в массив V2

dec SI                                                                   ;отнимаем 1 от индекса

dec SI

mov Dx,0000h                              ;очищаем остаток

mov v2[SI],1101b    ;означает знак минус(D) после перезаписи становится в старшей тетраде

cmp ax,0                                         ;сравниваем             частное с 0  если не равно 0 то переходим на метку next         

jne minusfor

ennd:                                              

mov           ax,4c00h

int              21h

end

;ВАРИАНТ-13: Сформировать массив из 10 двухбайтных чисел. Найти номер максимального числа

;///////////////////////////////////////////////////////////////////////////////////////////////////////////////

model small                                                                                              ; директива модели памяти model с параметром small

.data                                                                                                            ; упрощенная директива сегмента данных

mass dw 12,1,339,46,54,6,7,108,9,10      ; инициализация двухбайтного 10-элементного массива                                                         

maximum dw ?                                                                   ; выделение памяти под вспомогательную переменную maximum                                                                             

number dw ?                                                                       ; выделение памяти под переменную number                                       

.stack 256h                                                                                                ; упрощенная директива для 256-байтного сегмента стека

.code                                                                                                           ; упрощенная директива сегмента кода

;--------------------------------------------------------------------------------------------------------------max proc                                                                                ; начало процедуры max

mov maximum,ax                                                              ; в maximum записывается максимальный элемент массива с индексом si

mov ax,si                                                            ; в ax записывается индекс максимального элемента массива

div bl                                                                                        ; выполняется деление вида ax:=ax/bl

mov number,ax                                                                  ; в переменную number записывается результат деления

inc number                                                                           ; number уменьшается на единицу

add si,2                                                               ; индекс массива увеличивается на 2

ret                                                                                            ; возврат в основную процедуру main

max endp                                                                                                  ; конец процедуры max

;--------------------------------------------------------------------------------------------------------------main proc                                                           ; начало процедуры main

mov ax,@data                              ; инициализация сегментного...           

mov ds,ax                                      ; ...регистра ds        

mov bl,2                      ; в младший байт регистра bx записывается 2

mov si,0                       ; в si записывается 0

mov cx,10                                       ; в сх записывается 10

mov ax,mass[0]                           ; в ax записывается первый элемент массива mass

mov maximum,ax                       ; в переменную maximum записывается регистр ax

cycle:                                                                   ; пользовательская метка cycle

mov ax,mass[si]                          ; в ax записывается si-й элемента массива mass

cmp ax,maximum                       ; сравнение вида ax>=maximum и если ИСТИНА,...

jae subprog                                   ; ...то переход на метку subprog

add si,2                        ; увеличение si на 2

loop cycle                                       ; уменьшение cx на 1, и если cx не равно 0, то переход на метку cycle

jmp endpr                                      ; в противном случае происходит безусловный переход на метку endpr

subprog:                                         ; пользовательская метка subprog

call max                       ; вызов процедуры max

loop cycle                                       ; уменьшение cx на 1, и если cx не равно 0, то переход на метку cycle          

endpr:                                                                 ; пользовательская метка endprog

mov ax,4c00h                               ; формирование функции стандартного выхода                                     

int 21h                                             ; формирование прерывания типа 21h и стандартный выход         

main endp                                                         ; конец процедуры main

;--------------------------------------------------------------------------------------------------------------end main                                        ; конец программы с точкой входа main

;///////////////////////////////////////////////////////////////////////////////////////////////////////////////

;ВАРИАНТ-19: Написать программу преобразования двухбайтового числа в двоично-десятичное число с учетом знака

;///////////////////////////////////////////////////////////////////////////////////////////////////////////////

model small                                                      ; директива модели памяти model с параметром small

.data                                                                    ; упрощенная директива сегмента данных

number dw -13905 ; инициализация числа в диапазоне 0...65535 или -32768...+32767

bcd db 5 dup(0)                           ; инициализация пятиэлементного нулевого массива bcd

.stack 256h                                                        ; упрощенная директива для 256-байтного сегмента стека

.code                                                                   ; упрощенная директива сегмента кода

;--------------------------------------------------------------------------------------------------------------main proc                                       ; начало процедуры main

mov ax,@data          ; инициализация сегментного...                              

mov ds,ax                   ; ...регистра ds

push 1                          ; запись в стек числа 1             (для одноразрядного числа)

push 10                        ; запись в стек числа 10 (для двухразрядного числа)

push 100  ; запись в стек числа 100 (для трехразрядного числа)

push 1000                   ; запись в стек числа 1000 (для четырехразрядного числа)

push 10000                 ; запись в стек числа 10000 (для пятиразрядного числа)

mov si,4   ; инициализация индексного регистра si числом 4

mov ax,number       ; запись в регистр ax исходного числа number

mov di,1  ; инициализация регистра di (если 1 - число отрицательное)

cmp di,1   ; проверка di на единицу, и...

je sign                          ; ...если di=1, то переход на метку sign

jmp cycle ; безусловный переход к циклу cycle

sign:

neg ax                          ; обращение знака у числа, находящегося в ax (т. е. ax:=0-ax)

cycle:

pop bx                         ; запись в регистр bx верхнего элемента стека

div bx                           ; деление вида (ax:dx):=ax/bx, где в ax - целая, в dx - дробная часть

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

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

Тип:
Конспекты лекций
Размер файла:
54 Kb
Скачали:
0