neg al ; AL = +1
neg valW ; valW = -32767
5.±ê־λµÄÓ°Ïì
?The MOV instruction never affects the flags. ?¼Ó·¨¼õ·¨Ó°ÏìµÄ¼¸¸ö±ê־λ£º
Zero flag ¨C set when destination equals zero £¨Áã±êÖ¾£© ?A flag is set when it equals 1. ?A flag is clear when it equals 0. Àý×Ó£º mov cx,1
sub cx,1 ; CX = 0, ZF = 1 mov ax,0FFFFh
inc ax ; AX = 0, ZF = 1 inc ax ; AX = 1, ZF = 0
Sign flag ¨C set when destination is negative £¨·ûºÅ±êÖ¾£© The sign flag is a copy of the destination's highest bit: Àý×Ó£º
sub al,1 ; AL = 11111111b, SF = 1 add al,2 ; AL = 00000001b, SF = 0
Carry flag ¨C set when unsigned value is out of range £¨½øÎ»±êÖ¾£©
ÓÃÓÚ±íʾÎÞ·ûºÅÕûÊýÔËËãÊÇ·ñ·¢ÉúÒç³ö¡£ Àý×Ó£º
mov al,0FFh
add al,1 ; CF = 1, AL = 00 ; Try to go below zero: mov al,0
sub al,1 ; CF = 1, AL = FF
Overflow flag ¨C set when signed value is out of range £¨Òç³ö±êÖ¾£©
ÓÃÓÚ±íʾÓзûºÅÊýÔËËãÊÇ·ñ·¢ÉúÁËÒç³ö Àý×Ó£º
mov al,7Fh
add al,1 ; OF = 1, AL = 80h
**ÅжÏÒç³ö±êÖ¾µÄ¼¸¸öÖØÒª½áÂÛ£º
9
*1.·ûºÅÏàͬµÄÁ½¸öÊýÏà¼Óºó£¬ºÍµÄ·ûºÅºÍÔÊý·ûºÅÏà·´£¬ÔòÒ»¶¨·¢ÉúÁËÒç³ö¡£
*2.ÒìºÅµÄÁ©ÊýÏà¼õ£¬½á¹ûµÄ·ûºÅºÍ¼õÊýÏàͬ£¬ÔòÒ»¶¨·¢ÉúÁËÒç³ö¡£
£¨Õý-¸º=¸º or ¸º-Õý=Õý Ò»¶¨·¢ÉúÁËÒç³ö) 3.Á½¸ö¼ÓÊýµÄ·ûºÅ²»Í¬µÄʱºò£¬ÓÀÔ¶²»»á·¢ÉúÒç³ö¡£
Á·Ï°£º
1.show the values of the destination operand and the Sign, Zero, and Carry flags
mov ax,00FFh
add ax,1 ; AX= 0100h SF= 0 ZF=0 CF=0 sub ax,1 ; AX= 00FFh SF= 0 ZF=0 CF=0 add al,1 ; AL= 00h SF= 0 ZF=1 CF=1 mov bh,6Ch
add bh,95h ; BH= 01h SF= 0 ZF= 0 CF=1 mov al,2
sub al,3 ; AL= FFh SF= 0 ZF= 0 CF=1 2.
mov al,80h add al,92h ; OF =1
mov al,-2
add al,+127 ; OF =0 mov ax,7FF0h
add al,10h ;CF= 1 SF= 0 ZF= 1 OF= 0 add ah,1 ;CF= 0 SF=1 ZF= 0 OF= 1 add ax,2 ;CF= 0 SF= 1 ZF= 0 OF= 1 4. mov al,-128 neg al ; CF = 1 OF = 1
mov ax,8000h
add ax,2 ; CF =0 OF =0
mov ax,0
10
sub ax,2 ; CF =1 OF =0
mov al,-5
sub al,+125 ; OF =1
14£® Êý¾ÝÏà¹ØµÄ²Ù×÷·ûºÍαָÁî
1.OFFSET²Ù×÷·û£º·µ»ØÊý¾Ý±êºÅµÄÆ«ÒÆµØÖ·
ÓÃÀý£º .data
bVal BYTE ? wVal WORD ? dVal DWORD ? dVal2 DWORD ?
.code
mov esi,OFFSET bVal ; ESI = 00404000 mov esi,OFFSET wVal ; ESI = 00404001 mov esi,OFFSET dVal ; ESI = 00404003 mov esi,OFFSET dVal2 ; ESI = 00404007
2.PTRÁ¿ÉùÃ÷ʱ
²Ù×÷·û£º¿ÉÒÔÖØÔØ²Ù×÷ÊýÉùÃ÷µÄĬÈϳߴ磬ÔÚÊÔͼÒÔ²»Í¬ÓÚ±ä
ËùʹÓõijߴçÊôÐÔÀ´·ÃÎʱäÁ¿Ê±·Ç³£ÓÐÓá£
*PTR±ØÐëºÍ»ã±àÆ÷µÄ±ê×¼Êý¾ÝÀàÐÍÁªºÏʹÓãºBYTE, SBYTE, WORD,
SWORD, DWORD, SDWORD, FWORD, QWORD,TBYTE
Á·Ï°£ºÐ´³öÄ¿µÄ²Ù×÷ÊýµÄÖµ .data
varB BYTE 65h,31h,02h,05h varW WORD 6543h,1202h varD DWORD 12345678h
.code
mov ax,WORD PTR [varB+2] ; a.0502h mov bl,BYTE PTR varD ; b.78h mov bl,BYTE PTR [varW+2] ; c.02h
11
mov ax,WORD PTR [varD+2] ; d.1234h mov eax,DWORD PTR varW ; e.12026543h
3.TYPE²Ù×÷·û£º·µ»Ø°´×Ö½Ú¼ÆËãµÄ±äÁ¿µÄµ¥¸öÔªËØµÄ´óС¡£
.data
var1 BYTE ? var2 WORD ? var3 DWORD ? var4 QWORD ?
¶ÔÓ¦µÄÿ¸öTYPE±í´ïʽµÄÖµ
±í´ïʽ TYPE var1 TYPE var2 TYPE var3 TYPE var4 Öµ 1 2 3 4
4¡¢ LENGTHOF²Ù×÷·û£º¼ÆËãÊý×éÖÐÔªËØµÄÊýÄ¿
.data ;LENGTHOF±í´ïʽµÄ·µ»ØÖµ byte1 BYTE 10,20,30 ; 3 array1 WORD 30 DUP(?),0,0 ; 30+2 array2 WORD 5 DUP(3 DUP(?)) ; 5*3 array3 DWORD 1,2,3,4 ; 4 digitStr BYTE \ ; 9
*×¢Ò⣺Êý×éµÄ¶¨ÒåÖÐʹÓÃǶÌ×DUP¶¨Òåʱ£¬LENGTHOF½«·µ»ØÁ½¸ö¼ÆÊýÆ÷µÄ³Ë»ý
5¡¢ SIZEOF²Ù×÷·û£º·µ»ØÖµµÈÓÚLENGTHOFºÍTYPE·µ»ØÖµµÄ³Ë»ý Àý×Ó
.data SIZEOF byte1 BYTE 10,20,30 ; 3 array1 WORD 30 DUP(?),0,0 ; 64 array2 WORD 5 DUP(3 DUP(?)) ; 30 array3 DWORD 1,2,3,4 ; 16
12
Ïà¹ØÍÆ¼ö£º