170424 汇编-OF标志位的进一步理解

来源:互联网 发布:匡恩网络物联网安全 编辑:程序博客网 时间:2024/06/07 00:42

1625-5 王子昂 总结《2017年4月24日》 【连续第205天总结】

A.汇编语言

QT与JS

B.做了几个检测点来巩固一下知识:

检测点11.3

补全程序,统计F000:0处32个字节中,大小在[32,128]的数据的个数

mov ax,0f000h

mov ds,ax


mov bx,0

mob dx,0

mov cx,32;循环次数

s:mov al,[bx]

cmp al,32

jb s0;jb表示al小于32时传送

cmp al,128

ja s0;ja表示al大于128时传送

inc dx;因此不小于32,不大于128的值使得dx+1

s0:inc bx

loop s


而对于统计大小在(32,128)的数据个数时,

cmp al,32

jna s0;al不大于32时传送

cmp al,128

jnb s0;al不小于128时传送,则为开区间


pushf的功能是将标志寄存器的值压栈,而popf是从栈中弹出数据,送入标志寄存器中

为直接访问标志寄存器提供了一种方法

检测点11.4

求程序执行后ax的值

mov ax,0

push ax

popf

mov ax,0fff0h

add ax,0010h

pushf

pop ax

and al,11000101B

and ah,00001000B


读程序,知道只要判断出0fff0h+0010h的命令之后后,flag的状态即可

0fff0h+0010h=10000h=2^16,在只有16位的寄存器中产生溢出,因此CF=1

溢出后,结果为0,因此ZF=1,SF=0,PF=1

判断OF标志位的关键是把数值作为有符号数考虑

0fff0h转换为二进制后最高位为1,因此它作为有符号数是负数,取补码为-16

0010h转换为二进制后最高位为0,因此它作为有符号数是正数,取补码为16

两数相加为0,形式为-16+16=0

重点来了:没有产生符号变化,也就是没有溢出

因此OF=0

综上,ax=69=45H


MSVC编译器还是需要安装VS中的VC++插件,我记得安装过Building Tools然而看起来还是没用,无奈放弃

PYQT折腾了一下午WebEngineView也没能和JavaScript通信,看来确实不行

将EXAMPLE发给小伙伴,在MSVC的QT中可以通信,放下心来

明天尝试写航点和绘图相关内容

C.明日计划

汇编语言 第十一章

QT

0 0
原创粉丝点击