Hey Guys,
I'm trying to fint the AVG of this array : 1742,1065,-67,-2988,-796,-1000,31,-67,-100,1180
I belive my method to change the number from POS to NEG is worng.
my prog need's to calculate the above array then print massege if the AVG is NEG or POS, and it always print that the AVG is POS even though it's not.
here is my code so far:
; lab56.asm
;
.MODEL SMALL
.STACK 100h
.DATA
AVG_NEG DB 'THE AVG IS NEG',13,10,'$'
AVG_POS DB 'THE AVG IS POS',13,10,'$'
INDEX DB 'Numbers that are larger than the average are in indexes:',13,10,'$'
RES DB ' ','$'
ARR DW 1742,1065,-67,-2988,-796,-1000,31,-67,-100,1180
Ten DW 10
AVG DW 0
temprint DB ' ','$'
;Program start here:
.CODE
MOV AX,@DATA ; DS can be written to only through a register
MOV DS,AX ; Set DS to point to data segment
LEA SI, ARR
;
; SUMUP
MOV CX,10 ;10 variables in array
Sum:
MOV AX,[SI]
CMP AX,0
JG Pos_label
XOR AX,0000000000000000b
ADD AX,0000000000000001b
Pos_label:
ADD AVG,AX
ADD SI,2 ;move to the next number
LOOP Sum
; Divided by 10 to get the AVG
CWD ; AX -> DX:AX
IDIV Ten
MOV AVG,AX
; print
; Check if NEG or POS
CMP AVG,0
JG Avg_label
MOV AH,9 ; Set print option for int 21h
MOV DX,OFFSET AVG_NEG ; Set DS:DX to point to AVG_NEG
INT 21h
JMP continue
Avg_label:
MOV AH,9 ; Set print option for int 21h
MOV DX,OFFSET AVG_POS ; Set DS:DX to point to AVG_POS
INT 21h
continue:
;
;Program end's here:
MOV AH,4Ch ; Set terminate option for int 21h
INT 21h ; Return to DOS (terminate program)
END