已知time buff=$1100,display_buff=$1104且从$1100开始的SRAM内存单元中存放的数据为:$14,$30,$45,$27,分析程序。 1 put: ldi xl,low(time_buff) 2 ldi xh,high(time_buff) 3 ldi yl,low(display_buff) 4 ldi yhhigh(display_buff) 5 ldi r18,4 6 loop: ld r23,x+ 7 mov r24,r23 8 swap r24 9 andi r24,0x0f 10 andi r23,0x0f 11 st y+,r23 12 st y+,r24 13 dec r18 14 brne loop 15 ret 第4行执行后,Y=$(1) 第6行第一次执行后,X=$(2) 第6行第一次执行后,R23=$(3) 第8行第一次执行后,R24=$(4) 第9行第一次执行后,R24=$(5) 第10行第一次执行后,R23=$(6) 第12行第一次执行后,Y=$(7)算出来结果,并把相应的汇编程序写出来
时间: 2023-11-30 10:04:13 浏览: 84
程序分析:
这段程序的作用是将存放在SRAM内存单元中的数据进行处理后存放在另一个内存单元中,具体处理方法是将每个字节的高四位和低四位交换,并且将其存储到目标内存单元中。程序的主要逻辑是通过寄存器X和Y来分别指向源数据和目标数据的内存单元,然后通过循环来遍历所有的源数据,并进行处理后存储到目标内存单元中。
程序汇编代码如下:
```assembly
ldi xl,low(time_buff) ;将time_buff的低8位存入寄存器xl
ldi xh,high(time_buff) ;将time_buff的高8位存入寄存器xh
ldi yl,low(display_buff);将display_buff的低8位存入寄存器yl
ldi yh,high(display_buff);将display_buff的高8位存入寄存器yh
ldi r18,4 ;将循环次数存入寄存器r18
loop: ;开始循环
ld r23,x+ ;将源数据的一个字节读入寄存器r23,并将寄存器x自增1
mov r24,r23 ;将r23的值复制到r24
swap r24 ;将r24的高4位和低4位交换
andi r24,0x0f ;将r24的高4位清零
andi r23,0x0f ;将r23的低4位清零
st y+,r23 ;将r23的低4位存入目标数据的一个字节中,并将寄存器y自增1
st y+,r24 ;将r24的低4位存入目标数据的一个字节中,并将寄存器y自增1
dec r18 ;将循环次数减1
brne loop ;如果循环次数不为0,则跳转到loop标签处继续循环
ret ;返回
```
程序执行过程中的变量及结果如下:
```
time_buff=$1100
display_buff=$1104
SRAM内存单元中数据:$14,$30,$45,$27
循环次数:4
程序执行步骤:
1. X指向$1100,Y指向$1104
2. 从$1100读入$14,存入R23,X自增1
3. 复制R23的值到R24
4. 将R24的高4位和低4位交换,结果为$40
5. 将R24的高4位清零,结果为$00
6. 将R23的低4位清零,结果为$10
7. 将R23的低4位存入$1104中,Y自增1,$1104的值变为$10
8. 将R24的低4位存入$1105中,Y自增1,$1105的值变为$04
9. 循环次数减1,剩余3次
10. X指向$1101
11. 从$1101读入$30,存入R23,X自增1
12. 复制R23的值到R24
13. 将R24的高4位和低4位交换,结果为$03
14. 将R24的高4位清零,结果为$00
15. 将R23的低4位清零,结果为$30
16. 将R23的低4位存入$1106中,Y自增1,$1106的值变为$30
17. 将R24的低4位存入$1107中,Y自增1,$1107的值变为$00
18. 循环次数减1,剩余2次
19. X指向$1102
20. 从$1102读入$45,存入R23,X自增1
21. 复制R23的值到R24
22. 将R24的高4位和低4位交换,结果为$54
23. 将R24的高4位清零,结果为$04
24. 将R23的低4位清零,结果为$40
25. 将R23的低4位存入$1108中,Y自增1,$1108的值变为$40
26. 将R24的低4位存入$1109中,Y自增1,$1109的值变为$04
27. 循环次数减1,剩余1次
28. X指向$1103
29. 从$1103读入$27,存入R23,X自增1
30. 复制R23的值到R24
31. 将R24的高4位和低4位交换,结果为$72
32. 将R24的高4位清零,结果为$02
33. 将R23的低4位清零,结果为$20
34. 将R23的低4位存入$110A中,Y自增1,$110A的值变为$20
35. 将R24的低4位存入$110B中,Y自增1,$110B的值变为$02
36. 循环次数减1,剩余0次
37. 程序结束,返回
最终结果为:
$1104: $10 $04
$1106: $30 $00
$1108: $40 $04
$110A: $20 $02
```
阅读全文