Описать дальнюю процедуру OUTARR8, которой передается начальный адрес знакового байтового массива и число элем - Assembler
Формулировка задачи:
Есть задача:
Есть решение:
Как решить эту задачу при условии, что параметры передаются процедуре через стек? (ассемблер TASM, если это важно)
Дано описание: 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
Решение задачи: «Описать дальнюю процедуру OUTARR8, которой передается начальный адрес знакового байтового массива и число элем»
textual
Листинг программы
MODEL Small,pascal ;include io.asm S segment stack '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 data1:word,data2:word LOCAL xloc:WORD,smesh:WORD,num:WORD MOV AX,data1 mov smesh,ax MOV ax,data2 mov num,AX 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: LEA dx,b;mov ax,offset B MOV CX,bnum;mov bx,bnum call outarr8 ; finish next3: cmp dx,0 je vizova jmp vizovb vizova: LEA DX,A; mov ax,offset A mov Cx,anum; mov bx,anum call outarr8,DX,CX ; finish C ends end start
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д