Задание № 1 (вариант № 4):
Сформировать массив и 10 двухбайтных чисел. Переписать во второй массив все положительные числа.
Текст программы:
1)
STACKSG SEGMENT PARA USE16
A DW 25 DUP(0)
B DW 25 DUP(0)
С DB 1 DUP(0)
ENTS DB 0AH,0DH,24H
FIN DB 'fin.txt',00H
FOUT DB 'fout.txt',00H
STACKSG ENDS
CODESG SEGMENT PARA'Code'
BEGIN PROC FAR
ASSUME DS:STACKSG,CS:CODESG
MOV AX,STACKSG
MOV DS,AX
;Чтение с клавиатуры и запись в массив А
MOV CX,10
LEA SI,A
M100: MOV AH,01H
INT 21H
MOV [SI],AL
INT 21H
MOV [SI+1],AL
INT 21H
MOV [SI+2],AL
INT 21H
MOV [SI+3],AL
MOV [SI+4],20H
ADD SI,5
MOV AH,09H
LEA DX,ENTS
INT 21H
LOOP M100
;Сравнение
LEA SI,A
LEA DI,B
MOV CX,10
M0: MOV AL,[SI]
CMP AL,37H
JG M1
ADD SI,5
LOOP M0
JMP M3
M1: MOV BL,[SI]
MOV [DI],BL
MOV BL,[SI+1]
MOV [DI+1],BL
MOV BL,[SI+2]
MOV [DI+2],BL
MOV BL,[SI+3]
MOV [DI+3],BL
MOV BL,[SI+4]
MOV [DI+4],BL
ADD SI,5
ADD DI,5
LOOP M0
M3:
MOV AH,09H
LEA DX,ENTS
INT 21H
LEA DX,B
MOV AH,09H
INT 21H
MOV AX,4C00H
INT 21H
BEGIN ENDP
CODESG ENDS
END BEGIN
2)
seg_data segment para public 'data'
mas_in dw 0ah dup ('?')
mas_out dw 0ah dup ('#')
razrad dw 0ah
des_t dw 2710h
tis dw 1000
sot dw 100
des dw 10
fmas_in db 80 dup ('#')
fmas_out db 80 dup ('#')
file_in db "C:\files\in.dat",0
file_out db "C:\files\out.dat",0
seg_data ends
seg_stack segment stack
db 256 dup ('?')
seg_stack ends
seg_code segment para public 'code'
main proc
assume ds:seg_data, cs:seg_code, ss:seg_stack
mov ax,seg_data
mov ds,ax
; Обнуляем регистры
mov ax,0
mov bx,0
mov cx,0
mov dx,0
mov si,0
mov di,0
; Открываем файл с первым массивом
mov ax,3d00h
lea dx,file_in
int 21h
; Читаем данные из файла
read: mov bx,ax
mov ah,3fh
mov cx,80
lea dx,fmas_in
int 21h
; Закрываем файл с первым массивом
mov ah,3eh
int 21h
; Ввод элементов массива
ent: xor bx,bx
mov al,fmas_in[si]
add si,1
cmp al,2dh
jne ddd
push 1
jmp dd4
ddd: push 0
dd4: mov al,fmas_in[si]
add si,1
sub al,30h
xor ah,ah
add bx,ax
mov cx,4
cikl:
mov al,fmas_in[si]
add si,1
push ax
mov ax,bx
mul razrad
mov bx,ax
pop ax
sub al,30h
xor ah,ah
add bx,ax
loop cikl
add si,2
jmp zap
; Запись
zap: pop ax
cmp ax,1
jne dd2
neg bx
dd2: mov mas_in[di],bx
xor bx,bx
add di,2
cmp di,20
jb ent
xor si,si
xor di,di
jmp srav
; Сравнение
srav: mov ax,mas_in[si]
add si,2
cmp si,20
ja print
cmp ax,0
jge srav
mov mas_out[di],ax
add di,2
jmp srav
print: xor dx,dx
xor ax,ax
push di
xor si,si
xor di,di
dd3: xor bx,bx
mov ax,mas_out[si]
neg ax
mov bx,ax
mov fmas_out[di],2dh
add di,1
xor ax,ax
xor dx,dx
mov ax,bx
div des_t
mov cx,dx
add al,30h
mov fmas_out[di],al
add di,1
xor dx,dx
mov ax,cx
div tis
mov cx,dx
add al,30h
mov fmas_out[di],al
add di,1
xor ax,ax
xor dx,dx
mov ax,cx
div sot
mov cx,dx
add al,30h
mov fmas_out[di],al
add di,1
xor ax,ax
xor dx,dx
mov ax,cx
div des
mov cx,dx
add al,30h
mov fmas_out[di],al
add di,1
xor ax,ax
xor dx,dx
mov ax,cx
add al,30h
mov fmas_out[di],al
add di,1
xor dx,dx
xor ax,ax
mov fmas_out[di],0dh
add di,1
add si,2
pop bx
cmp si,bx
je open
push bx
jmp dd3
; Открытие файла для записи второго массива
open: sub di,1
mov cx,di
mov ax,3d01h
lea dx,file_out
int 21h
; Сохранение
save: mov bx,ax
mov ah,40h
lea dx,fmas_out
int 21h
; Закрытие файла с выходным массивом
mov ah,3eh
int 21h
; Выход из программы
exit: mov ah,4ch
int 21h
main endp
seg_code ends
end main
Задание № 2 (вариант № 9):
Сформировать массив и 10 двухбайтных чисел. Найти минимальное значение.
Текст программы:
1)
data segment para public 'data' ;сегмент данных
message db 'Введите две шестнадцатеричные цифры: $'
message_1 db ' $'
message_2 db 0ah,0dh,'Минимальное число: $',0ah,0dh
data ends
stk segment stack
db 256 dup ('?') ;сегмент стека
stk ends
code segment para public 'code' ;начало сегмента кода
minim dw ? ;выделение памяти под переменную minim
r dw ?
rr dw ?
main proc ;начало процедуры main
assume ds:data,cs:code,ss:stk
mov ax,data ;адрес сегмента данных в регистр ax
mov ds,ax ;ax в ds
mov ah,9
mov dx,offset message
int 21h
mov ax,11 ;общий цикл
mov r,ax
mov cx,10 ;формирование счётчиа
mov bx,0FFh ;чтобы переменная minim не обнулилось занесем в bx макс. число
mov minim,0FFh ;в переменную minim заносим максимальное число из возможных
M_1:
mov ax,bx ;в ах заносим введеное число
cmp ax,minim ;сравнение вида ax<=minim
jbe min ;если ax меньше или равно minim, то переходим на метку min
jcxz M_2 ;если сх=0, переходим в M_2, если нет, то продолжаем
dec cx
jmp M3
min:
mov minim,ax ;в minim заносим минимальное число
jcxz M_2 ;если сх=0, переходим в M_2, если нет, то продолжаем
dec cx
M3:
xor ax,ax ;очистить регистр ax
mov ah,1h ;1h в регистр ah
int 21h ;генерация прерывания с номером 21h
mov dl,al ;содержимое регистра al в регистр dl
sub dl,30h ;вычитание: (dl)=(dl)-30h
cmp dl,9h ;сравнить (dl) с 9h
jle M1 ;перейти на метку M1 если dl<9h или dl=9h
sub dl,7h ;вычитание: (dl)=(dl)-7h
M1:
shl dl,1 ;сдвиг содержимого dl на 1 разряда влево
shl dl,1
shl dl,1
shl dl,1
int 21h ;вызов прерывания с номером 21h
sub al,30h ;вычитание: (dl)=(dl)-30h
cmp al,9h ;сравнить (al) с 9h
jle M2 ;перейти на метку M2 если al<9h или al=9h
sub al,7h ;вычитание: (al)=(al)-7h
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.