Blog

ヾ(≧O≦)〃ao~ welcome to my website

0%

F12从定义和调用之间跳转

可以自己制作头文件, 在‘resource files’中, 后缀为.h, 在Source file中调用需要#incude "header_file_name"

黄色箭头可以用鼠标左键来改变位置.

只有拥有源代码生成的进程才可以调试.

3.7.1 过程调用

过程对应于c 语言中就是指的函数。函数相当于是对一系列工作流程所进行的一个抽象, 那么函数调用在高级语言中是一个再常见不过的事情。

在这一部分主要讨论一下函数调用,也就是对应到汇编语言中的过程在机器级是如何实现的. 如下有两段代码

一个是P 函数,一个是Q 函数。我们可以看到在P 这个函数中, 调用了Q 这样的一个函数, 实现了一个函数的嵌套调用。在这样的一个嵌套调用中。计算机, 底层主要完成了哪些工作呢?

阅读全文 »

显示隐藏文件夹

1
ls -a

如.git

Vim 粘贴会因为编辑器内置的‘智障’缩进从而形成乱码

Visual Studio

vs设置语言

在Visual Studio中,点击“工具”–>”选项”–>”环境”–>”区域设置”–>”语言”[1]

visual studio 调试

按F9设置断点, F5从断点处开始执行语句, F10从断点处一步一步执行代码.

阅读全文 »

3.7.5(1) 栈上的局部存储

语言特性角度的过程存储管理问题

接下来我们讨论一下过程中的存储管理问题。首先我们先从语言特性的角度上去分析这个问题。

阅读全文 »

3.6.5 使用跳转指令实现条件分支

这节探讨C语言if else 语句在使用汇编指令表示是采用什么样的方式去表示

image-20201015205526690

这有一个c 源的代码片段, 它定义了一个函数。这个函数的目标是计算了, x 减y 的绝对值, 传入了两个参数x 和y , 如果x 大于y, 就用x 减去y , 否则就用y 减去x 。其实就是去算x 减y 的绝对值, 这样的一个程序,我们通过上面的这样一个指令,把它翻译成汇编指令。

1
gcc -0g -S -fno-if-conversion control.c
阅读全文 »

3.6.1 条件码

条件码是处理器中的一些特殊标志位.

首先从程序员的角度上去看一下处理器。假设一个程序正在处理器上运行, 那么这个程序当前的状态,可以通过处理器中的一系列信息可以表示出来。那么这些处理器就是所有对于程序员可见的处理器, 以及一些标志位组成的。

之前所谈到的 16个通用寄存器。在寄存器中大量的寄存器被用于表示当前程序中所使用到的一些局部变量,

除此之外,还有两个特殊的寄存器,一个是rsp 寄存器,它表示当前这个程序运行时的栈的顶部地址。还有一个寄存器,就是程序计数器。在x86-64位系统中叫做rip 寄存器。这个寄存器中存放的是当前所执行的这条指令的下一条指令, 也就是接下来要执行的那条指令的地址。

阅读全文 »

3.4.1 数据访问指令

数据访问指令, 它的助记符是move。通过这个名称,可以看出来,它实际上进行的是在源操作数以及目标操作数之间移动数据。虽然它的助记符是move, 但是更确切的去描述的话,可以理解为, 它是将源操作数中的数据复制到目标的位置,也就是源操作数中的数据是不会发生改变的。

阅读全文 »

在正式介绍汇编语言之前,首先介绍一下x86处理器中寄存器的组织形式。在x86系统中,对于所有的程序员都可见的寄存器一共是有16个。这16个我们也把它叫做通用寄存器。
包括rax, rbx, rcx, rdx, rsi, rdi, rsp, rbp, 以及r8到r15一共16个寄存器。这些以r作为打头的寄存器都是64位寄存器, 也就是说,每个寄存器可以存储8个字节的数据。

阅读全文 »