我正在尝试计算平均值,我可以在程序中输入但是我无法停止循环并看到(平均值)
这是我的示例代码。
.MODEL SMALL
.DATA
VAL1 DB ?
DISPLAY1 DB 0AH,0DH,'HOW MANY NUMBER OF STUDENT SCORES DO YOU WANT TO INPUT? :','$'
DISPLAY2 DB 0AH,0DH,'ENTER NO:','$'
DISPLAY3 DB 0AH,0DH,'AVEARGE:','$'
BUFFER DB 3,4 DUP(?)
.CODE
MAIN PROC
.STARTUP
LEA DX,DISPLAY1 ; loads the message in the variable display 1
MOV AH,09H ; interrupt function to display the message
INT 21H
MOV AH,0AH ; Read into buffer
INT 21H
SUB AL,30H
MOV CL,AL
MOV BL,AL ; moves the content of al to bl register
MOV AL,00 ; sets the value of al to zero, the value of al is now in bl register
MOV VAL1,AL ; stores al in val1 NB: al is still zero.
LBL1:
LEA DX,DISPLAY2 ; displays message in display 2
MOV AH,09H
INT 21H
MOV AH,0AH ;Read into buffer
LEA DX,BUFFER
INT 21H
SUB AL,30H
ADD AL,VAL1 ; add val1 to al i.e, it now adds the previous value to the new one.
MOV VAL1,AL ; saves the added value to val 1.
LOOP LBL1 ; continues too add.
LBL2:
LEA DX,DISPLAY3 ; displays character in display 3
MOV AH,09H
INT 21H
MOV AX,00 ; sets ax value back to 00
MOV AL,VAL1 ; moves the total value back to al
DIV BL ; divides the total value with the inputed number of values tht was stored in bl
ADD AX,3030H ; convert to ASCII
MOV DX,AX ; now moves the content of ax register to data register
MOV AH,09H ; this displays the result
INT 21H
.EXIT
MAIN ENDP
END MAIN
答案 0 :(得分:2)
MOV AH,0AH ; Read into buffer INT 21H SUB AL,30H
使用DOS功能0Ah时,之后在AL
寄存器中找不到任何有用的内容
你还在学习如何做到这一点,所以让你的生活更轻松,从最简单的输入功能开始。
MOV AH, 01h ;Wait for a key
INT 21h
SUB AL, 30h
xor cx, cx
mov cl, al
请参阅如何将字数放入字大小CX
寄存器而不是字节大小的CL
寄存器中?在程序的后面,您使用的loop
指令取决于这个事实。
当输入所有学生的分数时,使用相同的小数字并使用相同的输入功能。 只有当此程序有效时,您才应尝试输入更大(多位)的数字。
在计算平均值时,您只需要除法的商。把它变成一个字符并用正确的输出功能02h显示它。
xor ax, ax ; sets ax value back to 00
MOV AL, VAL1 ; moves the total value back to al
DIV BL ; number of values was stored in bl
ADD AL, 30h ; convert to ASCII
mov dl, al
MOV AH, 02h ; this displays the result
INT 21h