不可错过的经典港剧:懂汇编的大虾救救小菜啊(200分)

来源:百度文库 编辑:高考问答 时间:2024/05/05 11:12:17
这是我们的期末考试题
设在单片机8031内部RAM存在一组无符号数组,其长度为100 起始地址为30H
要求用冒泡排序从大到小排列?原代码我已经有了希望高手把注释给写上 越详细越好,要快 我会给最详细的给奖励100分!
ORG 1000H
BUBBLE: MOV R0,#30H ;R0 为地址指针
MOV B,#64H ;给记数器B初值
CLR 10H ;交换标志清0
DEC B ;记数器B-1
BULOOP: MOV A,@R0
MOV 20H,A
INC R0
MOV 21H,@R0
CJNE A ,21H,BUNEU ;比较两数若不相等则跳转到BUNEU
BUNEU:JNC BUNEXT ;若20h>=21H则转BUNEXT
MOV A,@R0 ;若20H<21H交换两者
MOV @R0 ,20H
DEC R0
MOV @R0 ,A
INC R0 ;复原R0
SETB 10H ;交换标志置1
BUNEXT:DJNZ B,BULOOP
JB 10H,BUBBLE
END
部分解释以给出 请帮我写一分详细的解释 最好一句一个解释
我会在奖励100分的

BUBBLE:
MOV R0,#30H ;R0 为初始地址指针30h
MOV B,#64H ;给记数器B初值,64h=100
CLR 10H ;交换标志清0
DEC B ;记数器B-1,相当于需要比较99次,以后每次减1
BULOOP:
;以下4句将[R0]和[R0+1]单元数据存入20h和21h暂存
MOV A,@R0;A为[RO]内容
MOV 20H,A;存[R0]至20h
INC R0 ;R0加1
MOV 21H,@R0;存[R0+1]至21h
CJNE A,21H,BUNEU ;比较两数若不相等则跳转到BUNEU.
;也就是比较[20h]和[21h],因为A中就是[20h]
BUNEU:JNC BUNEXT ;若[20h]>=[21h]则转BUNEXT,进行下一步
MOV A,@R0 ;若[20h]<[21h]交换两者
;以下4句交换[R0]和[R0+1]
MOV @R0 ,20H;[20h]原来暂存[R0-1],现在存入[R0](因为前面有INC R0)
DEC R0 ;R0减1
MOV @R0 ,A;A原来暂存[R0-1],现在存入[R0]
INC R0 ;复原R0
SETB 10H ;交换标志置1
BUNEXT:DJNZ B,BULOOP;内层循环结束,完成一趟冒泡
JB 10H,BUBBLE ;外层结束(也就是本趟没有出现交换,说明排序已经完成)。冒泡结束
END