__________
: , ,
.
________________________________________________________________
, ( 10),
( 2). ,
, 16- ,
.
, ,
.
.
ASCII .
________________________________________________________________
ADD SUB ,
.
:
1,
. , ,
.
.12.1 ADD SUB,
. B10ADD ADD
, C10SUB SUB .
:
/ -;
/ -;
/ -;
/ -.;
/ -..
__________
page 60,132
TITLE EXADD ()
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
; --------------------------------------------
BYTEA DB 64H;
BYTEB DB 40H
BYTEC DB 16H
WORDA DW 4000H
WORDB DW 2000H
WORDC DW 1000H
; --------------------------------------------
MAIN PROC NEAR; :
CALL B10ADD; ADD
CALL C10SUB; SUB
RET
MAIN ENDP
; :
; --------------------
B10ADD PROC
MOV AL,BYTEA
MOV BL,BYTEB
ADD AL,BL;
ADD AL,BYTEC;
ADD BYTEA,BL;
ADD BL,10H;.
ADD BYTEA,25H;.
RET
B10ADD ENDP
; :
; ---------------------
C10SUB PROC
MOV AX,WORDA
MOV BX,WORDB
SUB AX,BX;
SUB AX,WORDC;
SUB WORDA,BX;
SUB BX,1000H;. pe.
SUB WORDA,256H;. .
RET
C10SUB ENDP
CODESG ENDS
END BEGIN
__________
.12.1. ADD SUB.
- ,
|
|
o .
WORDB WORDA, DW:
MOV AX,WORDA
ADD AX,WORDB
MOV WORDB,AX
--------------
.
, .. -128 +127.
. , AL,
, AH.
, AL .60,
ADD AL,20H
AL - .80.
"".
, .80 1000 0000
. .. , +128, -128.
AL
AX. CBW (Convert Byte to Word -
) .60 AL .0060
AX, (0) AH.
ADD AX :
.0080, +128:
CBW; AL AX
ADD AX,20H; AX
: 15
, -32768 +32767.
, .
-----------------------
+32767
.
. -
, , - , .
__________
page 60,132
TITLE EXDBADD (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
; -------------------------------------------
WORD1A DW 0123H;
WORD1B DW 0BC62H
WORD2A DW 0012H
WORD2B DW 553AH
WORD3A DW?
WORD3B DW?
; -------------------------------------------
MAIN PROC NEAR;0 :
CALL D10DWD; 1
CALL E10DWD; 2
RET
MAIN ENDP
; :
; ----------------------------
D10DWD PROC
MOV AX,WORD1B;
ADD AX,WORD2B
MOV WORD3B,AX
MOV AX,WORD1A;
ADC AX,WORD2A;
MOV WORD3A,AX
RET
D10DWD ENDP
; :
; --------------------------
E10DWD PROC
CLC;
MOV CX,2;
LEA SI,WORD1B; DWORD1
LEA DI,WORD2B; DWORD2
LEA BX,WORD3B;
20:
MOV AX,[SI]; AX
ADC AX,[DI];
MOV [BX],AX;
DEC SI
DEC SI
DEC DI
DEC DI
DEC BX
DEC BX
LOOP 20;
RET
E10DWD ENDP
CODESG ENDS
END BEGIN
__________
.12.2. .
.12.2 D10DWD
|
|
(WORD1A WORD1B)
(WORD2A WORD2B) (WORD3A
WORD3B). :
WORD1B BC62
WORD2B 553A
-----
: 1119C
- .1119C AX.
1.
, , ADD
ADC (ADd with Carry). ,
CF , 1:
WORD1A 0123
WORD2A 0012
1
----
: 0136
DEBUG
0136 AX, p
3601 WORD3A 9C11 WORD3B.
.12.2 E10DWD
.
. c, -
, . SI, DI BX
2. DEC
.
SUB reg,02
, .. ,
.
, ADC.
CLC (CLear Carry - )
.
: 1) , 2)
3) CX .
SBB (SuBtract with
Borrow - ) ADC.
E10DWD (.12.2) ADC SBB,
.
________________________________________________________________
, , , a
. ,
, , , .
,
. , ,
, .
+32767 +65535.
. ADD SUB
,
. ,
.
249, -
-7:
11111001 249 -7
00000010 2 +2
--- --
11111011 251 -5
. , +251
-5 . ,
.
"" , p
. "" ,
.
,
:
CF OF
11111100 252 -4
00000101 5 +5
--- --
00000001 1 1 1 0
()
|
|
,
:
CF OF
01111001 121 +121
00001011 11 +11
--- ----
10000100 132 -124 0 1
()
, :
CF OF
11110110 246 -10
10001001 137 -119
--- ----
01111111 127 +127 1 1
() ()
________________________________________________________________
MUL,
- IMUL (Integer MULtiplication - ).
.
:
" ". AL,
.
AX. p
, AH.
| AH | AL | | AX |
: | || : ||
" ". AX,
- .
, :
() DX, ()
AX. ,
DX.
| AX | | DX || AX |
:|| : |.||.|
| |
MUL IMUL .
:
MUL MULTR
MULTR (DB),
AL MULTR. MULTR
(DW),
AX MULTR. ,
, :
MUL CL;-: AL, . AX
MUL BX;-: AX, . DX:AX
: MUL
------------------------------------
MUL (MULtiplication - ) .
.12.3 C10MUL : ,
. MUL .80
(128) .47 (64). .2000 (8192)
AX.
__________
page 60,132
TITLE EXMULT (COM)
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
OR6 100H
BEGIN: JMP SHORT MAIN
; -------------------------------------------
BYTE1 DB 80H
BYTE2 DB 40H
WORD1 DW 8000H
WORD2 DW 4000H
; -------------------------------------------
MAIN PROC NEAR; :
CALL C10MUL; . MUL
CALL D10IMUL; . IMUL
RET
MAIN ENDP
; MUL:
; --------------------
C10MUL PROC
MOV AL,BYTE1; *
MUL BYTE2; A
MOV AX,WORD1; *
MUL WORD2; DX:AX
MOV AL,BYTE1; *
SUB A,A; . . A
MUL WORD1; DX:AX
RET
C10MUL ENDP
; IMUL:
; ---------------------
D10IMUL PROC
MOV AL,BYTE1; *
|
|
IMUL BYTE2; A
MOV AX,WORD1; *
IMUL WORD2; . DX:AX
MOV AL,BYTE1; *
CBW; . . A
IMUL WORD1; . DX:AX
RET
D10IMUL ENDP
CODESG ENDS
END BEGIN
__________
.12.3. .
MUL .10000000 p DX:AX.
MUL
BYTE1 .
, AH . (
CBW p AL 0
1). - .00400000 DX:AX.
: IMUL
----------------------------------
IMUL (Integer MULtiplication - )
. .12.3 D10IMUL
, C10MUL, MUL
IMUL.
IMUL .80 ( )
.40 ( ). - .E000
AX. , MUL
.2000, MUL IMUL.
MUL .80 +128, IMUL - -128.
-128 +64 -8192 .E000.
( .000 ).
IMUL .8000 (
) .2000 ( ). -
.F0000000 DX:AX
o .
IMUL
BYTE1 AX.
, CBW
AH: .80 p AL
.FF80 AX. WORD1
,
. : .00400000 DX:AX -
, MUL,
.
,
, MUL IMUL . ,
, MUL
, IMUL - .
, DEBUG
.
:
2 (2,4,8 ..)
. 1
CL. ,
AL AX:
2: SHL AL,1
8: MOV CL,3
SHL AX,CL
------------------------
: " " " ".
,
+32767.
.
.
:
12
-----
-----
,
. 13 65 12 , c :
13 65
12 12
--- ---
26 130
13 65
--- ---
156 780
, 13
, 15600:
+780
-----
, ( )
.
.
E10XMUL .12.4 . ,
MULTCND, , .3206
.2521. (DW)
(DD) MOV,
AX. MULTPLR .6400.
|
|
, PRODUCT, .
MUL MULTPLR c MULTCND;
- .0E80 E400 PRODUCT+2 PRODUCT+4. MUL
MULTPLR MULTCND, .
138A 5800. :
1: 0000 0E80 E400
2: 138A 5800
--------------
: 138A 6680 E400
ADD ,
c ADC (ADd with Carry).
p 8086/8088,
PRODUCT 8A13 8066
00E4. , PRODUCT
0000.
__________
TITLE EXDWMUL -
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
; ---------------------------------------------
MULTCND DW 3206H;
DW 2521H
MULTPLR DW 6400H
DW 0A26H
PRODUCT DW 0
DW 0
DW 0
DW 0
; ---------------------------------------------
MAIN PROC NEAR;
CALL E10XMUL; 1-
CALL Z10ZERO;
CALL F10XMUL; 2-
RET
MAIN ENDP
; :
; -----------------------------------------------
E10XMUL PROC
MOV AX,MULTCND+2;
MUL MULTPLR;
MOV PRODUCT+4,AX;
MOV PRODUCT+2,DX
MOV AX,MULTCND;
MUL MULTPLR;
ADD PRODUCT+2,AX;
ADC PRODUCT,DX
RET
E10XMUL ENDP
; :
; --------------------------------------------
F10XMUL PROC
MOV AX,MULTCND+2;-2
MUL MULTPLR+2; * -2
MOV PRODUCT+6,AX;
MOV PRODUCT+4,DX
MOV AX,MULTCND+2;-2
MUL MULTPLR; * -1
ADD PRODUCT+4,AX;
ADC PRODUCT+6,DX
ADC PRODUCT,00;
MOV AX,MULTCND;-1
MUL MULTPLR+2; * -2
ADD PRODUCT+4,AX;
ADC PRODUCT+6,DX
ADC PRODUCT,00;
MOV AX,MULTCND;-1
MUL MULTPLR; * -1
ADD PRODUCT+2,AX;
ADC PRODUCT,DX
RET
F10XMUL ENDP
; :
; ----------------------------------------
Z10XMUL PROC
MOV PRODUCT,0000
MOV PRODUCT+2,0000
MOV PRODUCT+4,0000
MOV PRODUCT+6,0000
RET
Z10XMUL ENDP
CODESG ENDS
END BEGIN
__________
.12.4. .
"
".
:
2 2
2 1
1 2
1 1
DX AX
.
F10XMUL .12.4. MULTCND .3206 2521,
MULTPLR - .6400 0A26. PRODUCT,
.
, ,
ADD/ADC ADC, 0
PRODUCT. , ADC
, .
ADC 0, , 1,
. ADD/ADC ADC,
PRODUCT
.
138A 687C 8E5C CCE6 PRODUCT
.
DEBUG.
DX:AX
________________________________________________________________
p DX:AX .
,
(, , ) CX. ,
.
4
MOV CX,04; 4
C20: SHL DX,1; DX 1
SHL AX,1; AX 1
ADC DX,00;
LOOP C20;
4
MOV CX,04; 4
D20: SHR AX,1; AX 1
SHR DX,1; DX 1
JNC D30; ,
OR AH,10000000B; 1 AH
D30: LOOP D20;
,
. CL.
4 ,
:
MOV CL,04;
SHL DX,CL; DX 4
MOV BL,AH; AH BL
SHL AX,CL; AX 4
SHL BL,CL; BL 4
OR DL,BL; 4 BL DL
________________________________________________________________
DIV, a
- IDIV.
. :
" ".
AX, - .
AH, - AL.
( +255 (.FF)
+127 (.7F) ),
.
| AX | | AH | AL |
: || : |||
" ".
DX:AX, -
. DX,
AX. +32767
(.FFFF) +16383 (.7FFF) .
| DX || AX | | AH || AL |
: |.||.| : ||||
| |
DIV IDIV .
:
DIV DIVISOR
DIVISOR (DB),
. DIVISOR (DW),
.
, , 13 3, 4 1/3.
4, - 1. , (
BASIC) 4,333....
(4) (,333). 1/3 333...
, 1 .
: DIV
----------------------------------
DIV . .12.5 D10DIV
: , ,
. DIV .2000 (8092)
.80 (128). 00 AH,
.40 (64) - AL.
DIV BYTE1
. ,
AH . -
.12 AH, .05 - AL.
DIV .1000 DX
.0080 AX.
DIV
WORD1 DX. .0000
DX, .0002 - AX.
__________
page 60,132
TITLE EXDIV (COM) DIV IDIV
CODESG SEGMENT PARA 'Code'
ORG 100H
BEGIN: JMP SHORT MAIN
; ---------------------------------------------
BYTE1 DB 80H;Data items
BYTE2 DB 16H
WORD1 DW 2000H
WORD2 DW 0010H
WORD3 DW 1000H
; ---------------------------------------------
MAIN PROC NEAR;
CALL D10DIV; DIV
CALL E10IDIV; IDIV
MAIN ENDP
; DIV:
; ---------------------------------------------
D10DIV PROC
MOV AX,WORD1; /
DIV BYTE1; : AH:AL
MOV AL,BYTE1; /
SUB AH,AH; AH
DIV BYTE3; : AH:AL
MOV DX,WORD2; /
MOV AX,WORD3; DX:AX
DIV WORD1; : DX:AX
MOV AX,WORD1; /
SUB DX,DX; DX
DIV WORD3; : DX:AX
RET
D10DIV ENDP
; IDIV:
; ---------------------------------------------
E10IDIV PROC
MOV AX,WORD1; /
IDIV BYTE1; : AH:AL
MOV AL,BYTE1; /
CBW; AH
IDIV BYTE3; : AH:AL
MOV DX,WORD2; /
MOV AX,WORD3; DX:AX
IDIV WORD1; : DX:AX
MOV AX,WORD1; /
CWD; DX
IDIV WORD3; : DX:AX
RET
E10DIV ENDP
CODESG ENDS
END BEGIN
__________
.12.5. .
: IDIV
--------------------------------
IDIV (Integer DIVide) .
.12.5 E10IDIV ,
D10DIV, DIV IDIV.
IDIV .2000 ( )
.80 ( ). - . 00
AH, - . C0 (-64) - AL. DIV,
, +64.
:
IDIV
2 EE (-18) FB (-5)
3 1000 (4096) 0080 (128)
4 0000 0002
4 ,
DIV. , ,
DIV IDIV p. ,
, DIV
, IDIV - .
, DEBUG .
. 2 (2, 4,
..) .
, AX:
2: SHR AX,1
8: MOV CL,3
SHR AX,CL
---------------------------
DIV IDIV,
p. ( ,
) .
, , .
. 1
, , .
: - ,
, (AH) :
- , , (DX)
. , 1:
:
: 0123 01 (1)23
: 0001 4026 0001 (1)4026
.
, DIV IDIV
. p ,
DIVBYTE - , AX.
, DIVWORD - ,
DX:AX.
CMP AH,DIVBYTE CMP DX,DIVWORD
JNB JNB
DIV DIVBYTE DIV DIVWORD
IDIV ,
, ,
, NEG
.
--------------------
,
. ,
1.
, . c ,
AX, - BX,
CX:
SUB CX,CX;
C20: CMP AX,BX; < ,
JB C30;
SUB AX,BX;
INC CX;
JMP C20;
30: RET; CX, AX
CX , AX -
o.
. DX:AX,
:
1. C20 AX BX DX.
2. SUB SBB DX,00.
:
.
________________________________________________________________
NEG
. NEG
1. :
NEG AX
NEG BL
NEG BINAMT;( )
35- ( )
. , DX:AX 32-
. NEG
, .
NOT:
NOT DX;
NOT AX;
ADD AX,1; 1 AX
ADC DX,0; DX
: ,
, ,
. ,
, . ,
, ASCII-. ASCII-
,
. .
INTEL 8087 80287
________________________________________________________________
,
Intel 8087 ( 80287). 8087
8088, 80287
80286.
,
.
80- ,
10 400 .
100 ,
.
,
. MASM,
/E /R, , MASM /R.
________________________________________________________________
-
p. -128 +127.
- ADC
. ,
CLC, 0.
- MUL DIV
IMUL IDIV .
- .
, . ,
AH ( ) DX
( ).
- c.
SHR SAR
. SHL
SAL.
- . ,
FACTOR (DB), MUL FACTOR
AL, DIV FACTOR
AX. FACTOR (DW), MUL FACTOR
AX, DIV FACTOR
DX:AX.
________________________________________________________________
:
DATAX DW 0148H
DW 2316H
DATAY DW 0237H
DW 4052H
12.1. ) DATAX
DATAY; ) , DATAX,
DATAY.
12.2. :
STC
MOV BX,DATAX
ADC BX,DATAY
12.3. (MUL): ) DATAX
DATAY; ) , DATAX,
DATAY.
12.4. , , ?
12.5. (DIV): ) DATAX 23; )
, DATAX, DATAY.
12.6. " DX:AX"
. .
13 II:
ASCII BCD
__________
: ASCII BCD
.
________________________________________________________________
a .
.12, ,
.
ASCII c .
ASCII. , 23
00010111 .17; ASCII
c 25 ASCII- p
.3235.
-
ASCII-
ASCII-
. , ,
p .1 - 12.
, BASIC
Pascal,
() . ,
() .
( ) (),
.
ASCII-
________________________________________________________________
, , ASCII-, ,
SAM 53414D, 1234 -
.31323334. , ,
, .
,
.31323334, .
ASCII-:
AAA (ASCII Adjust for Addition - ASCII-)
AAD (ASCII Adjust for Division - ASCII-)
AAM (ASCII Adjust for Multiplication - ASCII-)
AAS (ASCII Adjust for Subtraction - ASCII-)
AX. , ASCII-
, ,
.
ASCII-
--------------------------
8 4 ASCII-:
. 38
--
. 6C
ASCII-,
. , 6 6 .C: .C +
6 = .12 - .
, ,
AAA .
, , AX .0038,
BX - .0034. 38 34
ASCII-, .
:
ADD AL,BL; 34 38
AAA; ASCII-
AAA . (4 ) AL.
A F AF 1, AL
6, AH 1, AF CF
1. AAA 0
. AL. - AX:
ADD: 006C
AAA: 0102
, ASCII-,
. :
OR AX,3030H; 3132
.
ASCII- ,
. ,
.13.1 ASCII-
. :
__________
TITLE ASCADD (COM) ASCII-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
; -----------------------------------------------
ASC1 DB '578';
ASC2 DB '694'
ASC3 DB '0000'
; -----------------------------------------------
MAIN PROC NEAR
CLC
LEA SI,AASC1+2; ASCII-
LEA DI,AASC2+2
LEA BX,AASC1+3
MOV CX,03; 3
A20:
MOV AH,00; AH
MOV AL,[SI]; ASCII-
ADC AL,[DI]; ( )
AAA; ASCII
MOV [BX],AL;
DEC SI
DEC DI
DEC BX
LOOP A20; 3
MOV [BX],AH;
RET
MAIN ENDP
CODESG ENDS
END BEGIN
__________
.13.1. ASCII-.
- ADC,
,
() . CLC CF .
- MOV AH ,
AAA . ADC p.
, XOR SUB o
AH CF.
- ,
p AH (00 01) .
- 01020702.
OR AAA ,
CF, p
ADC.
PUSHF, OR, ,
, POPF:
ADC AL,[DI];
AAA; ASCII
PUSHF;
OR AL,30H;
POPF;
MOV [BX],AL;
PUSHF POPF LAHF (Load AH
with Flags - AH) SAHF (Store AH in Flag
register - AH ). LAHF
AH SF, ZF, AF, PF CF; SAHF
AH .
, , AH
. ASCII- -
OR .
ASCII-
---------------------------
AAS (ASCII Adjust for Subtraction -
ASCII-) a AAA. AAS
. ( ) AL.
A F AF 1, AL 6,
AH 1, AF CF 1.
AAS 0 . p AL.
, ASC1
.38, ASC2 - .34:
1: AX AF
MOV AL,ASC1;0038
SUB AL,ASC2;0034 0
AAS;0004 0
2: AX AF
MOV AL,ASC2;0034
SUB AL,ASC1;00FC 1
AAS;FF06 1
1 AAS . 2,
AL .C, AAS 6
AL 1 AH 1 AF CF.
( -4) . FF06,
.. -4.
ASCII-
---------------------------
AAM (ASCII Adjust for Multiplication -
ASCII-)
ASCII- AX. , .
ASCII-. ( IBM
p ). , ASCII-
31323334 01020304.
, ,
, o- ;
.
AAM AL 10 (.0A)
AH, AL. , AL
.35, CL - .39.
AL CL
ASCII-:
AX:
AND CL,0FH; CL 09
AND AL,0FH; AL 05 0005
MUL CL; AL CL 002D
AAM; .. 0405
OR AX,3030H; ASCII-- 3435
MUL 45 (.002D) AX,
AAM 10, 04 AH
05 AL. OR p
ASCII-.
.13.2
. AAM
, ,
.
- 0108090105.
,
, .
ASCII- (.
" ASCII- ").
__________
TITLE ASCMUL (COM) ASCII-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP MAIN
; ---------------------------------------------
MULTCND DB '3783';
MULTPLR DB '5'
PRODUCT DB 5 DUP(0)
; ---------------------------------------------
MAIN PROC NEAR
MOV CX,04;4
LEA SI,MULTCND+3
LEA DI,PRODUCT+4
AND MULTPLR,0FH; ASCII-
A20:
MOV AL,[SI]; ASCII-
; ( LODSB)
AND AL,OFH; ASCII-
MUL MULTPLR;
AAM; ASCII
ADD AL,[DI];
AAA;
MOV [DI],AL;
DEC DI
MOV [DI],AH;
DEC SI
LOOP A20; 4
RET
MAIN ENDP
CODESG ENDS
END BEGIN
__________
.13.2. ASCII-.
ASCII-
-------------------------
AAD (ASCII Adjust for Division -
ASCII-) ASCII-
. ,
ASCII- . AAD
AX. ,
AX 3238 ASCII- CL
37 ASCII-.
:
AX:
AND CL,0FH; CL ..
AND AX,0F0FH; AX .. 0208
AAD; 001C
DIV CL; 7 0004
AAD AH 10 (.0A), p
20 (.14) AL AH. 001C .
28.
01 09.
.13.3
.
. AH AAD
AL. p: 00090204
AH 02.
,
,
" ASCII- ."
__________
TITLE ASCDIV (COM) ASCII-
CODESG SEGMENT PARA 'Code'
ASSUME CS:CODESG,DS:CODESG,SS:CODESG
ORG 100H
BEGIN: JMP SHORT MAIN
; ---------------------------------------------
DIVDND DB '3698';
DIVSOR DB '4'
QUOTNT DB 4 DUP(0)
; ---------------------------------------------
MAIN PROC NEAR
MOV CX,04;4
SUB AH,AH;
AND DIVSOR,0FH; ASCII 3
LEA SI,DIVDND
LEA DI,QUOTNT
A20:
MOV AL,[SI]; ASCII
; ( LODSB)
AND AL,0FH; ASCII
AAD;
DIV DIVSOR;
MOV [DI],AL;
INC SI
INC DI
LOOP A20; 4
RET
MAIN ENDP
CODEGS ENDS
END BEGIN
__________
.13.3. ASCII-.
- (BCD)
________________________________________________________________
ASCII-
00090204. ,
, 0924. - (BCD -
Binary Coded Decimal) ( ).
0 9. -
ASCII-.
, , 0924 10 ,
16 (.. . ),
.039C.
-
(BCD-). p
:
DAA (Decimal Adjustment for Addition - )
DAS (Decimal Adjustment for Subtraction - . .)