📘
notes
  • Center
  • Language
    • Python
      • Python environment
      • Advanced Python
      • Python Standard Libary
      • Python Third Party
      • CPython
      • Python MISC
    • C++
      • C++ Draft
    • Java
      • JavaSE
    • SQL
      • SQL
    • Rust
      • Rust
  • Tool
    • Git
    • Docker
    • Database
    • Linux & Shell
      • shell-cheet-sheet
    • Vim
    • gcc & make & cmake
    • misc
  • Note
    • DL
      • DL-deploy
      • huggingface
      • pytorch-lightning
      • Pytorch
      • TensorFlow
    • NLP
    • CV
      • OpenCV
      • mmlab
    • Audio
    • GNN
    • CUDA
    • Triton
    • TODO LIST
    • Draft
  • Learn
    • C++ Primer
    • C++ Primer Plus
    • CSAPP
    • CPython Internals
Powered by GitBook
On this page
  • chapter 2
  • chapter 3

Was this helpful?

Edit on GitHub
  1. Learn

CSAPP

chapter 2

整型数值表示

将负数$-x$表示为二进制的方式为: 首先用二进制表示出$+x$, 按位取反后加1即可.

反过来, 依据二进制计算其表示的数字的方法为: 首先依据最高位判断符号, 若最高位为$0$, 则直接利用二进制转十进制确定; 若最高位为$1$, 则确定符号为负, 其绝对值由减一后按位取反, 再用二进制转十进制确定.

练习

假定INT类型为1字节有符号整数, 则数值表示范围为$[-2^7,2^7-1]=[-128,127]$.

+10 = 00001010 => 11110101 => -10 = 11110110 => 256 + (-10) = 246 = 11110110

11110110 => - ~(11110101)=>- 00001010 => -10

浮点型数值表示

chapter 3

//mstore.c
long mult2(long, long);
void multstore(long x, long y, long *dest) {
long t = mult2(x, y);
*dest = t;
}
$ gcc -Og -S mstore.c
$ gcc -c -Og -o mstore.o mstore.c

显示.o文件里的部分机器码:

$ gdb mstore.o
(gdb) x/14xb multstore # 显示机器码0x0 <multstore>:    0x53    0x48    0x89    0xd3    0xe8    0x00    0x00    0x00
0x8 <multstore+8>:    0x00    0x48    0x89    0x03    0x5b    0xc3

显示.s文件里的内容:

//mstore.s
    .file    "mstore.c"
    .text
    .globl    multstore
    .type    multstore, @function
multstore:
.LFB0:
    .cfi_startproc
    pushq    %rbx
    .cfi_def_cfa_offset 16
    .cfi_offset 3, -16
    movq    %rdx, %rbx
    call    mult2
    movq    %rax, (%rbx)
    popq    %rbx
    .cfi_def_cfa_offset 8
    ret
    .cfi_endproc
.LFE0:
    .size    multstore, .-multstore
    .ident    "GCC: (GNU) 5.2.0"
    .section    .note.GNU-stack,"",@progbits

反汇编mstore.o:

$ objdump -d mstore.o

mstore.o:     file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <multstore>:
   0:    53                       push   %rbx
   1:    48 89 d3                 mov    %rdx,%rbx
   4:    e8 00 00 00 00           callq  9 <multstore+0x9>
   9:    48 89 03                 mov    %rax,(%rbx)
   c:    5b                       pop    %rbx
   d:    c3                       retq

PreviousC++ Primer PlusNextCPython Internals

Last updated 1 year ago

Was this helpful?