今天开始要加快速度了。这几天慢吞吞的,一点效率都没有。决定了,上午整理店里的数据,下午一部分时间学习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
————————————————————————————————————————————————
这一节差点又丢失了,幸亏我有所准备^_^