Описать дальнюю процедуру OUTARR8, которой передается начальный адрес знакового байтового массива и число элем - Assembler

Узнай цену своей работы

Формулировка задачи:

Есть задача:
Дано описание: 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
Как решить эту задачу при условии, что параметры передаются процедуре через стек? (ассемблер TASM, если это важно)

Решение задачи: «Описать дальнюю процедуру 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

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.2 из 5
Похожие ответы