标题:[求助]数据区的一个数据区中,定义了100H个八位无符号数,找最大最小数并显 ...
只看楼主
xiaoxiao1551
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2007-2-4
 问题点数:0 回复次数:2 
[求助]数据区的一个数据区中,定义了100H个八位无符号数,找最大最小数并显示

请高手帮忙。以下是我的源程序,汇编和链接都没有问题,可是就是不显示输出,
十进制输出子程序和输出字符串子程序在其他的程序里我也用过都能正常在屏幕上
显示的,可放到这个程序里之后就总是出错,我改来改去不是屏幕什么也不显示,
就是出现一屏幕的乱码或是出现DOS内部出错的对话框,如何才能显示出来。谢谢

题目要求:从数据段的一个数据区中,定义了100H个八位无符号数,要求找出最大数
和最小数,分别送MAX和MIN单元,并显示输出.
以下是源程序:
DDD SEGMENT
XXX DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
DB 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
DB 41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
DB 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80
DB 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
DB 21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40
DB 41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60
DB 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80
DB 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
DB 61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80
DB 81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100
DB 111,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116
MESS1 DB 'PLEASE OUTPUT MAX AND MIN','$'
NOZERO DB 0
MAX DB ?
MIN DB ?
DDD ENDS
CCC SEGMENT
ASSUME CS:CCC,DS:DDD
START: LEA DX,MESS1
CALL PROMPT
MOV AX,DDD
MOV DS,AX
MOV CX,255 ;比较255次
MOV BX,0
MOV AL,XXX[BX];把100个数据的第一个数据送入AL
MOV AH,AL ;第一个数据送入AH
NEXT: INC BX ;循环开始BX+1
MOV DL,XXX[BX];第二个数据送入DL
CMP AH,DL ;比较第一第二个数据
JGE DD1 ;大于等于则转移
MOV AH,DL ;小于的话则DL的第二个数赋予第一个数AH(始终保存着当前最大值)
DD1: CMP AL,DL ;第一AL第二DL个数据比较
JLE DD2 ;小于等于则转移LL2
MOV AL,DL ;否则DL赋予AL(始终保存着当前的最小值)
DD2: LOOP NEXT ;循环
MOV MAX,AH ;最大值赋予MM
MOV BL,AH
CALL PUTOUTDEC
MOV MIN,AL ;最小值赋予NN
MOV BL,AL
CALL PUTOUTDEC
PROMPT PROC
MOV AH,9
INT 21H
RET
PROMPT ENDP
putoutdec proc
push cx
mov nozero,0
mov cl,100
call main
mov cl,10
call main
mov cl,1
call main
cmp nozero,0
jne ll
mov dl,30h
mov ah,2
int 21h
ll: pop cx
ret
main proc
mov al,bl
mov ah,0
div cl
mov bl,ah
mov dl,al
cmp dl,0
jne ll1
cmp nozero,0
jne ll1
jmp ll2
ll1: mov nozero,1
add dl,30h
mov ah,2
int 21h
ll2: ret
main endp
putoutdec endp
MOV AH,4CH
INT 21H
CCC ENDS
END START

搜索更多相关主题的帖子: 数据区 小数 定义 符号 
2007-02-04 18:13
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
得分:0 
可能是XXX段过大了

2007-02-07 15:26
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 

先后顺序有问题吧,看看你开始的部分
[QUOTE]
START: LEA DX,MESS1
CALL PROMPT
MOV AX,DDD
MOV DS,AX
[/QUOTE]
从上面看出,你还没指定数据段就开始调用子程序打印句子,这样可不行吧!9号中断默认是数据段DS,虽然已经指定但你却没有给出段基址,如果能正确打印


我是金子,我要闪光的
2007-02-11 11:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-119628-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099179 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved