51单片机汇编语言-请编写程序将内部RAM 40H到4FH 中的16个数据按从小到大顺序重新排列。 尽量简单一点的

单片机高手编个小程序不难吧

冒泡排序程序如下:

ORG 0000H
LCALL SORT ; 跳转到排序程序
SJMP $ ; 。
SORT: ; 数据冒泡排序程序
MOV R6, #16 ;参加排序数据的总个数
DEC R6 ; 比较次数 比 数据总数 少 1

L1:
MOV R0, #40H ; 把数据的起始地址40h付给R0
MOV A, R6 ;调整比较次数
MOV R7, A
CLR F0 ; 清交换标志

L2: ;比较
MOV A, @R0 ; 取前一个数
INC R0
MOV B, @R0 ; 取后一个数
CJNE A, B, L3 ; 前面的数 与 后面的数 比较, 前-后

L3: ;判断、处理
JC N_JH ; 后面的数 大于 前面的数,不交换
XCH A,B ; 否则前后两数交换存放
MOV @R0,A
DEC R0
MOV @R0,B
INC R0
SETB F0 ; 设交换标志

N_JH:
DJNZ R7, L2 ; 没有比较完,就继续
JNB F0, L_END ; 没有交换过,就结束
DJNZ R6, L1

L_END:
RET ; 排序完成。

;结果是:
;40H中存放着最小的数;
;4FH中存放着最大的数。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-24
见过别的网友写的汇编冒泡法,你自己参考修改吧
/////////////////////////////////////////////////////////////////////////////////////
汇编冒泡排序(51)(需调试器付初值)
;此程序属于冒泡排序算法,不能用查找表(只能在调试时用内存表中设置处置进行仿真实验)(因为查找表是数据是存放在rom中的,所以说是无法去修改的,无能为力,因此只能通过调试来实现)
Num EQU 31H ;定义临时次数变量(也可理解为总数据变量)

ORG 0000H
LCALL START ;跳转到排序算法
SJMP $ ;如果排序完成,在此循环

START:MOV R0,#50H;把地址0050h付给R0中
MOV Num,#4 ;所有数据个数放在Num中
CLR F0 ;用户可以使用的标志位清零(交换数据标志)
DEC Num ;减1
MOV A,@R0 ;把其中的数送到A中

LOOP: MOV R2,A ;把低字节地址中的数付给R2
INC R0 ;地址加一
CLR C ;进位标志位清零
MOV A,@R0 ;把高字节地址中的数付给A
SUBB A,R2 ;带进位相减指令
JNC LOOP1 ;如果没有借位,则高字节中比低字节中数据大,不用排,跳转到loop1

;如果借位,下面是交换数据代码
SETB F0 ;用户可以使用的标志位置1
MOV A,R2
XCH A,@R0 ;把低字节数送到高字节地址中
DEC R0 ;地址减1,到低字节地址中
XCH A,@R0 ;把高字节中的数送到低字节地址中
INC R0 ;在把地址重新加一

LOOP1:MOV A,@R0
DJNZ Num,LOOP ;重新进入下次循环(跳出时,实现一次冒泡)

JB F0,START ;循环进行冒泡,如果交换标志一直为0,则排序完成,结束
RET

END追问

其实我如果会修改的话,我就能自己编了,大神

第2个回答  2013-11-24

51单片机汇编语言-请编写程序将内部RAM 40H到4FH 中的16个数据按从小...
MOV R6, #16 ;参加排序数据的总个数 DEC R6 ; 比较次数 比 数据总数 少 1 L1:MOV R0, #40H ; 把数据的起始地址40h付给R0 MOV A, R6 ;调整比较次数 MOV R7, A CLR F0 ; 清交换标志 L2: ;比较 MOV A, ...

跪求51单片机大师看下啊~~~ 1.下图中外部扩展的程序存储器和数据存储器...
--都是 16KB。2.两片存储器芯片的地址范围分别是多少?(地址线未用到的位填1) (6分,)--27128:8000H~BFFFH。--62128:4000H~7FFFH。--网友采纳答案给出的地址是错误的。3.请编写程序,要求:(1)将内部RAM 40H~4FH中的内容送入62128的前16个单元中;(4分)MOV DPTR, #...

51单片机内部的ram是怎么寻址的
单片机内部RAM中低128字节的20H~2FH共16个字节可以用位寻址方式访问其各位。共128个位地址为00H~7FH。假设位地址为48H,那么单元地址=48H\/8+20H=29H。特殊功能寄存区中有的可以位寻址,用查表法,就可以得到,例如90H,查表得到,对应的字节地址为90H。低128字节中的00H~1FH共32个单元通常作为...

51单片机内部RAM地址范围是多少?
MCS-51系列单片机片内RAM共有128字节,地址范围为00H~7FH。在这128字节中,全部都可以按照字节地址进行操作(读、写或运算),直接或间接寻址方式皆可。在这128字节中,按照使用特点,可以分成三类:工作寄存器区、位寻址区和通用数据区。1.工作寄存器区 在MCS-51系列单片机的片内RAM中,有四个工作寄...

汇编语言
e MOV R1,#2FH 2.内部RAM的4FH单元,可用哪几种方式寻址?分别举例说明。3.特殊功能寄存器可用哪几种方式寻址?分别举例说明。4.编程:将立即数55H送入内部RAM的40H单元。 (1)用立即寻址 (3)用寄存器寻址(2)用直接寻址 (4)用寄存器间接寻址5.用指令实现下述数据传送 (1)内部RAM20H送内部RAM40H (4)外部RAM...

51单片机中如何用汇编语言编写流水灯
流水灯就是51单片机控制led灯依次点亮的控制方式。具体程序如下:ORG 0000H;复位启动AJMP START;ORG 001BH;T1中断AJMP T1INT;;定义变量===YSJSEQU 30H;延时计数器LEDEQU 31H;LED控制缓冲器 ;主程序===START:MOV LED,#0FEH;初始化数据MOV YSJS,#0;MOV TMOD,#10H;定时器1工作于方式1,16位定时...

mcs-51单片机内部RAM的各部分作用是什么?
内部RAM共256个单元,用户使用前128个单元,用于存放可读写数据,后128个单元被专用寄存器占用。前128单元具体分为:1、工作寄存器区:共4个组,每组为8个存储单元,即00H-07H,08H-0FH,10H-17H,18H-1FH,具体选择哪一个由程序状态字(PSW)中的RS1和RS0的组合决定。2、位寻址区:20H-2FH,共16...

51单片机做科学计算器的c语言程序
MOV C,ACC.7 ;将数符保存在位1FH中MOV 1FH,CMOV C,ACC.6 ;将阶码扩充为8bit补码MOV ACC.7,CMOV R2,A ;存放在R2中INC R0MOV A,@R0 ;将尾数高字节存放在R3中MOV R3,AINC R0MOV A,@R0 ;将尾数低字节存放在R4中MOV R4,ADEC R0 ;恢复数据指针DEC R0RETMVR1: MOV A,@R1 ;将[R1]传送到第...

试编写一个汇编语言程序,要求从键盘接收一个四位的16进制数,并在终端上...
mov cl,4 s0: mov ah,1 ;键盘输入4个16进制数 int 21h cmp al,39h ;判断是0~9还是A~H,若是数字减30H,否则还要减07H jbe next sub al,07h next: sub al,30h shl bx,cl add bl,al ;转换后的数据存入BX,每存一次左移4位 dec ch jnz s0 ;输入完则控制显示 mov...

谁懂汇编语言 我这个要求的要怎么编写 懂的帮看一下
1:PROG1:MOV R7,#16 MOV R0,#30H MOV A,#0 PROG11:MOV @R0,A INC R0 INC A DJNZ R7,PROG11 RET 2:PROG2:MOV R0,#30H MOV R1,#40H MOV R7,#16 PROG21:MOV A,@R0 MOV @R1,A INC R0 INC R1 DJNZ R7,PROG21 RET 3:PROG3:MOV R0,#40H MOV DPTR,#4800H MOV R7,#16...

相似回答