この配列の AVG を見つけようとしています: 1742,1065,-67,-2988,-796,-1000,31,-67,-100,1180 番号を POS から NEG に変更する方法は摩耗した。私のプログラムは、上記の配列を計算し、AVG が NEG または POS の場合は massege を出力する必要があり、AVG が POS ではない場合でも常に出力します。これまでの私のコードは次のとおりです。
; lab56.asm ; .モデル小 .STACK 100h 。データ AVG_NEG DB 'THE AVG IS NEG',13,10,'$' AVG_POS DB 'THE AVG IS POS',13,10,'$' INDEX DB '平均より大きい数字はインデックスにある:',13,10,'$' RES DB ' ','$' ARR DW 1742,1065,-67,-2988,-796,-1000,31,-67,-100,1180 テン DW 10 平均 DW 0 tempprint DB ' ','$' ;ここからプログラムを開始します: 。コード MOV AX,@DATA ; DS は、レジスタを介してのみ書き込むことができます MOV DS、AX ; データ セグメントを指すように DS を設定する LEA SI、ARR ; ; 合計 MOV CX,10 ; 配列内の 10 個の変数 和: MOV AX,[SI] CMP AX,0 JG Pos_label XOR AX,0000000000000000b ADD AX,0000000000000001b 位置ラベル: AVG、AX を追加 ADD SI,2 ;次の番号に移動 ループサム ; AVG を取得するために 10 で割った値 CWD; AX -> DX:AX IDIVテン MOV AVG,AX ; 印刷する ; NEGまたはPOSかどうかを確認します CMP AVG,0 JG Avg_label MOV AH,9 ; int 21h の印刷オプションを設定します MOV DX、オフセット AVG_NEG ; DS:DX を AVG_NEG を指すように設定します。 INT 21h JMP続行 平均ラベル: MOV AH,9 ; int 21h の印刷オプションを設定します MOV DX、オフセット AVG_POS ; DS:DX を AVG_POS を指すように設定します INT 21h 継続する: ; ;プログラムはここで終了します: MOV AH,4Ch ; int 21h の終了オプションを設定します INT 21h ; DOS に戻る (プログラムの終了) 終わり