片内RAM30H~39H单元有10个单元字节无符号数,找上最大的数存入R5

如题所述

;test
MOV 30H,#3
MOV 31H,#2
MOV 32H,#4
MOV 33H,#5
MOV 34H,#7
MOV 35H,#8
MOV 36H,#1
MOV 37H,#0
MOV 38H,#5
MOV 39H,#90
;test

MOV R0, #30H ;起始地址.
MOV R5,#00H ;先用0当做最大值.
MOV R2, #10 ;数据长度.
LOOP:
MOV A, @R0 ;取来一个数据.
CLR C
SUBB A, R5 ;减“最大值”.判断Cy位,Cy为1则说明R5为最大
JC rel1 ;不够减就算了.
MOV A, @R0 ;够减,就把这个数据.
MOV R5,A ;当做最大值.
rel1:
INC R0 ;转向下一个.
DJNZ R2, LOOP ;循环.
SJMP $ ;结束.
END追问

R5是寄存器啊,怎么能拿来比较啊

追答

这里的“比较”是通过做减法来实现的。SUBB A, R5这条指令也是合法的。代码我仿真过了,没有错。还有不清楚的可以继续追问。

追问

片内RAM30H~39H单元有10个单元字节无符号数,10个数进行比较将最大的数存入R5,题目有点错,是将10个数比较后找出最大的存入R5谢谢

追答

;test
MOV 30H,#3
MOV 31H,#2
MOV 32H,#4
MOV 33H,#5
MOV 34H,#7
MOV 35H,#8
MOV 36H,#1
MOV 37H,#0
MOV 38H,#5
MOV 39H,#90
;test

MOV R0, #31H ;起始地址.
MOV R5,30H ;先用30H地址的值当做最大值.
MOV R2, #9 ;数据长度,把第一个当做最大,与剩下的九个比较.
LOOP:
MOV A, @R0 ;取来一个数据.
CLR C
SUBB A, R5 ;减“最大值”.判断Cy位,Cy为1则说明R5为最大
JC rel1 ;不够减就算了.
MOV A, @R0 ;够减,就把这个数据.
MOV R5,A ;当做最大值.
rel1:
INC R0 ;转向下一个.
DJNZ R2, LOOP ;循环.
SJMP $ ;结束.
END

还可以用CJNE指令来处理

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

把片内RAM中地址30H到39H中的10个无符号数逐一比较,并按从小到大的顺 ...
MOV 38H,#2 MOV 39H,#1 LJMP START START: CLR 00H MOV R7,#9 MOV R0,#30H MOV A,@R0 LOOP: INC R0 CLR C SUBB A, @R0 JC NEXT ;如果A大于后一个数就往下执行 SETB 00H MOV A,@R0 ;如果A大于下一个数就交换次序 DEC R0 XCH A,@R0 ...

在内部RAM 30H单元开始存放着10个无符号数 编写程序找出其中的最大值...
LOOP1:INC R0 ;修改地址指针,使其指向下一地址单元 MOV 30H,@R0 ;将比较的数暂存于30h CJNE A,30H,CHK ;两个数比较 CHK:JNC LOOP2 ;如果A大,则转换 MOV A,@R0 ;如果A小,则将较大的数存入A LOOP2:DJNZ R1,LOOP1 ;R1减1,如果其不为0,则继续循...

将30H-39H十个单元中的无符号数求和,结果存放在41H40H中,41H中结果...
ORG 0000H MOV 40H,#00H MOV 41H,#00H MOV R0, #30H MOV R2, #10 LOOP:MOV A,40H ADD A ,@R0 MOV 40H,A MOV A,41H ADDC A ,#00H MOV 41H,A INC R0 DJNZ R2, LOOP SJMP END

从片内RAM的30H单元开始有10个字节型数据,编程求出器重的最大值,并...
因为是从30H开始的,开始就送入到A,一一比较9个数就可以了,将大者暂存,很简单呀

...在内部RAM单元30H--3FH中无序存放着无符号正数,找出最大值,放在内...
LOOP2:MOV R0,30H MOV A,@R0 INC R0 MOV 60H,@R0 CLR C CJNE A,60H,LOOP LOOP:JC QD MOV 20H,60H QD:MOV 20H,A DJNZ #16H,LOOP2

编程题:把片内RAM 30H单元开始的10个单元内容倒序存放?
boolean tag = true;final String pattern1 = "^([a-z0-9A-Z]+[-|\/\/.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\/\/.)+[a-zA-Z]{2,}$";final Pattern pattern = Pattern.compile(pattern1);final Matcher mat = pattern.matcher(email);if (!mat.find()) { ...

单片机内RAM从LIST开始有30个无符号数,编程找出最大数存入BIG
TOTAL EQU 10 ;数据总数 BIG EQU 5FH ;最大数据地址 ORG 0000H AJMP MAIN ORG 0040H MAIN:\/\/ MOV 30H,#2 \/\/ MOV 31H,#1 \/\/ MOV 32H,#0 \/\/ MOV 33H,#7 \/\/ MOV 34H,#4 \/\/ MOV 35H,#9 \/\/ MOV 36H,#13 \/\/ MOV 37H,#23 \/\/ MOV 38H,#34 \/\/ MOV 39H,#56 \/\/上面...

在单片机内部数据RAM的30H开始的单元中连续存放单子节10个有符号数...
MAXDAT:MOV R0,#30H MOV R2,#10 MOV B,#0 LOOP:MOV A,@R0 CJNE A,B,LP1 LP1:JC LP2 MOV B,A LP2:INC R0 DJNZ R2,LOOP RET

片内ram40h开始单元有十个二进制数,找出最大值并存于50单元中 ..
MOV A,@R0 ;取数送A LOOP: INC R0 MOV 30H,@R0 ;取数送30H CJNE A,30H,NEHT ;(A)与(30H)相比 NEXT: JNC BIE1 ;(A)≥(30H)转BIR1 MOV A,30H ;(A)<(30H),大数送A BIE1: DJNZ R7,LOOP ;比较次数减1,不为0,继续比较 MOV 50H,A ;比较结束,大数送50H RET ...

...1. 内部RAM单元从30H开始连续存放了10个数据试编程把这10个数据...
--->>>至外部RAM 2000H开始的连续10个单元中。>>>是不是少这句话。。。ORG 0000H MAIN: MOV R0,#30H MOV DPTR,#2000H MOV R7,#10 LOOP: MOV A,@R0 MOVX @DPTR,A DJNZ R7,LOOP END

相似回答