Assembler(TASM) - передача параметров процедуре через стек

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
idontknowassembler
Сообщения: 1
Зарегистрирован: 07 июн 2015, 20:48

07 июн 2015, 20:51

Дано описание: 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
Помогите, пожалуйста, решить эту задачу при условии, что параметры передаются процедуре через стек.
Ответить