算七位同学六门成绩平均值放在该同学成绩后

DATAS SEGMENT
score1 db 01,11,12,13,14,15,16,?
db 02,12,13,14,15,16,17,?
db 03,14,15,16,17,18,19,?
db 04,15,16,17,18,19,20,?
db 05,16,17,18,19,20,21,?
db 06,18,19,20,21,22,23,?
db 07,19,20,21,22,23,24,?
x db 6
;此处输入数据段代码
DATAS ENDS

STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
main proc far
MOV AX,DATAS
MOV DS,AX
mov cx,7
mov bx,0

again:
call average
add bx,8
loop again

MOV AH,4CH
INT 21H

main endp

average proc near
push cx
mov ax,0
mov cx,6
mov si,1
rotate:

add al,[bx][si]
inc si
loop rotate
div x
mov [bx][si],al
pop cx
ret

average endp
CODES ENDS
END START
这次作业中学到了无符号除法指令的使用以及基址变址寻址方式,需要注意以下几点:
1、除法指令被除数放在AX,(DX,AX),(EDX,EAX),分别对应8位,16位,32位除数,结果商分别放入AL,AX,EAX,余数分别放入AH,DX,EDX中
2、 基址变址以及相对基址变址寻址方式经常用于处理数组有关问题,
相对基址变址中位移量可以是立即数,如0012H[BX][SI],
也可以是数组名,如先在缓冲区定义数组
score db 20 dup(?),那么就可以score[bx][si],
还可以预定义变量x EQU 12或者y=12,x[bx][si],y[bx][si]都是有效的
3、debug命令必须先用g命令运行一遍程序才能得到最终结果
调试时必须先运行一遍程序

猜你喜欢

转载自blog.csdn.net/qq_43415753/article/details/84296286
今日推荐