この配列の 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 に戻る (プログラムの終了)
終わり