问题回答: R4、R5定义的目的地址单元中转移之前为随机数,转移后内容与以R2、R3开始的的源地址单元中20个字节内容相同,即实现了数据的传送。
六、实验源程序
ORG 0000H
AJMP MAIN ORG 07B0H
MAIN: MOV R7, #20H
MOV R6, #00H MOV R2, #00H MOV R3, #00H MOV R4, #00H MOV R5, #30H LOOP: INC R3
INC R5 MOV DPL,R3
MOV DPH, R2 MOVX A, @DPTR MOV DPL, R5 MOV DPH, R4 MOVX @DPTR, A
CJNE R3, #021H, LOOP
END
实验六 查找相同数个数
一、实验目的
熟悉汇编语言编程。
二、实验内容
在2000~200Fh中查出有几个字节是零,把个数放在2100h中。
-6-
三、程序框图
四、实验过程
(1)实验中利用R0放置需查找段长度,即设置其值为10H,设置R1初值为00H,用于存放等于零数据的个数。
(2)从2000H单元开始,程序中利用等于零跳转指令JZ,实现找到0则R1加一计数的功能,每次检查完一个单元R0减1,指针下移,直到R0等于0结束循环。循环终止后,将R1内容存入2100H中即可。
五、实验结果及分析
问题回答:若需查找0FFH,只需将语句JZ LOOP1改为CJNZ R0, #0FFH, LOOP1即可,即数据等于0FFH时跳转到计数+1的程序段进行计数。
六、实验源程序
;查找相同数个数 ORG 0000H
LJMP MAIN ORG 0AA0H
MAIN: MOV DPL, #00H
MOV DPH, #20H
-7-
MOV R0, #10H MOV R1, #00H
LOOP: MOVX A, @DPTR JZ LOOP1
DEC R0 INC DPTR SJMP LOOP2
LOOP1: INC R1
DEC R0 INC DPTR
LOOP2: CJNE R0, #00H, LOOP
MOV DPL, #00H MOV DPH, #21H MOV A, R1 MOVX @DPTR, A
END
实验七 无符号双字节快速乘法子程序
一、实验目的
掌握MCS-51汇编语言程序设计方法。
二、实验内容
将(R2 R3)和(R6 R7)中双字节无符号整数相乘,乘积送R4 R5 R6 R7中。
三、程序框图
四、实验过程
本程序是利用单字节的乘法指令MUL,根据下面的公式实现双字节数的乘法。
(R2 R3)×(R6 R7)
-8-
= ((R2)×28+(R3))×((R6)×28+(R7))
= (R2)×(R6)×216+(R2)×(R7)+(R3)×(R6)×28+(R3)*(R7)
将乘数与被乘数高低字节拆开分别相乘,然后再将每个高字节因子向前移动8位进行调整,进行加权求和。利用ADDC语句可实现带进位的加法运算。得到的最终结果存入R4、R5、R6、R7寄存器中。
五、实验结果及分析
寄存器R2、R3、R6、R7分别输入01、10、11、10,运行程序,即进行0110H×1110H的运算,得到结果为00122100H存放在R4、R5、R6、R7寄存器中,故R4、R6中的内容是00H和21H。
六、实验源程序
;无符号双字节快速乘法子程序
ORG 0970H
MAIN: MOV R2, #00H
MOV R3, #02H MOV R6, #00H MOV R7, #05H MOV A, R3 MOV B, R7 MUL AB XCH A, R7 MOV R5, B MOV B, R2 MUL AB ADD A, R5 MOV R4, A CLR A
ADDC A, B MOV R5, A MOV A, R6 MOV B, R3 MUL AB ADD A, R4 XCH A, R6
-9-
XCH A, B ADDC A, R5 MOV R5, A MOV F0, C MOV A, R2 MUL AB ADD A, R5 MOV R5, A CLR A
MOV ACC.0, C
MOV C, F0 ADDC A, B MOV R4, A SJMP $ END
实验八 多分支程序
一、实验目的
掌握汇编语言的编程。
二、实验内容
编写程序,根据送入的数据转移运行。
三、程序框图
四、实验过程
实验中利用散转指令JMP @A+DPTR实现程序的多分支跳转,这里A为变址寄存器,DPTR为基址寄存器。跳转到不同分支的运行结果由LED进行显示,每个分支对应的数码管上显示不同的数字。显示数字由数字七段码送至I/O口显示。在显示程序中利用循环左移加延时子程序调用,实现数字循环显示的效果。
编程中需要注意的是,A需乘以2即左移一位再作为变址寄存器,这是程序中由于分支跳转语句为2个字节所致。
五、实验结果及分析
实验中可以看到选择不同的数字进入不同分支,LED管上会出现不同数字的循环左移显示。
问题回答:如需将循环速度减慢,只要将延时子程序初值变大,或增加循环层数,或者再增加一段循环语句即可,如可进行以下修改:
改为DELAY:
-10-