user: 请将以下的汇编代码转换成C语言代码：

```asm
<print_cpsr>:
  endbr64
  push   %rbp
  mov    %rsi,%rbp
  push   %rbx
  mov    %edi,%ebx
  lea    D7(%rip),%rdi
  sub    $0x8,%rsp
  call   <UART0_SendString@plt>
  mov    %rbp,%rdi
  lea    D109(%rip),%rbp
  call   <UART0_SendString@plt>
  lea    D82(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  call   <UART0_SendData32@plt>
  mov    %rbp,%rdi
  call   <UART0_SendString@plt>
  lea    D67(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x1f,%edi
  call   <UART0_SendData32@plt>
  lea    D68(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x1e,%edi
  and    $0x1,%edi
  call   <UART0_SendData32@plt>
  lea    D24(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x1d,%edi
  and    $0x1,%edi
  call   <UART0_SendData32@plt>
  lea    D32(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x1c,%edi
  and    $0x1,%edi
  call   <UART0_SendData32@plt>
  lea    D100(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x7,%edi
  and    $0x1,%edi
  call   <UART0_SendData32@plt>
  lea    D85(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x6,%edi
  and    $0x1,%edi
  call   <UART0_SendData32@plt>
  lea    D102(%rip),%rdi
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  shr    $0x5,%edi
  and    $0x1,%edi
  call   <UART0_SendData32@plt>
  lea    D90(%rip),%rdi
  and    $0x1f,%ebx
  call   <UART0_SendString@plt>
  mov    %ebx,%edi
  call   <UART0_SendData32@plt>
  add    $0x8,%rsp
  mov    %rbp,%rdi
  pop    %rbx
  pop    %rbp
  jmp    1060 <UART0_SendString@plt>
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D7
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D109
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D82
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D67
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D68
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D24
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D32
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D100
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D85
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D102
type_guessed: string
name: extract_symbolic_data
arguments: data_tag: D90
type_guessed: string

tool: D7: 
Interrupt Reason:

tool: D109: 


tool: D82: ,	CPSR = 

tool: D67: 	[31], N, Negative:

tool: D68: 	[30], Z, Zero:

tool: D24: 	[29], C, Carry:

tool: D32: 	[28], V, Overflow:

tool: D100: 
	[7], I, IRQ:

tool: D85: 	[6], F, FIQ:

tool: D102: 	[5], T, Thumb:

tool: D90: 	[4:0], Mode:

assistant: ```c
void print_cpsr(unsigned int cpsr, char *why) {
  UART0_SendString("\n\rInterrupt Reason:");
  UART0_SendString(why);
  UART0_SendString(",\tCPSR = ");
  UART0_SendData32(cpsr);
  UART0_SendString("\n\r");
  UART0_SendString("\t[31], N, Negative:");
  UART0_SendData32((cpsr >> 31) & 0x1);
  UART0_SendString("\t[30], Z, Zero:");
  UART0_SendData32((cpsr >> 30) & 0x1);
  UART0_SendString("\t[29], C, Carry:");
  UART0_SendData32((cpsr >> 29) & 0x1);
  UART0_SendString("\t[28], V, Overflow:");
  UART0_SendData32((cpsr >> 28) & 0x1);
  UART0_SendString("\n\r\t[7], I, IRQ:");
  UART0_SendData32((cpsr >> 7) & 0x1);
  UART0_SendString("\t[6], F, FIQ:");
  UART0_SendData32((cpsr >> 6) & 0x1);
  UART0_SendString("\t[5], T, Thumb:");
  UART0_SendData32((cpsr >> 5) & 0x1);
  UART0_SendString("\t[4:0], Mode:");
  UART0_SendData32((cpsr)&0x1f);
  UART0_SendString("\n\r");
}
```