51单片机 汇编语言 常用数据处理程序设计 求16个无符号数的最大值

2.6 求16个无符号数的最大值

设计N(N<256)字节无符号16进制数求最大值子程序。
在片内RAM从50H单元开始存放了16个无符号16进制数,调用子程序寻找最大值,将最大值存于B寄存器。
在主程序中使R0指向片内30H单元后,调用子程序。

程序:
ORG 0H
MOV R0,#30H
ACALL ZI
SJMP $
ZI: MOV R7,#15
MOV A,@R0
LOOP: MOV R1,A
INC R0
MOV A,@R0
CJNE A,01H,BIG1;R1=01H
MOV B,A
AJMP Xun_Huan
BIG1: JC BIG2
MOV B,A
AJMP Xun_Huan
BIG2: MOV A,R1
MOV B,A
Xun_Huan: DJNZ R7,LOOP
RET
END

求助:
请尽可能详细地注明程序行,最好有该行程序的功能。

谢谢!

查找最大值的程序,不是很简单的吗?
如下即可:

ORG 0H
MOV R0, #30H
ACALL ZI
SJMP $
;-----------------------------------
ZI:
MOV B, #0 ;先用0当做最大值.
MOV R7, #16 ;比较16次.
LOOP: MOV A, @R0 ;取来一个数字.
CJNE A, B, B1 ;比较.
B1: JC B2 ;有借位转移.
MOV B, A ;够减则存到B中.
B2: INC R0 ;转到下一个.
DJNZ R7, LOOP ;循环16遍.
RET
;-----------------------------------
END
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-12-26
ORG 0H
MOV R0,#30H ;这可能错了,该项是50H才对吧,这是放数的起始地址
ACALL ZI
SJMP $
ZI: MOV R7,#15 ;这是要比的数的个数
MOV A,@R0 ;取数
LOOP: MOV R1,A ;暂存
INC R0 ;为取下个数准备
MOV A,@R0 ;取数
CJNE A,01H,BIG1;R1=01H ;不相等转
MOV B,A ;相等暂存,好象是多余的
AJMP Xun_Huan
BIG1: JC BIG2 ;从C进位位判CJNE不同时谁大
MOV B,A ;如果A大于的R1中的数保存A
AJMP Xun_Huan
BIG2: MOV A,R1 ;当A小时保存B
MOV B,A ;;当A小时保存B
Xun_Huan: DJNZ R7,LOOP ;检查数取完没
RET
END

我帮你改一下吧
ORG 0H
AJMP IN 让开中断入口区
ORG 30H
IN: MOV R0,#50H ;这是放数的起始地址
ACALL ZI
SJMP $
ZI: MOV R7,#15 ;这是要比的数的个数
MOV A,@R0 ;取数
MOV B,A ;暂存第一个数到B中
LOOP: INC R0 ;为取下个数准备
MOV A,@R0 ;取数
CJNE A,B,BIG1 ;R1=01H ;不相等转
BIG1: JC Xun_Huan ;从C进位位判CJNE不同时谁大
MOV B,A ;如果A大于B中的数保存到B
Xun_Huan: DJNZ R7,LOOP ;检查数取完没
RET
END
数数少了几行? 加了二句还少了三行
第2个回答  2011-12-26
现在写还来得及吧?分少了……你回复我就给你写……追问

写!
我回复了,你倒是写啊

相似回答