🏷️ 知识点:标志寄存器

共 8 道相关题目

模拟卷 年第 13 题 组成原理 选择题

在补码表示的机器中,若寄存器 R 中原来存的数为 9EH,执行一条指令后现存的数为 CFH,则表明该指令不可能是( )。

A. XOR 异或运算指令 B. IMUL 有符号数乘法指令 C. SAR 算术右移指令 D. ADD 加法指令

补码 标志寄存器

[tag_link]

正确答案:B

寄存器 R 原存 9EH(二进制 1001 1110,补码表示有符号数 -98),执行后变为 CFH(二进制 1100 1111,补码表示有符号数 -49)。 分析各指令的可能性:

  • A. XOR 异或运算指令:存在操作数 51H(0101 0001),使得 9EH XOR 51H = CFH,因此该指令可能。 >
  • B. IMUL 有符号数乘法指令:若将寄存器值视为有符号数,从 -98 变为 -49,需满足 -98 × Y = -49,但 Y = 0.5 不是整数; > 若考虑乘法后取低 8 位(模 256),需解同余方程 158Y ≡ 207 (mod 256),由于 gcd(158,256)=2 而 207 是奇数,方程无解,故该指令不可能。 >
  • C. SAR 算术右移指令:算术右移一位时,9EH(1001 1110)右移后符号位填充 1,得到 CFH(1100 1111),且 -98 算术右移一位等价于除以 2 得 -49,因此该指令可能。 >
  • D. ADD 加法指令:存在操作数 31H,使得 9EH + 31H = CFH(-98 + 49 = -49),因此该指令可能。 >

综上,指令不可能是 IMUL 有符号数乘法指令。 >


2023 年第 16 题 组成原理 选择题

已知 x、y 为 int 类型,当 x=100,y=200 时,执行 x-y 指令的到的溢出标志 OF 和借位标志 CF 分 别为0,1,那么当 x=10,y=-2 0 时,执行该指令得到的 OF 和 CF 分别是()。

17. 某运算类型指令中有一个地址码为通用寄存器编号,对应通用寄存器中存放的是操作数或操作数地址, CPU 区分两者的依据是()。

A. 操作数的寻址方式

B. 操作数的编码方式

C. 通用寄存器编号

D. 通用寄存器的内容

A.OF=0,CF=0

B.OF=0,CF=1

C.OF=1,CF=0

D.OF=1,CF=1

[tag_link]

正确答案:B

int 类型在计算机中以补码形式表示,因此,x(10)的二进制表示为 0000 0000 0000 0000 0000 0000 0000 1010B,y(-20)的二进制表示为 11111111 11111111 1111 1111 11101100。OF 和 CF 是 CPU 中 标志寄存器 的标志位。CF 表示无符号整数运算时的进位/借位,因此计算 CF 的时候,需要把和 x 和 y 当成无符号数进行计算,因为 x 不够减 y,所以 CF = 1。计算 OF 的时候,需要把和 x 和 y 当成有符号数进行计算,x-y=30,不超过 int 的最大值,不会产生溢出,所以 OF=0。所以本题的正确选项为 B。


2011 年第 17 题 组成原理 选择题

某机器有一个标志寄存器,其中有进位/借位标志CF、零标志ZF、符号标志SF 和溢出标志OF, 条件 转移指令bgt ( 无符号整数比较大于时转移)的转移条件是()。

B.SF+ZF=1 A.CF+OF=1

C.CF+ZF=1

D.CF+SF=1

[tag_link]

正确答案:C

本题考察 标志寄存器 ,假设两个无符号整数 A 和 B,bgt 指令会将 A 和 B 进行比较,也就是将 A 和 B 相减。如果 A > B,则 A-B 肯定无进位/借位,也不为 0(为 0 时表示两数相同),故而 CF 和 ZF 均为 0,选 C。其余选项中用到了符号标志 SF 和溢出标志 OF, 显然应当排除。


2018 年第 19 题 组成原理 选择题

减法指令“sub R1,R2,R3”的功能为"(R1)-(R2)→R3", 该指令执行后将生成进位/借位标志CF 和溢 出标志OF。若(R1)=FFFFFFFFH,( R2)=FFFFFFFOH,则该减法指令执行后,CF与 OF 分别为()。

A. CF=0, OF=0 B. CF=1, OF=0 C. CF=0, OF=1 D. CF=1, OF=1

[tag_link]

正确答案:A

[x]补 = [y]补 = [x]补 + [-y]补,[-R2]补 = 00000010H, 很明显[R1]补 + [-R2]补的最高位进位和符号位进位都是 1(当最高位进位和符号位进位的 值不相同 时才产生溢出),可以判断溢出标志 OF 为 0。同时,减法操作只需判断借位标志,R1 大于 R2, 所以借位标志为 0, 综上选 A


模拟卷 年第 43 题 组成原理 综合题

(12 分)假设有两个整数 。采用补码形式(含 1 位符号位)表示, 分别存放在寄存器 A 和 B 中。另外,还有两个寄存器 C 和 D。A、B、C、D 都是 8 位的寄存器。请回答下列问题:(要求最终用十六进制表示二进制序列)

(1)寄存器 A 和 B 中的内容分别是什么? (2) 相加后的结果存放在 C 寄存器中,寄存器 C 中的内容是什么?此时,溢出标志位 OF 是什么?符号标志位 SF 是什么?进位标志位 CF 是什么? (3) 相减后的结果存放在 D 寄存器中,寄存器 D 中的内容是什么?此时,溢出标志位 OF 是什么?符号标志位 SF 是什么?进位标志位 CF 是什么?

寄存器类型 标志寄存器

[tag_link]

**【解析】** 本题考查补码的机内表示、补码的运算和溢出判断。

(1)因 ,则 ;因 ,则 ,所以寄存器 A 和 B 中的内容分别是 BCH、B0H。

(2) ,所以寄存器 C 中的内容是 6CH,其真值为 108。此时,溢出标志位 OF 为 1,表示溢出,即说明寄存器 C 中的内容不是真正的结果;符号标志位 SF 为 0,表示结果为正数(溢出标志为 1,说明符号标志有错);进位标志位 CF 为 1,仅表示加法器最高位有进位,对运算结果不说明什么。

(3) ,最高位前面的一位被丢弃(取模运算),结果为 12,所以寄存器 D 中的内容是 0CH,其真值为 12。此时,溢出标志位 OF 为 0,表示不溢出,即:寄存器 D 中的内容是真正的结果;符号标志位 SF 为 0,表示结果为正数;进位标志位 CF 为 1,仅表示加法器最高位有进位,对运算结果不说明什么。


2013 年第 44 题 组成原理 综合题

某计算机采用 16 位定长指令字格式,其 CPU 中有一个标志寄存器,其中包含进位/借位标志 CF、零标志 ZF 和符号标志 NF。假定为该机设计了条件转移指令,其格式如下:

2012_Q41_1

其中,00000 为操作码 OP;C、Z 和 N 分别为 CF、ZF 和 NF 的对应检测位,某检测位为 1 时表示需检测对应标志,需检测的标志位中只要有一个为 1 就转移,否则就不转移,例如,若 C=1,Z=0,N=1,则需检测 CF 和 NF 的值,当 CF=1 或 NF=1 时发生转移;OFFSET 是相对偏移量,用补码表示。转移执行时,转移目标地址为 (PC)+2+2×OFFSET;顺序执行时,下条指令地址为 (PC)+2。请回答下列问题。

(1) 该计算机存储器按字节编址,还是按字编址?该条件转移指令向后(反向)最多可跳转最多少条指令?

(2) 某条件转移指令的地址为 200CH,指令内容如下图所示,若该执行时 CF=0,ZF=0,NF=1,则该指令执行后 PC 的值是多少?若该指令执行时 CF=1,ZF=0,NF=0,则该指令执行后 PC 的值又是多少?请给出计算过程。

2012_Q41_1

(3) 实现“无符号数比较小于等于时转移”功能的指令中,C、Z 和 N 应各是什么?

(4) 以下是该指令对应的数据通路示意图,要求给出中部件①~③的名称或功能说明。

2012_Q41_1

指令格式 标志寄存器 数据通路

1)因为指令长度为 16 位,且下条指令地址为 (PC)+2,故编址单位是字节。偏移量 OFFSET 为 8 位补码,范围为 -128~127,故相对于当前条件转移指令,向后最多可跳转 127 条指令。【评分说明】若正确给出 OFFSET 的取值范围,则酌情给分。

2)指令中 C=0,Z=1,N=1,故应根据 ZF 和 NT 的值来判断是否转移。当 CF=0,ZF=0,NF=1 时,需转移。己知指令中偏移量为 11100011B=E3H,符号扩展后为 FFE3H,左移一位(乘 2)后为 FFC6H,故 PC 的值(即转移目标地址)为 200CH+2+FFC6H=1FD4H。当 CF=1,ZF=0,NF=0 时不转移。PC 的值为 200CH+2=200EH。

3)指令中的 C、Z 和 N 应分别设置为 C=Z=1,N=0,进行数之间的大小比较通常是对两个数进行减法,而因为是无符号数比较小于等于时转移,即两个数相减结果为 0 或者负数都应该转移,若是 0,则 ZF 标志应当为 1,所以是负数,则借位标志应该为 1,而无符号数并不涉及符号标志 NF。

4)部件①用于存放当前指令,不难得出为指令寄存器;多路选择器根据符号标志 C/Z/N 来决定下一条指令的地址是 PC+2 还是 PC+2+2×OFFSET,故多路选择器左边线上的结果应该是 PC+2+2×OFFSET。根据运算的先后顺序以及与 PC+2 的连接,部件②用于左移一位实现乘 2,为移位寄存器。部件③用于 PC+2 和 2×OFFSET 相加,为加法器。部件②:移位寄存器(用于左移一位);部件③:加法器(地址相加)。【评分说明】合理给出部件名称或功能说明均给分。


2017 年第 44 题 组成原理 综合题

在按字节编址的计算机 M 上,题 43 中 f1 的部分源程序(阴影部分)与对应的机器级代码(包括指令的虚拟地址)如下图所示。

int f1(unsigned n)
1   00401020 55         push ebp
...      ...        ...
    for (unsigned i = 0; i <= n-1; i++) {
...      ...        ...
20  0040105E 39 4D F4   cmp dword ptr [ebp-0Ch],ecx
...      ...        ...
        power *= 2;
...      ...        ...
23  00401066 D1 E2      shl edx,1
...      ...        ...
    return sum;
...      ...        ...
35  0040107F C3         ret

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令。

请回答下列问题。

(1) 计算机 M 是 RISC 还是 CISC?为什么?

(2) f1 的机器指令代码共占多少字节?要求给出计算过程。

(3) 第 20 条指令 cmp 通过 i 减 n-1 实现对 i 和 n-1 的比较。执行 f1(0) 过程中,当 i=0 时,cmp 指令执行后,进/借位标志 CF 的内容是什么?要求给出计算过程。

(4) 第 23 条指令 shl 通过左移操作实现了 power2 运算,在 f2 中能否也用 shl 指令实现 power2?为什么?

复杂和精简指令集 标志寄存器 指令操作码

[tag_link]

(1)M 为 CISC。(1 分)M 的指令长短不一,不符合 RISC 指令系统特点。(1 分)

(2)f1 的机器代码为 96B。(1 分)因为 f1 的第一条指令 “push ebp” 所在的虚拟地址为 0040 1020H,最后一条指令 “ret” 所在的虚拟地址为 0040 107FH,所以,f1 的机器指令代码长度为:0040 107FH - 0040 1020H + 1 = 60H = 96B1 分)

(3)CF = 1。(1 分)cmp 指令实现 in-1 的比较功能,进行的是减法运算。在执行 f1(0) 过程中,n=0,当 i=0 时,i=0000 0000H,并且 n-1=FFFF FFFFH。因此,当执行第 20 条指令时,在补码加/减运算器中执行的是 “0 - FFFF FFFFH” 的操作,即:0000 0000H + 0000 0000H + 1 = 0000 0001H。此时,进位输出 C=0,减法运算时的借位标志 CF = C ⊕ 1 = 1。(2 分)

(4)f2 中不能用 shl 指令实现 power * 2。(1 分)因为 shl 指令用来将一个整数的所有有效位作为一个整体左移;而 f2 中的变量 power 是 float 型,其机器数中不包含最高有效位,但包含了阶码部分,将其作为一个整体左移时并不能实现 “乘 2” 的功能。因此在 f2 中不能用 shl 指令实现 power * 2。(2 分)浮点数运算比整型运算要复杂,耗时也较长。


2019 年第 45 题 操作系统 综合题

已知f(n)=n!=n×(n−1)×(n−2)×⋯×2×1,计算f(n)的 C 语言函数 f1 的源程序(阴影部分)及其在 32 位计算机 M 上的部分机器级代码如下:

int f1(int n) {
1   00401000   55             push ebp
      ...           ...            ...
   if(n>1)
11  00401018  83 7D 08 01    cmp   dword ptr [ebp+8],1
12  0040101C  7E 17          jle   f1+35h (00401035)
   return n*f1(n-1);
13  0040101E  8B 45 08       mov   eax, dword ptr [ebp+8]
14  00401021  83 E8 01       sub   eax, 1
15  00401024  50             push  eax
16  00401025  E8 D6 FF FF FF call  f1 ( 00401000)
      ...           ...            ...
19  00401030  0F AF C1       imul  eax, ecx
20  00401033  EB 05          jmp   f1+3Ah (0040103a)
   else return 1;
}
21  00401035  B8 01 00 00 00 mov   eax,1
      ...           ...            ...
26  00401040  3B EC          cmp   ebp, esp
      ...           ...            ...
30  0040104A  C3             ret

其中,机器级代码行包括行号、虚拟地址、机器指令和汇编指令,计算机 M 按字节编址,int 型数据占 32 位。请回答下列问题:

(1) 计算 f(10) 需要调用函数 f1 多少次?执行哪条指令会递归调用 f1?

(2) 上述代码中,哪条指令是条件转移指令?哪几条指令一定会使程序跳转执行?

(3) 根据第 16 行的 call 指令,第 17 行指令的虚拟地址应是多少?已知第 16 行的 call 指令采用相对寻址方式,该指令中的偏移量应是多少(给出计算过程)?已知第 16 行的 call 指令的后 4 字节为偏移量,M 是采用大端方式还是采用小端方式?

(4) f(13)=6227020800,但 f1(13) 的返回值为 1932053504,为什么两者不相等?要使 f1(13) 能返回正确的结果,应如何修改 f1 的源程序?

(5) 第 19 行的 imul 指令(带符号整数乘)的功能是 R[eax]←R[eax]×R[ecx],当乘法器输出的高、低 32 位乘积之间满足什么条件时,溢出标志 OF=1?要使 CPU 在发生溢出时转异常处理,编译器应在 imul 指令后应加一条什么指令?

汇编代码 指令寻址方式 标志寄存器

[tag_link]

1)计算 f(10) 需要调用函数 f1 共 10 次,执行第 16 行的 call 指令会递归调用 f1。

2)第 12 行的 jle 指令是条件转移指令,其含义为小于等于时转移,本行代码的意义为:当 n≤1 时,跳转至地址 0040 1035H。第 16 行的 call 指令为函数调用指令,第 20 行的 jmp 指令为无条件转移指令,第 30 行的 ret 指令为子程序的返回指令,这三条指令一定会使程序跳转执行。

3)其长度计算机 M 上按字节编址,第 16 行的 call 指令的虚拟地址为 0040 1025H,长度为 5 字节,故第 17 行的指令的虚拟地址为 0040 1025H + 5 = 0040 102AH。第 16 行的 call 指令采用相对寻址方式,即目标地址 = (PC) +偏移量,call 指令的目标地址为 0040 1000H,所以偏移量 = 目标地址 - (PC) = 0040 1000H - 0040 102AH = FFFF FFD6H。根据第 16 行的 call 指令的偏移量字段为 D6 FF FF FF,可以确定 M 采用小端方式。

4)因为 f(13) = 6227020800,其结果超出了 32 位 int 型数据可表示的最大范围,因此 f(13) 的返回值是一个发生了溢出的错误结果。为使 f1(13) 能返回正确结果,可将函数 f1 的返回值类型改为 double(或 long long,或 long double,或 float)类型。

5)若乘积的高 33 位为非全 0 或非全 1,则 OF=1。编译器应在 imul 指令后加一条“溢出自陷指令”,使得 CPU 自动查询溢出标志 OF,当 OF=1 时调出“溢出异常处理程序”。