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 - дробная часть
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.