程序 74 08 MOV A,#08H 75 F0 76 MOV B,#76H 25 E0 ADD A,A 25 F0 ADD A,B 02 20 00 LJMP 2000H 存放在程序存储器中,试分析该程序,并回答以下问题: (1)如该程序段自001FH单元开始存放,请在程序段中写明每条指令的地 址。 (2)该程序段共占用内存多少单元? (3)在执行指令ADD A,A时,程序计数器PC= 。 (4)执行完指令ADD A,B后,累加器A= 、寄存器B= 及程序 计数器PC= 。 (5)在CPU取回指令LJMP 2000H并执行该指令时PC= 。该指令执行 后PC= 。
时间: 2024-03-04 21:49:28 浏览: 32
(1)程序段中每条指令的地址如下:
```
001F: 74 08 MOV A, #08H
0021: 75 F0 MOV B, #76H
0023: 76 NOP
0024: 25 E0 ADD A, A
0026: 25 F0 ADD A, B
0028: 02 20 00 LJMP 2000H
```
(2)该程序段共占用6个内存单元,从001F到0028。
(3)在执行指令ADD A,A时,程序计数器PC=0024H。
(4)执行完指令ADD A,B后,累加器A=84H,寄存器B=76H,程序计数器PC=0028H。
(5)在CPU取回指令LJMP 2000H并执行该指令时,PC=0028H。该指令执行后,PC的值等于2000H,即跳转到2000H地址处继续执行程序。
相关问题
1.为下列程序段的每一行注释;并说明整个程序段的功能、给出结果。 设R0=20H,R1=25H,(20H)=70H,(21H)=80H,(22H)=A0H,(22H)=A0H,(25H)=A0H(26H)=6FH,(27H)=76H,下列程序执行后, CLR C ; MOV R2,#3 ; LOOP:MOV A,@R0 ; ADDC A,@R1 ; MOV @R0,A ; I
注释如下:
```
CLR C ; 清除进位标志
MOV R2,#3 ; 将立即数3移动到寄存器R2中
LOOP: ; 循环开始
MOV A,@R0 ; 将寄存器R0中存储的内存地址的值移动到累加器A中
ADDC A,@R1 ; 将寄存器R1中存储的内存地址的值加到累加器A中,并加上进位标志C
MOV @R0,A ; 将累加器A中的值移动到寄存器R0中存储的内存地址中
INC R0 ; 寄存器R0中存储的内存地址加1
DJNZ R2,LOOP ; 将寄存器R2中的值减1,如果不为0则跳转到LOOP处
```
整个程序段的功能是将两个内存地址中的值相加,并将结果存储到第一个内存地址中,循环执行3次。
给定的内存值为:
```
(20H)=70H
(21H)=80H
(22H)=A0H
(25H)=A0H
(26H)=6FH
(27H)=76H
```
执行结果为:
```
(20H)=F0H
(21H)=80H
(22H)=A0H
(25H)=A0H
(26H)=6FH
(27H)=76H
```
解释如下:
第一次循环:
```
MOV A,@R0 ; 将(20H)中的70H移动到累加器A中
ADDC A,@R1 ; 将(21H)中的80H加到累加器A中,并加上进位标志C
MOV @R0,A ; 将累加器A中的值F0H移动到(20H)中
INC R0 ; (20H)加1,指向下一个内存地址
```
第二次循环:
```
MOV A,@R0 ; 将(21H)中的80H移动到累加器A中
ADDC A,@R1 ; 将(22H)中的A0H加到累加器A中,并加上进位标志C
MOV @R0,A ; 将累加器A中的值20H移动到(21H)中
INC R0 ; (21H)加1,指向下一个内存地址
```
第三次循环:
```
MOV A,@R0 ; 将(22H)中的A0H移动到累加器A中
ADDC A,@R1 ; 将(25H)中的A0H加到累加器A中,并加上进位标志C
MOV @R0,A ; 将累加器A中的值40H移动到(22H)中
INC R0 ; (22H)加1,指向下一个内存地址
```
因此,最终内存值为:
```
(20H)=F0H
(21H)=80H
(22H)=40H
(25H)=A0H
(26H)=6FH
(27H)=76H
```
在8051的系统框架下1.为下列程序段的每一行注释;并说明整个程序段的功能、给出结果。 设R0=20H,R1=25H,(20H)=70H,(21H)=80H,(22H)=A0H,(22H)=A0H,(25H)=A0H(26H)=6FH,(27H)=76H,下列程序执行后, CLR C ; MOV R2,#3 ; LOOP:MOV A,@R0 ; ADDC A,@R1 ; MOV @R0,A ; INC R0 ; INC R1 ; DJNZ R2,LOOP ; JNC NEXT ; MOV @R0,#01H ; SJMP $ ; NEXT:DEC R0 ; SJMP $ ; 结果:(20H)= ,(21H)= ,(22H)= ,(23H)= ,(A)= ,(CY)=
注释如下:
```
CLR C ; 清除进位标志
MOV R2,#3 ; 将寄存器R2赋值为3,用于循环计数
LOOP:
MOV A,@R0 ; 将R0指向的内存值读入累加器A
ADDC A,@R1 ; 将R1指向的内存值加到A中,同时加上进位标志
MOV @R0,A ; 将A的结果存回R0指向的内存位置
INC R0 ; R0指向下一个内存位置
INC R1 ; R1指向下一个内存位置
DJNZ R2,LOOP ; 循环R2次,即执行3次
JNC NEXT ; 如果没有进位,则跳转到NEXT
MOV @R0,#01H ; 如果有进位,则将R0指向的内存位置赋值为01H
SJMP $ ; 无条件跳转到当前地址,即死循环
NEXT:
DEC R0 ; R0减1
SJMP $ ; 无条件跳转到当前地址,即死循环
```
整个程序的功能是将R0和R1指向的内存位置的值相加,并将结果存回R0指向的内存位置。如果加法过程中有进位,则将R0指向的内存位置赋值为01H。程序先将R0、R1、R2初始化,然后执行三次相加操作,如果有进位则跳转到输出01H的部分,否则进行减1操作并继续死循环。结果为:
```
(20H)=F8H,(21H)=F5H,(22H)=10FH,(23H)=16H,(A)=01H,(CY)=1
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![text/plain\011](https://img-home.csdnimg.cn/images/20210720083646.png)
![docx](https://img-home.csdnimg.cn/images/20210720083331.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)