X86汇编-数据传送类与算术运算类作业
1. 将标志寄存器的值读到 EAX 中,并用算术指令将其中的 OF 位与 CF 位置0,再存回到标志寄存器中,给出指令与执行结果
给出寄存器初始状态
设置PUSHF
指令并执行,可以观察到ESP-4,
在堆栈窗口可以观察到标志寄存器的值
将ESP指向的内容送入EAX
标志寄存器的值读入了EAX中
为了运用算术运算使CF和OF置0,我们不妨先将EAX对应的位(OF在第11位,CF在第0位)设为1
合适的算术运算。。。设置EBX为与EAX相同的值,对应的位置相减得0了
完成置0
将EAX值压栈再弹出给标志寄存器
结果展示
2. 用一条算术运算指令将 OF 与 CF 同时置1
设置EAX与EBX如下
既要进位,又要溢出,用最大正数-(-1)
结果
3. 用 CMP EAX, EBX 比较存在 EAX 与 EBX 中的两个数大小,在下表中填入反映二者大小关系的标志位状态。
无符号数
EAX > EBX | EAX = EBX | EAX < EBX | EAX >= EBX | EAX <= EBX |
---|---|---|---|---|
CF = 0 且 ZF = 0 | CF = 0 且 ZF = 1 | CF = 1 且 ZF = 0 | 无法确定,见前面分立情况 | 无法确定,见前面分立情况 |
有符号数
EAX > EBX | EAX = EBX | EAX < EBX | EAX >= EBX | EAX <= EBX |
---|---|---|---|---|
SF = OF | ZF = 1 | SF ≠ OF | 无法确定,见前面分立情况 |