|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 396449673 于 2020-4-24 10:40 编辑
题目:求一个班50名学生成绩的平均值、最大值和最小值,并将结果显示出来。
代码压缩包:点击这里,不会上传附件,这是onedrive
- assume cs:code,ds:data,ss:stack
- data segment
- sum dw 0
- score db 10 dup(80,70,60,90,90)
- avg db 0
- max db 0
- min db 0FFh
- msg1 db 'The average is',0ah,0dh,'$’
- msg2 db 'The maxnum is',0ah,0dh,'$’
- msg3 db 'The minnum is',0ah,0dh,'$’
-
- data ends
- stack segment
- dw 10 dup (?)
- stack ends
- code segment
- start:
- mov ax,data
- mov ds,ax
- mov ax,0
- mov di,ax
- mov cx,50
- mov bx,offset score
-
- comp: mov ah,0
- mov al,[bx+di]
- inc di
- cmp al,min
- jc minc
- iend: cmp al,max
- jnc maxc
- aend: add ax,sum
- mov sum,ax
- loop comp
- mov ax,sum
- mov bx,50
- div bx
- mov avg,al
- mov cx,3
- mov bx,0
- jmp show
-
- table dw offset msg1,offset msg2,offset msg3,offset avg,offset max,offset min
- show:
- mov dx,table[bx]
- mov ah,09h
- int 21h
- sub dx,dx
- mov dx,table[bx+3] ;--------------------------------这里出错,前面是筛选最大最小和求平均值,没问题
- mov ax,dx
- mov si,ax
- mov al,[si] ;这里是显示数值,后面都是显示的命令 应该也没问题
- mov ah,0
- mov dl,10
- div dl
- mov dx,ax
- add dl,30h
- mov ah,02h
- int 21h
- mov dl,dh
- add dl,30h
- mov ah,02h
- int 21h
- inc bx
- loop show
- mov ax,4c00h
- int 21h
- minc: mov min,al
- jmp iend
- maxc: mov max,al
- jmp aend
-
-
- code ends
- end start
复制代码
前面没问题,总是在mov dx,table[bx+3]这里,给出错误的偏移地址,一开始以为emu8086的问题,结果dosbox也不行
这两个都在数据段,但是给出的地址确天差地别
这里的数据应该是0034
debug调试的时候有输出,但是直接运行并没有
第二次循环直接乱码
因为第二次给出的地址也错了,应该是0054
是不是地址相差太多导致溢出,应该不会吧,毕竟第一次给出的地址是对的
把代码zip压缩,然后发上来
还有,你现在的这个程序输出了什么?
你认为这个输出不正确,那么正确的输出是什么?
这两个输出要贴出来,对调试程序很有用
|
|