返回介绍

第 11 章:标志寄存器

发布于 2024-10-04 13:37:13 字数 8583 浏览 0 评论 0 收藏 0

检测点 11.1

写出下面每条指令执行后,ZF、PF、SF 等标志位的值。

指令axbxZFPFSF
sub al,al0000110
mov al,10001---
push ax(0001)---
pop bx0001--
add al,bl000200-
add al,100012-1-
mul al0144---

检测点 11.2

指令axCFOFSFZFPF
sub al,al000000011
mov al,10H0010-----
add al,90H00a0--10-
mov al,80H0080-----
add al,80H00001101-
mov al,0FCH00fc-----
add al,05H000110-0-
mov al,7DH007d-----
add al,0BH0088011-1
  • CF:直接对十六进制(无符号数)的操作数进行运算,得出结果,如果有进位或借位,CF=1
  • OF:将操作数转换成十进制数(有符号数),然后运算,得出十进制结果,看是否在寄存器取值范围内,如果超出:OF=1;
  • SF:执行指令后的结果,最高位是1,SF就是1(负数);最高位是0,SF就是0(正数);
  • PF:数 1 的个数。或将二进制的所有1相加,得出的十进制结果是偶数,PF=1,否则 PF=0.

检测点 11.3

(1)补全下面的程序,统计 F000:0 处 32 个宇节中 , 大小在 [32,128] 的数据的个数 。

mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:  mov al,[bx]
    cmp al,32
    jb s0      ; al < 32 
    cmp al,128
    ja s0      ; al > 128 
    inc dx
s0: inc bx
    loop s

(2)补全下面的程序,统计 F000:0 处 32 个宇节中 , 大小在 (32,128) 的数据的个数 。

mov ax,0f000h
mov ds,ax
mov bx,0
mov dx,0
mov cx,32
s:  mov al,[bx]
    cmp al,32
    jna s0       ; al <= 32
    cmp al,128
    jnb s0       ; al >= 128
    inc dx
s0: inc bx
    loop s

检测点 11.4

下面的程序执行后: (ax)=?

mov ax,0
push ax
popf           ; 将所有标志寄存器置零,因为它们和 ax 使用同一个栈
mov ax,0fff0h
add ax, 0010h   ; ax=(1)0000h
                ; CF=1(有符号)  OF=0(无符号) PF=1
pushf
pop ax           ; ax = 0000 0xxx 010x 00x0 0101 B
and al,11000101B ; al = 0100 0101 B = 45H
and ah,00001000B ; ah = 0000 0000 B = 00H

ax = 0045H

参考链接

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文