Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

Complete the 68000 assembly language program where the SORT1 part sets the D0/A0

ID: 3531233 • Letter: C

Question

Complete the 68000 assembly language program where the SORT1 part sets the D0/A0/A1 parameters, which are used by the SORT subroutine to sort array ARY1. D0 holds the length of the array. A0 holds the address of the first element of the array. A1 holds the address where the sorted array will be stored. The SORT2 part will, in the same analogy, sort array ARY2.



ORG $0900 ;start program at this address
LAB3 CLR.L D0 ;
BRA SORT1 ;skip over DC instructions
ARY1 DC.B 7 ;define number of elements in array1
DC.B 23,-9,18,56,-5,8,4 ;define the elements of array1
ARY1S DS.B 7 ;reserve location for sorted array1
ARY2 DC.B 12 ;define number of elements in array2
DC.B $CC,$34,$F4,$55,$E3,$E3,$3E,$17,$15,$21,$D7,$A4 ;define the elements of array2
ARY2S DS.B 12 ;reserve location for sorted array2
SORT1 ... ... ;set parameter (D0,A0,A1) to sort array1
... ... ;then call subroutine SORT
SORT2 ... ... ;set parameter (D0,A0,A1) to sort array2
... ... ;then call subroutine SORT
SORT ... ... ;subroutine SORT reads the address of

... ... ;the array from A0 and stores the sorted
... ... ;array at A1. The length of the array
... ... ;is passed via D0
MOVE.B #228,D7
TRAP #14
END



I have tried different lines of code for SORT1, SORT2, and SORT. But with each one, the assembler doesn't sort the arrays properly.

Explanation / Answer

.MODEL SMALL

.STACK 100H

.DATA

PROMPT_1 DB 'The contents of the array before sorting : $'

PROMPT_2 DB 0DH,0AH,'The contents of the array after sorting : $'


ARRAY DB 5,3,9,0,2,6,1,7,8,4

.CODE

MAIN PROC

MOV AX, @DATA ; initialize DS

MOV DS, AX


MOV BX, 10 ; set BX=10


LEA DX, PROMPT_1 ; load and display the string PROMPT_1

MOV AH, 9

INT 21H


LEA SI, ARRAY ; set SI=offset address of ARRAY


CALL PRINT_ARRAY ; call the procedure PRINT_ARRAY


LEA SI, ARRAY ; set SI=offset address of the ARRAY


CALL BUBBLE_SORT ; call the procedure BUBBLE_SORT


LEA DX, PROMPT_2 ; load and display the string PROMPT_2

MOV AH, 9

INT 21H


LEA SI, ARRAY ; set SI=offset address of ARRAY


CALL PRINT_ARRAY ; call the procedure PRINT_ARRAY


MOV AH, 4CH ; return control to DOS

INT 21H

MAIN ENDP



;------------------------- Procedure Definitions ------------------------;


;**************************************************************************;

;----------------------------- PRINT_ARRAY ------------------------------;

;**************************************************************************;


PRINT_ARRAY PROC

; this procedure will print the elements of a given array

; input : SI=offset address of the array

; : BX=size of the array

; output : none


PUSH AX ; push AX onto the STACK

PUSH CX ; push CX onto the STACK

PUSH DX ; push DX onto the STACK


MOV CX, BX ; set CX=BX


@PRINT_ARRAY: ; loop label

XOR AH, AH ; clear AH

MOV AL, [SI] ; set AL=[SI]


CALL OUTDEC ; call the procedure OUTDEC


MOV AH, 2 ; set output function

MOV DL, 20H ; set DL=20H

INT 21H ; print a character


INC SI ; set SI=SI+1

LOOP @PRINT_ARRAY ; jump to label @PRINT_ARRAY while CX!=0


POP DX ; pop a value from STACK into DX

POP CX ; pop a value from STACK into CX

POP AX ; pop a value from STACK into AX


RET ; return control to the calling procedure

PRINT_ARRAY ENDP


;**************************************************************************;

;---------------------------- BUBBLE_SORT -------------------------------;

;**************************************************************************;


BUBBLE_SORT PROC

; this procedure will sort the array in ascending order

; input : SI=offset address of the array

; : BX=array size

; output : none


PUSH AX ; push AX onto the STACK

PUSH BX ; push BX onto the STACK

PUSH CX ; push CX onto the STACK

PUSH DX ; push DX onto the STACK

PUSH DI ; push DI onto the STACK


MOV AX, SI ; set AX=SI

MOV CX, BX ; set CX=BX

DEC CX ; set CX=CX-1


@OUTER_LOOP: ; loop label

MOV BX, CX ; set BX=CX


MOV SI, AX ; set SI=AX

MOV DI, AX ; set DI=AX

INC DI ; set DI=DI+1


@INNER_LOOP: ; loop label

MOV DL, [SI] ; set DL=[SI]


CMP DL, [DI] ; compare DL with [DI]

JNG @SKIP_EXCHANGE ; jump to label @SKIP_EXCHANGE if DL<[DI]


XCHG DL, [DI] ; set DL=[DI], [DI]=DL

MOV [SI], DL ; set [SI]=DL


@SKIP_EXCHANGE: ; jump label

INC SI ; set SI=SI+1

INC DI ; set DI=DI+1


DEC BX ; set BX=BX-1

JNZ @INNER_LOOP ; jump to label @INNER_LOOP if BX!=0

LOOP @OUTER_LOOP ; jump to label @OUTER_LOOP while CX!=0


POP DI ; pop a value from STACK into DI

POP DX ; pop a value from STACK into DX

POP CX ; pop a value from STACK into CX

POP BX ; pop a value from STACK into BX

POP AX ; pop a value from STACK into AX


RET ; return control to the calling procedure

BUBBLE_SORT ENDP


;**************************************************************************;

;-------------------------------- OUTDEC --------------------------------;

;**************************************************************************;


OUTDEC PROC

; this procedure will display a decimal number

; input : AX

; output : none


PUSH BX ; push BX onto the STACK

PUSH CX ; push CX onto the STACK

PUSH DX ; push DX onto the STACK


XOR CX, CX ; clear CX

MOV BX, 10 ; set BX=10


@OUTPUT: ; loop label

XOR DX, DX ; clear DX

DIV BX ; divide AX by BX

PUSH DX ; push DX onto the STACK

INC CX ; increment CX

OR AX, AX ; take OR of Ax with AX

JNE @OUTPUT ; jump to label @OUTPUT if ZF=0


MOV AH, 2 ; set output function


@DISPLAY: ; loop label

POP DX ; pop a value from STACK to DX

OR DL, 30H ; convert decimal to ascii code

INT 21H ; print a character

LOOP @DISPLAY ; jump to label @DISPLAY if CX!=0


POP DX ; pop a value from STACK into DX

POP CX ; pop a value from STACK into CX

POP BX ; pop a value from STACK into BX


RET ; return control to the calling procedure

OUTDEC ENDP


;**************************************************************************;

;--------------------------------------------------------------------------;

;**************************************************************************;


END MAIN

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote