user: 请将这段汇编代码片段转换成等效的C代码:

```asm
<data_abort>:
  endbr64
  push   %r15
  mov    %rdi,%r15
  lea    D104(%rip),%rdi
  push   %r14
  mov    %rsi,%r14
  push   %r13
  mov    %rdx,%r13
  push   %r12
  mov    %rcx,%r12
  push   %rbp
  mov    %r9,%rbp
  push   %rbx
  sub    $0x58,%rsp
  mov    0xa0(%rsp),%rdx
  mov    0x90(%rsp),%rsi
  mov    %r8,0x48(%rsp)
  mov    0x98(%rsp),%rcx
  mov    0xa8(%rsp),%r11
  mov    0xb0(%rsp),%r10
  mov    0xb8(%rsp),%r9
  mov    %rdx,0x30(%rsp)
  mov    0xc0(%rsp),%rax
  mov    0xd0(%rsp),%rdx
  mov    %rsi,0x40(%rsp)
  mov    %rcx,0x38(%rsp)
  mov    0xc8(%rsp),%rbx
  mov    %r11,0x28(%rsp)
  mov    %r10,0x20(%rsp)
  mov    %r9,0x18(%rsp)
  mov    %rdx,0x10(%rsp)
  mov    %rax,0x8(%rsp)
  call   <uart0_write@plt>
  lea    D56(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r15,%rdi
  call   <uart0_write_hex@plt>
  lea    D117(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r14,%rdi
  call   <uart0_write_hex@plt>
  lea    D73(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r13,%rdi
  call   <uart0_write_hex@plt>
  lea    D137(%rip),%rdi
  call   <uart0_write@plt>
  mov    %r12,%rdi
  call   <uart0_write_hex@plt>
  lea    D49(%rip),%rdi
  call   <uart0_write@plt>
  mov    %rbp,%rdi
  call   <uart0_write_hex@plt>
  lea    D23(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x40(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D154(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x38(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D66(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x30(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D25(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x28(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D142(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x20(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D13(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x18(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D74(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x8(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D150(%rip),%rdi
  call   <uart0_write@plt>
  mov    %rbx,%rdi
  call   <uart0_write_hex@plt>
  lea    D30(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x10(%rsp),%rdi
  call   <uart0_write_hex@plt>
  lea    D124(%rip),%rdi
  call   <uart0_write@plt>
  mov    0x48(%rsp),%rdi
  call   <uart0_write_hex@plt>
  add    $0x58,%rsp
  mov    $0x5dc,%edi
  pop    %rbx
  pop    %rbp
  pop    %r12
  pop    %r13
  pop    %r14
  pop    %r15
  jmp    1090 <panic_blink@plt>
```

tool_calls: name: extract_symbolic_data
arguments: tag: D104
data_type: string
name: extract_symbolic_data
arguments: tag: D56
data_type: string
name: extract_symbolic_data
arguments: tag: D117
data_type: string
name: extract_symbolic_data
arguments: tag: D73
data_type: string
name: extract_symbolic_data
arguments: tag: D137
data_type: string
name: extract_symbolic_data
arguments: tag: D49
data_type: string
name: extract_symbolic_data
arguments: tag: D23
data_type: string
name: extract_symbolic_data
arguments: tag: D154
data_type: string
name: extract_symbolic_data
arguments: tag: D66
data_type: string
name: extract_symbolic_data
arguments: tag: D25
data_type: string
name: extract_symbolic_data
arguments: tag: D142
data_type: string
name: extract_symbolic_data
arguments: tag: D13
data_type: string
name: extract_symbolic_data
arguments: tag: D74
data_type: string
name: extract_symbolic_data
arguments: tag: D150
data_type: string
name: extract_symbolic_data
arguments: tag: D30
data_type: string
name: extract_symbolic_data
arguments: tag: D124
data_type: string

tool: D104: data abort!


tool: D56:  r0   

tool: D117:  r1   

tool: D73:  r2   

tool: D137:  r3   

tool: D49:  r4   

tool: D23:  r5   

tool: D154:  r6   

tool: D66:  r7   

tool: D25:  r8   

tool: D142:  r9   

tool: D13:  r10  

tool: D74:  r11  

tool: D150:  ip   

tool: D30:  pc   

tool: D124:  cpsr 

assistant: ```c
void data_abort(long r_0, long r_1, long r_2, long r_3, long spsr, long r_4, long r_5, long r_6, long r_7, long r_8, long r_9, long r_10, long r_11, long r_12, long prev_pc) {
  uart0_write("data abort!\r\n");
  uart0_write(" r0   ");
  uart0_write_hex(r_0);
  uart0_write(" r1   ");
  uart0_write_hex(r_1);
  uart0_write(" r2   ");
  uart0_write_hex(r_2);
  uart0_write(" r3   ");
  uart0_write_hex(r_3);
  uart0_write(" r4   ");
  uart0_write_hex(r_4);
  uart0_write(" r5   ");
  uart0_write_hex(r_5);
  uart0_write(" r6   ");
  uart0_write_hex(r_6);
  uart0_write(" r7   ");
  uart0_write_hex(r_7);
  uart0_write(" r8   ");
  uart0_write_hex(r_8);
  uart0_write(" r9   ");
  uart0_write_hex(r_9);
  uart0_write(" r10  ");
  uart0_write_hex(r_10);
  uart0_write(" r11  ");
  uart0_write_hex(r_11);
  uart0_write(" ip   ");
  uart0_write_hex(r_12);
  uart0_write(" pc   ");
  uart0_write_hex(prev_pc);
  uart0_write(" cpsr ");
  uart0_write_hex(spsr);
  panic_blink(1500);
}
```