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

```asm
<Print_MPU_register_map>:
  endbr64
  push   %rbp
  mov    %rsp,%rbp
  sub    $0xa0,%rsp
  mov    %edi,-0x94(%rbp)
  mov    %esi,-0x98(%rbp)
  mov    %fs:0x28,%rax
  mov    %rax,-0x8(%rbp)
  xor    %eax,%eax
  mov    -0x94(%rbp),%eax
  mov    %al,-0x8a(%rbp)
  jmp    L51
L0:
  movzbl -0x8a(%rbp),%eax
  lea    -0x8c(%rbp),%rdx
  mov    %rdx,%rcx
  mov    $0x1,%edx
  mov    %eax,%esi
  mov    $0x28,%edi
  call   <MPU_I2C_Read@plt>
  movb   $0x1,-0x8b(%rbp)
  movl   $0x7,-0x88(%rbp)
  jmp    L9
L12:
  movzbl -0x8c(%rbp),%eax
  and    -0x8b(%rbp),%al
  mov    %al,-0x89(%rbp)
  cmpb   $0x0,-0x89(%rbp)
  je     L8
  mov    -0x88(%rbp),%eax
  cltq
  movb   $0x31,-0x84(%rbp,%rax,1)
  jmp    L2
L8:
  mov    -0x88(%rbp),%eax
  cltq
  movb   $0x30,-0x84(%rbp,%rax,1)
L2:
  shlb   -0x8b(%rbp)
  subl   $0x1,-0x88(%rbp)
L9:
  cmpl   $0x0,-0x88(%rbp)
  jns    L12
  movb   $0x0,-0x7b(%rbp)
  lea    -0x70(%rbp),%rax
  lea    D2(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcpy@plt>
  movzbl -0x8a(%rbp),%eax
  lea    -0x7a(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ShortToStr@plt>
  lea    -0x7a(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  movzbl -0x8a(%rbp),%eax
  lea    -0x7a(%rbp),%rdx
  mov    %rdx,%rsi
  mov    %eax,%edi
  call   <ShortToHex@plt>
  lea    -0x70(%rbp),%rax
  lea    D26(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x7a(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x70(%rbp),%rax
  lea    D14(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x84(%rbp),%rdx
  lea    -0x70(%rbp),%rax
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x70(%rbp),%rax
  lea    D17(%rip),%rdx
  mov    %rdx,%rsi
  mov    %rax,%rdi
  call   <strcat@plt>
  lea    -0x70(%rbp),%rax
  mov    %rax,%rdi
  call   <UART2_write_text@plt>
  mov    $0x14,%edi
  call   <delay_ms@plt>
  movzbl -0x8a(%rbp),%eax
  add    $0x1,%eax
  mov    %al,-0x8a(%rbp)
L51:
  movzbl -0x8a(%rbp),%eax
  cmp    %eax,-0x98(%rbp)
  jge    L0
  nop
  mov    -0x8(%rbp),%rax
  sub    %fs:0x28,%rax
  je     L55
  call   <__stack_chk_fail@plt>
L55:
  leave
  ret
```

tool_calls: name: extract_symbolic_data
arguments: data_tag: D2
datatype: string
name: extract_symbolic_data
arguments: data_tag: D26
datatype: string
name: extract_symbolic_data
arguments: data_tag: D14
datatype: string
name: extract_symbolic_data
arguments: data_tag: D17
datatype: string

tool: D2: Adresse =

tool: D26:  (0x

tool: D14: )  Inhalt = 0b

tool: D17: 

assistant: ```c
void Print_MPU_register_map(int startAdress, int EndAdress) {
  unsigned char dat, dat_temp, mask, registerAdress;
  char stn_out[100], bit_string[10], adress_string[10];
  int i;
  for (registerAdress = startAdress; registerAdress <= EndAdress; registerAdress++) {
    MPU_I2C_Read(0x28, registerAdress, 1, &dat);
    mask = 0b00000001;
    for (i = 7; i >= 0; i--) {
      dat_temp = dat & mask;
      if (dat_temp > 0)
        bit_string[i] = '1';
      else
        bit_string[i] = '0';
      mask = mask << 1;
    }
    bit_string[9] = 0;
    strcpy(stn_out, "Adresse =");
    ShortToStr((short)registerAdress, adress_string);
    strcat(stn_out, adress_string);
    ShortToHex((unsigned short)registerAdress, adress_string);
    strcat(stn_out, " (0x");
    strcat(stn_out, adress_string);
    strcat(stn_out, ")  Inhalt = 0b");
    strcat(stn_out, bit_string);
    strcat(stn_out, "\x0D");
    UART2_write_text(stn_out);
    delay_ms(20);
  }
}
```