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起始单元排序结果:

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/91647.html