如何編寫一個8086彙編語言程序來計算任何n
數的平均值?我寫了兩個程序。一個使用mov ah,01 int 21h
輸入功能,因此它只接受一個數字。由於這個原因,我不能輸入數字10. 10一個8086彙編語言程序來計算任意n個數的總和的平均值
我從另一個緩衝區讀取。它可以接受很多數字,但問題是它會不斷循環。
這是第一個節目:
.MODEL SMALL
.DATA
VAL1 DB ?
NL1 DB 0AH,0DH,'ENTER HOW MANY NO U WANT:','$'
NL2 DB 0AH,0DH,'ENTER NO:','$'
NL3 DB 0AH,0DH,'AVEARGE:','$'
.CODE
MAIN PROC
MOV AX,@DATA
MOV DS,AX
LEA DX,NL1
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,30H
MOV CL,AL
MOV BL,AL
MOV AL,00
MOV VAL1,AL
LBL1:
LEA DX,NL2
MOV AH,09H
INT 21H
MOV AH,01H
INT 21H
SUB AL,30H
ADD AL,VAL1
MOV VAL1,AL
LOOP LBL1
LBL2:
LEA DX,NL3
MOV AH,09H
INT 21H
MOV AX,00
MOV AL,VAL1
DIV BL
ADD AX,3030H
MOV DX,AX
MOV AH,02H
INT 21H
MOV AH,4CH
INT 21H
MAIN ENDP
END MAIN
,這裏是第二:
TITLE "THIS PROGRAM CALCULATES ANY N NUMBER OF STUDENT AVERAGE SCORES"
.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
這不是很明顯,你不退出LBL1中的循環? – Abhineet
請問我該怎麼做? – user1982689
'循環'指令將使用'cx'作爲計數器(至少我很確定這是8086的情況;我推斷這是''ecx'在80386和更新的模型中的行爲)。我看到你修改'cl',但不是'ch'或'cx'本身,所以'LBL1'可能會循環一段時間,這取決於程序啓動時'cx'中的值。 – kevintodisco