0%

CSAPP 学习笔记 4 程序的机器级表示

这两周看得比较少,进度缓慢,只看了第三章关于控制的一小节内容,下面简单写一写。

在CPU中,维护着一组单个位的条件码寄存器,用于描述算术或逻辑操作的属性,可以通过检测这些寄存器来执行条件分支指令,最常用的条件码有进位标志、零标志、符号标志、溢出标志。

在CPU执行所有算术和逻辑运算时,都会设置条件码。此外,还有两类指令,即CMPTEST,也会设置条件码,但它们不会改变其他寄存器。

那么怎么访问这些条件寄存器呢?CPU中提供了SET指令,对这些标志位进行了封装,可以更方便地获取常见的比较结果。举个例子,最简单的情况,是判断结果是否为零,对应SETE指令,它会读取零标志寄存器。而比较复杂的情况,判断有符号数的小于比较,对应SETL,它会读取符号标志寄存器和溢出标志寄存器,然后取它们的异或值。

要实现像C语言中的for语句,还需要一类指令JMP。它可以根据条件跳转到其他语句,而不是一直顺序执行。

(全文完)