Я пытаюсь найти AVG этого массива: 1742,1065, -67, -2988, -796, -1000,31, -67, -100,1180 Я верю своему методу изменить номер из POS к НЭГ. Мне нужна прога, чтобы вычислить вышеприведенный массив, а затем распечатать massege, если AVG является NEG или POS, и он всегда печатает, что AVG - это POS, даже если это не так. вот мой код до сих пор:Должен ли я нормализовать признаки моего ввода при вычислении среднего?
; 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
Я изменил свою первую часть на это: ; SUMUP \t MOV CX, 10 \t \t; 10 переменных в массиве \t MOV AX, 0 Сумма: \t MOV AX, [SI] \t ADD SI, 2 \t \t; перейти к следующему номеру \t ADD AVG, AX LOOP Sum , тогда я напечатал свою сумму, и я получил 64541, это похоже на то, что он не читает цифры neg. –
Вам нужно выполнить некоторую отладку. Как вы знаете, сумма, которую вы ищете, составляет -1000. Как это относится к 64541? Не забудьте рассмотреть значение целых чисел с подписью и без знака; спросите своего инструктора, если вы не знаете, что это значит. –