MCS-51汇编软件实验

MCS-51汇编软件实验

实验一 内存块移动

将指定源地址和长度的存储块移到指定目标地址为起始地址的单元中去。移动3000H起始的256个字节到4000H起始的256个字节。

代码示例:

	ORG 0000H
	MOV DPTR,#3000H		;起始指定源地址
	MOV A,#0			;累加器A赋初值值
	MOV R4,#0			;循环判断,初值为0,减一后借位变FFH,总循环256次
	
LOOP:
	MOVX @DPTR,A		;累加器A赋值给地址为DPTR内容的单元
	INC DPTR			;DPTR内容加一,即地址从3000H移动
	INC A				;累加器加一,
	DJNZ R4,LOOP		;R4减一后不为,则跳转到LOOP继续执行
						;即完成3000H,3001H等单元依次赋值为00H,01H等
	MOV	R0,#30H			;给R0~R3赋值
	MOV R1,#00H
	MOV	R2,#40H
	MOV R3,#00H
	MOV R5,#0
LOOP1:
	MOV DPH,R0			;将R0的内容赋给DPTR寄存器的高八位
	MOV DPL,R1			;将R1的内容赋给DPTR寄存器的低八位,(DPTR)=3000H
	MOVX A,@DPTR		;3000H单元的内容赋给累加器
	MOV DPH,R2
	MOV DPL,R3			;(DPTR)=4000H
	MOVX @DPTR,A		;累加器A(3000H单元)的内容赋给4000H单元
	CJNE R1,#0FFH,LOOP2	;R1不为FFH则跳到LOOP2
LOOP2:
	INC R1				;R1加一,即源地址加一
	CJNE R3,#0FFH,LOOP3	;R3不为FFH则跳转到LOOP3
LOOP3:
	INC R3				;R3加一,即目标地址加一
	DJNZ R5,LOOP1		;R5减一后不为,则跳转到LOOP1继续执行
	LJMP $
	END
		

结果:
3000H起始存储块内容:
在这里插入图片描述

4000H起始存储块内容:
在这里插入图片描述

实验二 数据排序

本例程采用冒泡排序法将内部RAM中的50~59H单元中的10个单字节无符号二进制数按从小到大的次序排列,并将这一列排序后的数据从小到大依次存贮到外部RAM 1000H开始处。

代码示例:

	ORG 0000H
	JMP MAIN
	ORG 0100H
MAIN:				;从50H单元开始赋值
	MOV 50H,#5FH
	MOV 51H,#56H
	MOV 52H,#5AH
	MOV 53H,#5EH
	MOV 54H,#51H
	MOV 55H,#5BH
	MOV 56H,#53H
	MOV 57H,#58H
	MOV 58H,#57H
	MOV 59H,#55H
	MOV R2,#9		;判断内循环
	MOV R3,#10		;判断外循环
	MOV R1,#50H		;内部RAM地址
	MOV R5,#10		;内部RAM转移到外部RAM循环判断
	MOV DPTR,#1000H	;外部RAM地址
	NOP				;用于设置断点查看赋值是否成功
LOOP1:				;一次外循环结束后跳到这里重新赋值,执行内循环
	MOV R2,#9
	MOV R0,#50H
LOOP2:				;比较两个数是否相等
	MOV A,@R0		;A存放前面一个单元的内容
	INC R0
	MOV B,@R0		;B存放后一个单元的内容
	CLR C			;清除进位标志
	CJNE A,B,LOOP4	;两个数不相等则跳转,并且CY有值

LOOP3:
	DJNZ R2,LOOP2	;内循环条件,R2不等于0跳回LOOP2执行
	DJNZ R3,LOOP1	;外循环条件
	LJMP LOOP
LOOP4:				;若A大于B,则交换位置
	JC LOOP3		;A小于B,有借位,不交换位置,跳转
	XCH A,B			;交换A,B的内容
	DEC R0			;R0寄存器减一
	MOV @R0,A		;A(较小)的值放到前一个单元
	INC R0			;R0寄存器加一
	MOV @R0,B		;B(较大)的值放到后一个单元
	LJMP LOOP3		;跳到循环判断LOOP3
LOOP:				;内部RAM50H转移到外部RAM1000H
	MOV A,@R1
	MOVX @DPTR,A	
	INC R1			;地址加一
	INC DPTR
	DJNZ R5,LOOP	;循环10次转移
	SJMP $
	END

结果:

50H起始单元赋值乱序结果:
在这里插入图片描述


50H起始单元赋值后排序结果:

在这里插入图片描述

片外1000H起始单元排序结果:
在这里插入图片描述

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值