标志寄存器的读写

今天开始要加快速度了。这几天慢吞吞的,一点效率都没有。决定了,上午整理店里的数据,下午一部分时间学习ASM一部分时间休息。

————————————————————————————————

标志寄存器传送指令有4个:LAHF    SAHF    PUSHF    POPF

——————————————————————

 LAHF将FL的低8位写入AH

操作:AH=FL&0FFH

例:

MOV AL,FF

ADD AL,FE     ;此时AL=FD,SF=1,ZF=0,AF=1,PF=0,CF=1

LAHF                ;此时AH=1001 0011 B

(注释)FL的低8位为:
位:7 6 5 4 3 2 1 0
符:S Z-A-P-C
值:1 0 0 1 0 0 1 1

——————————————————————————

SAHF    ;将AH存入FL的低8位

操作:FL=(FL&0FF00H)|2|(AL&0D5H)

;2表示bit1恒为1

;AL&0D5H表示只保留AL的7、6、4、2、0位。D5转为2进制为:1101 0101

—————————————————————————————

PUSHF   ;将FL的值压入堆栈

操作:

SP=SP-2

WORD PTR SS:[SP]=FL

——————————————

POPF      ;从堆栈弹出2字节赋值给FL

操作:

FL=WORD PTR SS:[SP]

SP=SP+2

———————————————

PUSHF和POPF可以读写整个FL,而LAHF和SAHF只能读写FL的低8位。功能上PUSHF和POPF比LAHF和SAHF更强大。

————————

在读写FL之前,必须先掌握两点:

1、FL的各个位的含义http://blog.csdn.net/code3/archive/2007/12/19/1953388.aspx

2、16进制数与2进制数的转换

这些可以到前面的章节去看,那里有资料。

数据的表示方式和运算。 这一节内容丢失了,这里补上16进制数与2进制数的转换:

10进制=2进制=16进制

0=0000=0

1=0001=1

2=0010=2

3=0011=3

4=0100=4

5=0101=5

6=0110=6

7=0111=7

——————这里是一个小分段,前面的数值2进制是0开头,后面的是1开头

8=1000=8

9=1001=9

———这里是一个小小分段,下面的数值16进制是字母。注意看10进制的10转2进制就是“10”加“10”,好记吧

10=1010=A

11=1011=B

12=1100=C

13=1101=D

14=1110=E

15=1111=F

————————————————————————————————————————————————

 这一节差点又丢失了,幸亏我有所准备^_^

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值