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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

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

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

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.