user: 请从给定的汇编指令推导出C源代码:

```asm
<searchMatrix>:
  endbr64
  mov    %rdi,%r8
  mov    %ecx,%edi
  test   %esi,%esi
  sete   %al
  test   %edx,%edx
  sete   %cl
  or     %cl,%al
  jne    L60
  test   %r8,%r8
  je     L60
  push   %rbx
  sub    $0x1,%esi
  lea    -0x1(%rdx),%r9d
  movslq %r9d,%r11
  lea    0x0(,%r11,4),%r10
  mov    $0x0,%edx
  jmp    L17
L236:
  movslq %esi,%rdx
  mov    (%r8,%rdx,8),%rdx
  mov    (%rdx,%r10,1),%edx
  cmp    %edi,%edx
  jle    L107
  movslq %eax,%rbx
  mov    (%r8,%rbx,8),%rbx
  cmp    %edi,(%rbx,%r10,1)
  jge    L107
  lea    0x1(%rax),%edx
L87:
  cmp    %esi,%edx
  je     L180
  jge    L57
L17:
  lea    (%rdx,%rsi,1),%eax
  sar    %eax
  movslq %edx,%rcx
  mov    (%r8,%rcx,8),%rcx
  mov    (%rcx),%ecx
  cmp    %edi,%ecx
  jge    L236
  movslq %eax,%rbx
  mov    (%r8,%rbx,8),%rbx
  cmp    %edi,(%rbx,%r10,1)
  jle    L236
  mov    %eax,%esi
  jmp    L87
L107:
  mov    $0x1,%esi
  cmp    %edi,%ecx
  je     L69
  cltq
  mov    (%r8,%rax,8),%rax
  cmp    %edi,(%rax,%r11,4)
  sete   %sil
  cmp    %edi,%edx
  sete   %al
  or     %eax,%esi
  movzbl %sil,%esi
L69:
  mov    %esi,%eax
  pop    %rbx
  ret
L180:
  movslq %edx,%rdx
  lea    (%r8,%rdx,8),%r10
  mov    $0x0,%edx
  jmp    L171
L199:
  movslq %r9d,%rdx
  mov    (%rcx,%rdx,4),%edx
  cmp    %edi,%edx
  jle    L218
  movslq %eax,%rsi
  cmp    %edi,(%rcx,%rsi,4)
  jge    L218
  mov    %eax,%edx
L84:
  lea    0x1(%rdx),%eax
  cmp    %r9d,%eax
  je     L151
L171:
  cmp    %r9d,%edx
  jge    L158
  lea    (%rdx,%r9,1),%eax
  sar    %eax
  mov    (%r10),%rcx
  movslq %edx,%rsi
  mov    (%rcx,%rsi,4),%r8d
  cmp    %edi,%r8d
  jge    L199
  movslq %eax,%rsi
  cmp    %edi,(%rcx,%rsi,4)
  jle    L199
  mov    %eax,%r9d
  jmp    L84
L218:
  mov    $0x1,%esi
  cmp    %edi,%r8d
  je     L69
  cltq
  cmp    %edi,(%rcx,%rax,4)
  sete   %sil
  cmp    %edi,%edx
  sete   %al
  or     %eax,%esi
  movzbl %sil,%esi
  jmp    L69
L158:
  mov    $0x0,%esi
  jmp    L69
L57:
  mov    $0x0,%esi
  jmp    L69
L60:
  mov    $0x0,%esi
  mov    %esi,%eax
  ret
L151:
  mov    $0x0,%esi
  jmp    L69
```

assistant: ```c
bool searchMatrix(int **matrix, int matrixRowSize, int matrixColSize, int target) {
  if (matrix == NULL || matrixRowSize == 0 || matrixColSize == 0) {
    return false;
  }
  int rowStart = 0;
  int mid = 0;
  int rowEnd = matrixRowSize - 1;
  int colStart = 0;
  int colEnd = matrixColSize - 1;
  do {
    mid = (rowStart + rowEnd) >> 1;
    if (*(*(matrix + rowStart) + 0) < target && *(*(matrix + mid) + colEnd) > target) {
      rowEnd = mid;
    } else if ((*(*(matrix + rowEnd) + colEnd)) > target && (*(*(matrix + mid) + colEnd)) < target) {
      rowStart = mid + 1;
    } else if (*(*(matrix + rowStart) + 0) == target || *(*(matrix + mid) + colEnd) == target || *(*(matrix + rowEnd) + colEnd) == target) {
      return true;
    } else {
      return false;
    }
    if (rowStart == rowEnd) {
      while (colStart < colEnd) {
        mid = (colStart + colEnd) >> 1;
        if (*(*(matrix + rowStart) + colStart) < target && *(*(matrix + rowStart) + mid) > target) {
          colEnd = mid;
        } else if (*(*(matrix + rowStart) + colEnd) > target && *(*(matrix + rowStart) + mid) < target) {
          colStart = mid;
        } else if (*(*(matrix + rowStart) + colStart) == target || *(*(matrix + rowStart) + mid) == target || *(*(matrix + rowStart) + colEnd) == target) {
          return true;
        } else {
          return false;
        }
        if (colStart + 1 == colEnd) {
          return false;
        }
      }
      return false;
    }
  } while (rowStart < rowEnd);
  return false;
}
```