Click here to load reader

算术运算( Arithmetic )指令 (1 )

  • Upload
    malo

  • View
    317

  • Download
    4

Embed Size (px)

DESCRIPTION

算术运算( Arithmetic )指令 (1 ). ADD (Addition ) 加法 (dest)←(dest)+(src) ADD dest,src; 8 位 /16 位操作数 ,  影响 FLAGS ADD AX,[BX]; ADD CL,10H;ADD SP,2 ; ADD [2000H], AL; ADD WORD PTR[BX], 20 例 AL=7EH(01111110B) - PowerPoint PPT Presentation

Citation preview

ADD [2000H], AL; ADD WORD PTR[BX], 20
AL=7EH(01111110B)
CF=1 >256/65536


MOV BX, OFFSET FIRST : LH
MOV SI,OFFSET SECOND
MOV AX, [SI]
ADD [BX], AX
INC AX; INC DL; INC WORD PTR ES:[2000H]
INC BYTE PTR[BX]; INC WORD PTR CS:[DI+20]
1
1
Unpacked BCD (00-09H)
:AL,AH(AH:00~08,AL:00~09)
IFAL&(0FH)>9OR AF=1 THEN (AL)+6; AH+1;AF=CF=1; (AL)&0FH ELSE (AL)&0FH;
AH=00~08,AL=00~09
:MOV AH,0
MOV AL,7
MOV BL,8
*
Packed BCD (00-99H)
IFAL&(0FH)>9OR AF=1 THEN (AL)+6; AF=1;
IFAL&(9FH)>9OR CF=1 THEN (AL)+60H; CF=1;
:68+59=?
MOV AL,68H;
MOV BL,59H;
DAA;(CF=1=AF , AL=27H, )
*
CF=1
SBB AX, [BP+1000]
DEC BYTE PTR [SI];
:NEG AL; NEG BX; NEG BYTE PTR CS:[2000H]
CMP (Compare) (dest)-(src) FCSOF
: CMP AL,CH; CMP AX,[BX];
CMP BYTE PTR[2000H], 20
JC NEXT ; FLAGS,



2 SF


AX*OPRD = DX(16|AX(16
8 MUL CL; MUL BYTE PTR [BX+1]
AL*OPRD = AX
DX(16|AX(16) /OPRD(16)
8 DIV CL; DIV BYTE PTR [BX+1]
AX/OPRD( AH= AL=

0/


AAM* (ASCII adjust for Multiply) AL(<100) Unpacked BCD (00-09H)AX
AH(AL)/10; (AL)(AL)%10 ()SFZFPF !
AAD* ASCII adjust for Divide:UPKed-BCD AX: AL=AH*10+AL;AH=0 !
AX HEX) AAD----DIVB----AAM
*
OR dest, src; OR AL,55HH;
OR WORD PTR [BX], DH
XOR dest, src (logical Exclsive or )⊕
XOR AX,AX; XOR CL, [BX]
NOT dest ;B:dest=255-dest; W:dest=65535-dest
NOT AL; NOT WORD PTR [BX]
NOT BYTE PTR ES: [2000H]


OR CL, 04H
TEST dest,src
AND AL,80H; AND AX,0FFFFH
1/CL *2
SHL/SAL dest,CL SHL WORD PTR[BX],CL
CF dest(MSB… LSB) 0
Logical & shifting
SHR dest, 1(CL) 0dest(MSB…LSB)CF
Logical & shifting
MSBdest(MSB…LSB)CF
AL=11000100B(C4H=-60=3CH)
SAR AL,11111111B; (0FFH=-1)
ROR(Rotate right)
816/
RCL dest 1/CL
RCR dest 1/CL
Logical & shifting
DF=0
SI=src pointer (DS) DI=dest pointer(ES) DFINCDF=0/DEC B+-1/W+-2
REP(Z)=REPEREPNZ=REPNE


REPEZCMPS/SCAS CX=0ZF=0
REPNEZF=0Repeat while (CX≠0 )and (ZF=0)CX
--CX-1
JMP SHORT_LABEL; IP –128+127
SHORT IP=IP+disp8
JMPJUMPNEAR_LABEL IP=IP+disp16
JMP FAR_LABEL; CS:IP=
JMP SHORT JMP NEAR PTR JMP FAR PTR REG16/mem16
JMP 2000H; JMP BX; JMP 0FFFFH0 ()
JMP FAR PTR TABLE[SI]; JMP NEAR PTR [BP][DI]


IP=IP+disp8 IF ELSE)
JZ/JE --JNZ/JNE (ZF)=1 --(ZF)=0
JS --JNS (SF)=1 --(SF)=0
JP/JPE --JNP/JPO (PF)=0 --(PF)=1
JO --JNO (OF)=1 --(OF)=0
JC --JNC (CF)=1 --(CF)=0


JB/JNAE --JNB/JAE (CF)=1 -(CF)=0
JA/JNBE --JNA/JBE (CF)=0&((ZF)=0 --(CF)=1 OR (ZF)=1
+++----+
JL/JNGE --JNL/JGE


LOOPZ/LOOPE short_label; loop while zero/equal
(CX)=0 or (ZF=0)
LOOPNE/LOOPNZ short_label; (Loop while NZ/NE)
(CX)=0 or (ZF=1)
JCXZ if CX=0 Jump to (Jump On CX Zero)
CX


Call a procedure )
CALL MEM32; (CS)MEM32+2, (IP)MEM32
CALL 2000H; CALL BX; CALL NEAR PTR ES:[SI]
CALL 2000:3000H; CALL FAR PTR[2000H]


(IP)((SP)+1:(SP)), (SP)(SP)+2;
(SP)(SP)+pop_value =ADD SP,Pop_value
(CS)((SP)+1:(SP)), (SP)(SP)+2 RETF pop_value ; (CAH data_low data_high) IP:CS
(SP)(SP)+pop_value
(Small/Compact) Int T_PROC(int a,int b) ;C
_ T_PROC proc NEAR
PUSH BP;
MOV BP,SP
: [BP]=BP, [BP+2]=RET_IP, [BP+4]=a [BP+6]=b ,
POP BP
PASCAL,, SP(RET n)
(SP)(SP)-2,((SP)+1,(SP))(IP); (IP)[0:n*4]
IRET(Interrupt Return)
(FALGS)((SP)+1,(SP))(IP), (SP)(SP)2
==INT 4(CS)(0:12H),(IP)(0:10H)
STC(Set Carry flag) CF=1
CMC(CoMplement Carry flag) CF=NOT CF
CLD(CLear Direction flag) DF=0 Up
STD(SeT Direction Flag) DF=1 Down
CLI(CLear Interrupt flag) IF=0
STI(SeT Interrupt flag) IF=1
/
HLThaltCPU---INTR/NMI/RESET
INTR/TEST#=0---CPU
MOV AL,ES:[BX] 26 8A 07
REP/ REPE/REPZ/ REPNE/REPN
IMUL reg16-1,reg16-2/mem16,data
IMUL DL IMUL AX,10 IMUL DI,[BX],3 IMUL BX,CX,6
PUSHA POPA
16M24AB
    32