在一个数组中找出并统计并该数组的平均数小的数的个数
程序运行:
代码:
datas segmentDATA dw 10h dup(1,2,3,4,-1,5,7,-99,29,-11,294,-21,45,6,57,-54)average dw 0countOfLowAverage dw 0outputAverage db 'average:AX=$'outputCountOfLowAverage db 0dh,0ah,'count of low average:BX=$'
datas endsstacks segment stackdb 100h dup(?)stacks endscodes segmentassume cs:codes,ds:datas,ss:stacks
main proc far
start:push dsmov ax,0hpush axmov ax,datas ;初始化dsmov ds,axmov cx,100h ;将DATA数组的长度移至cxmov bx,0 ;bx为DATA数组的索引mov si,0 ;si为数组和的低16位mov di,0 ;di为数组和的高16位s:mov ax,DATA[bx] ;将DATA数组的单元移至axcwd ;进行有符号扩展add si,ax ;求和adc di,dx add bx,type DATA ;数组索引移至下一个单元 loop smov cx,100h ;数组的长度mov ax,si ;将数组的求和移至dx,ax中mov dx,di idiv cx ;求平均值mov average,ax ;保存平均值于averagemov bx,0 ;计算小于平均值的数的个数mov si,0 ;数组的索引s1:cmp ax,DATA[si] ;比较平均值与数组元素的大小jng next ;平均值小于等于数组元素,则跳转inc bx ;平均值大于数组元素,计算器bx加1next:add si,type DATA ;数组的索引移至下一个单元loop s1 mov countOfLowAverage,bx ;保存小于平均值的数的个数;输出平均值的提示lea dx,outputAveragemov ah,9 int 21h ;输出平均值mov ax,averagecall print;输出小于平均值的数的个数的提示lea dx,outputCountOfLowAveragemov ah,9 int 21h ;输出小于平均值的数的个数mov ax,countOfLowAverage call printretmain endpprint proc near;保存寄存器的值push cxpush dxpush bx;保存axmov bx,axcmp bx,0 ;比较bx与0jnl notNegative ;bx为非负数,则跳转mov dl,'-' ;若bx为负数,则输出'-'mov ah,2int 21hneg bx ;取bx的绝对值mov ax,bx ;将bx移至axnotNegative:mov cx,0 ;cx记录ax十进制数的位数mov bx,10 ps:mov dx,0 ;dx置0,使得余数不干扰除法操作div bx ;除10取余push dx ;保存余数inc cx ;cx记录位数加1cmp ax,0 ;比较ax与0jne ps ;ax非0,则循环继续ps1:pop dx ;取出余数add dl,30h ;数值转化成数字字符mov ah,2 ;输出字符int 21hloop ps1 ;恢复寄存器的值pop bxpop dxpop cxret
print endp
codes endsend main