Дано описание: A DB 60 DUP(?) ; числа со знаком B DB 101 DUP(?) Описать дальнюю процедуру OUTARR8, которой передается начальный адрес знакового байтового массива и число элементов в нем и которая печатает этот массив. Используя эту процедуру, выписать фрагмент основной программы для решения следующей задачи: если последний элемент массива A равен среднему элементу массива B, тогда напечатать массив A, иначе — массив B. Выполнить это упражнение при условии, что параметры передаются процедуре через регистры.
Код: Выделить всё
include io.asm
S segment stack
DB 256 DUP(?)
S ends
D segment
A db 8,5,8,7,1,4
B db 1,-1,6 DUP(4),9,4,7
anum dw 6
bnum dw 11
x dw ?
y dw ?
D ends
C segment
assume CS:C, DS :D , SS:S
outarr8 proc far
LOCAL xloc:WORD,smesh:WORD,num:WORD
mov smesh,ax
mov num,bx
push dx
push cx
push bx
push ax
mov si,0
mov bx,smesh
previous1:
cmp si,num
jge next1
mov al,BYTE ptr [si+bx]
mov xloc,ax
outint xloc
newline
inc si
jmp previous1
next1: pop ax
pop bx
pop cx
pop dx
ret
endp
start: mov ax,D
mov DS,ax
mov si,anum
mov al,A[si-1]
mov ah,0
mov x,ax
mov ax,0
mov si,1
previous2:
add al,B[si-1]
cmp si,bnum
jge next2
inc si
jmp previous2
next2: mov dx,0
idiv bnum
cmp x,ax
je next3
vizovb: mov ax,offset B
mov bx,bnum
call outarr8
finish
next3: cmp dx,0
je vizova
jmp vizovb
vizova: mov ax,offset A
mov bx,anum
call outarr8
finish
C ends
end start