我正在尝试查找此数组的 AVG:1742,1065,-67,-2988,-796,-1000,31,-67,-100,1180 我相信我将数字从 POS 更改为 NEG 的方法是磨损。我的编需要计算上面的数组,然后打印 massege,如果 AVG 是 NEG 或 POS,它总是打印 AVG 是 POS,即使它不是。到目前为止,这是我的代码:
; lab56.asm
;
.模型小
.STACK 100h
。数据
AVG_NEG DB '平均值为负值',13,10,'$'
AVG_POS DB 'THE AVG IS POS',13,10,'$'
INDEX DB '大于平均值的数字在索引中:',13,10,'$'
RES 数据库 '','$'
ARR DW 1742,1065,-67,-2988,-796,-1000,31,-67,-100,1180
十 DW 10
平均深度 0
模板数据库'','$'
;程序从这里开始:
。代码
移动 AX,@DATA ; DS 只能通过寄存器写入
MOV DS,AX ; 设置 DS 指向数据段
LEA SI, ARR
;
; 总结
MOV CX,10 ;10 个变量在数组中
和:
MOV AX,[SI]
CMP AX,0
JG Pos_label
异或 AX,0000000000000000b
添加 AX,0000000000000001b
位置标签:
添加平均,AX
ADD SI,2 ;移动到下一个数字
循环总和
; 除以 10 得到 AVG
顺时针; AX -> DX:AX
IDIV 十
MOV AVG,AX
; 打印
; 检查是 NEG 还是 POS
CMP 平均,0
JG Avg_label
MOV 啊,9;设置 int 21h 的打印选项
MOV DX,OFFSET AVG_NEG ; 将 DS:DX 设置为指向 AVG_NEG
INT 21 小时
JMP 继续
平均标签:
MOV 啊,9;设置 int 21h 的打印选项
MOV DX,OFFSET AVG_POS ; 将 DS:DX 设置为指向 AVG_POS
INT 21 小时
继续:
;
;程序结束在这里:
MOV AH,4Ch ; 为 int 21h 设置终止选项
INT 21 小时;返回 DOS(终止程序)
结尾