Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Assembly 我应该在计算平均值时规范化输入的符号吗?_Assembly_Tasm - Fatal编程技术网

Assembly 我应该在计算平均值时规范化输入的符号吗?

Assembly 我应该在计算平均值时规范化输入的符号吗?,assembly,tasm,Assembly,Tasm,我试图找到这个数组的平均值:17421065,-67,-2988,-796,-1000,31,-67,-1001180 我相信我把号码从POS改为NEG的方法是可行的。 我的程序需要计算上面的数组,然后打印massege,如果平均值是NEG或POS,它总是打印平均值是POS,即使它不是。 以下是我目前的代码: ; lab56.asm ; .MODEL SMALL .STACK 100h .DATA AVG_NEG DB 'THE AVG IS NEG',13,10,'

我试图找到这个数组的平均值:17421065,-67,-2988,-796,-1000,31,-67,-1001180 我相信我把号码从POS改为NEG的方法是可行的。 我的程序需要计算上面的数组,然后打印massege,如果平均值是NEG或POS,它总是打印平均值是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 ; lab56.asm ; .小型模型 .烟囱100小时 .数据 平均负DB‘平均负’,13,10,’元 平均位置数据库“平均位置为13,10,$” 索引数据库中大于平均值的数字为:'、13,10'、$' RES DB“”,“$” ARR DW 17421065,-67,-2988,-796,-1000,31,-67,-1001180 10德瓦10 平均载重0 temprint数据库“”,“$” ;节目从这里开始: .代码 MOV-AX,@DATA;DS只能通过寄存器写入 MOV-DS,AX;将DS设置为指向数据段 莉丝,阿 ; ; 总结 MOV-CX,10;数组中的10个变量 总数: MOV AX,[SI] CMP AX,0 JG Pos_标签 XOR AX,0000000000000000 B 添加AX,0000000000000001b Pos_标签: 添加平均值,AX 加SI,2;转到下一个号码 循环和 ; 除以10得到平均值 化学武器;AX->DX:AX 伊迪夫十 移动平均值 ; 打印 ; 检查是否为NEG或POS CMP平均值,0 JG Avg_标签 MOV-AH,9岁;设置int 21h的打印选项 MOV DX,偏移量平均值负;将DS:DX设置为指向平均负 INT 21h JMP继续 平均标签: MOV-AH,9岁;设置int 21h的打印选项 MOV DX,偏移平均位置;将DS:DX设置为指向平均位置 INT 21h 继续: ; ;节目结束在这里: MOV-AH,4Ch;设置int 21h的终止选项 INT 21h;返回DOS(终止程序)
END如果在将所有输入相加之前更改它们的符号,那么很明显,对于总和(除非溢出),以及平均值,您总是会得到相同的符号。此外,计算的平均值将是错误的,因为您将平均震级而不是实际值


你改变标志的方法确实是错误的,所以不要这样做。用你在小学学过的方法计算平均值:将数字相加,然后除以计数。

如果你在将所有输入相加之前更改了符号,那么很明显,你总是会得到和相同的符号(除非溢出),因此也会得到平均值。此外,计算的平均值将是错误的,因为您将平均震级而不是实际值


你改变标志的方法确实是错误的,所以不要这样做。用你在小学学到的方法计算平均数:将数字相加,然后除以计数。

我将第一部分改为:;总结MOV CX,10;数组中的10个变量MOV AX,0和:MOV AX,[SI]加上SI,2;移动到下一个数字添加平均值,AX循环和,然后我打印了我的和,我得到了64541,就像它不能读取负数字一样,你需要做一些调试。如你所知,你要找的总数是–1000。这与64541有什么关系?记住考虑有符号和无符号整数的意义;如果你不知道这意味着什么,请询问你的导师。我将第一部分改为:;总结MOV CX,10;数组中的10个变量MOV AX,0和:MOV AX,[SI]加上SI,2;移动到下一个数字添加平均值,AX循环和,然后我打印了我的和,我得到了64541,就像它不能读取负数字一样,你需要做一些调试。如你所知,你要找的总数是–1000。这与64541有什么关系?记住考虑有符号和无符号整数的意义;如果你不知道这意味着什么,请询问你的导师。