实验三 拼字程序
一、实验目的
进—步掌握汇编语言设计和调试方法。
二、实验内容
把2000H、2001H的低位分别送入2002H高低位,一般本程序用于把显示缓冲区的数据取出拼装成—个字节。
三、程序框图
四、实验步骤
单步或用断点方式运行程序,检查2002H内容变化情况。 ORG 0680H SE03: MOV DPTR,#2000H MOVX A,@DPTR
ANL A,#0FH ;(2000H)内容屏敝高位 SWAP A ;交换 MOV B,A ;保存 INC DPTR
MOVX A,@DPTR ;(2001H)内容送A ANL A,#0FH ;屏敝高位 ORL A,B ;或 INC DPTR
MOVX @DPTR,A ;送2002H SJMP $ END
实验四 数据区传送子程序
一、实验目的
掌握RAM中的数据操作。
二、实验内容
把R2、R3源RAM区首址内的R6、R7字节数据传送到R4、R5目的RAM区。
三、程序框图
5
四、实验步骤
在R2、R3中输入源首址(例如0000H),R4、R5中输入目的地址(例如0200H), R6、R7中输入字节数(例如01FFH),运行程序,检查0000-01FFH中内容是否和0200-03FFH中内容完全—致。
ORG 07B0H
MOV R2,#00H MOV R3,#00H MOV R4,#02H MOV R5,#00H MOV R6,#01H MOV R7,#0FFH SE22: MOV DPL,R3
MOV DPH,R2 ;建立源程序首址 MOVX A,@DPTR ;取数 MOV DPL,R5
MOV DPH,R4 ;目的地首址 MOVX @DPTR,A ;传送 CJNE R3,#0FFH,LO42 INC R2
LO42: INC R3 ;源地址加1 CJNE R5,#0FFH,LO43 INC R4
LO43: INC R5 ;目地址加1 CJNE R7,#00H,LO44
CJNE R6,#00H,LO45 ;字节数减1 SJMP $ NOP LO44: DEC R7 SJMP SE22 LO45: DEC R7 DEC R6
SJMP SE22 ;未完继续 END
6
实验五 数据排序实验
一、实验目的
熟悉8032指令系统,掌握程序设计方法。
二、实验内容
编写并调试一个排序子程序,其功能为用冒泡法将内容RAM中几个单字节无符号的正整数,按从小到大的次序重新排列。
三、程序框图
四、实验步骤
把8032中RAM 50H-5AH中放入不等的数据,运行本实验程序后检查50-5AH中内容是否按从小到大排列。(注意数据是在CPU内部存储区存放,注意寻址方式。)
五、思考
1.修改程序把50H-5AH中内容按从大到小排列; 2.如果改为有符号数,如何修改。 ORG 09B0H QUE: MOV R3,#50H
QUE1: MOV A,R3 ;指针送R0 MOV R0,A
MOV R7,#0AH ;长度送R7 CLR 00H ;标志位为0 MOV A,@R0 QL2: INC R0 MOV R2,A CLR C MOV 22H,@R0
CJNE A,22H,QL3 ;相等吗? SETB C QL3: MOV A,R2
JC QL1 ;大于交换位置
7
SETB 00H XCH A,@R0 DEC R0 XCH A,@R0
INC R0 ;大于交换位置 QL1: MOV A,@R0 DJNZ R7,QL2
JB 00H,QUE1 ;一次循环中有交换继续 SJMP $ ;无交换退出 END
实验六 查找相同数个数
一、实验目的
熟悉汇编语言编程。
二、实验内容
在2000—200FH中查出有几个字节是零,把个数放在2010H中。
三、程序框图
四、实验步骤
在2000—200FH的几个单元中填入零,运行本程序后检查2010H中是几个单元数。
五、思考
修改程序,查找其它内容。 ORG 0AA0H
L5800: MOV R0,#10H ;查找16个字节 MOV R1,#00H MOV DPTR,#2000H L5811: MOVX A,@DPTR
CJNE A,#00H,L5816 ;取出内容与00H相等吗? INC R1 ;取出个数加1 L5816: INC DPTR
DJNZ R0,L5811 ;未完继续 MOV DPTR,#2010H MOV A,R1
8
MOVX @DPTR,A ;相同数个数送2010H L581E: SJMP L581E END
实验七 无符号双字节快速乘法子程序
一、实验目的
掌握MCS-51汇编语言程序设计方法。
二、预备知识
本程序是利用单字节的乘法指令,根据下面的公式进行乘法运算的:
8
8
(R2R3)*(R6R7)=((R2)*2+(R3))*((R6)*2+(R7)) =(R2)*(R6)*2+((R2)*(R7)+(R3)*(R6))*2+(R3)*(R7)
三、实验内容
将(R2R3)和(R6R7)中双字节无符号整数相乘,积送R4 R5 R6 R7中。
16
8
四、程序框图
五、实验步骤
在R2R3和R6R7中输入无符号整数,连续或单步运行本实验程序后检查R4 R5 R6 R7 中内容。
ORG 0970H
QKUL: MOV A,R3 MOV B,R7
MUL AB ;R3*R7
XCH A,R7 ;R7=(R3*R7)低字节 MOV R5,B ;R5=(R3*R7)高字节 MOV B,R2
MUL AB ;R2*R7 ADD A,R5 MOV R4,A CLR A ADDC A,B
MOV R5,A ;R5=(R2*R7)高字节
9