:
1 ?
2 ?
3 ?
4 ?
5 16- Intel.
6 , Intel?
7 Intel ?
8 ?
( ) , . , . , . , . : (- ), .
- , , , , . . , . . , (), , - ( ) .
Intel . -86 100 , 3800 ; 20 , , , . , .
, : , , , , .
|
|
, , . - . - .asm. ᒺ . , , . ᒺ . :ᒺ , .obj, , .lst .crf. , , , , . , , .
ϳ ᒺ -, . , .exe . - ᒺ ᒺ , , , 볳 , , . ᒺ , . . - . 9.8.
() :
- , ;
- , ;
- ;
- , ; , - , ; .
9.8 -
131 , . , . , , . :
- , ;
- 0 9;
- , :?, @, $, _, &, [ ], (), < >, { }, +, , /, *, %,!, , \, =, #,^ .
: , , , .
, ᒺ (, , ). , . . . 255 , 32 , .
|
|
. , ( , ). , ᒺ (, ).
- , , . .
, , . SEGMENT, :
{ } | SEGMENT | { } | { } | { } | { } |
{ } | END |
.
- . . :
- BYTE . -;
- WORD , 2, 0. ;
- DWORD , 4. ;
- PARA , 16, 0. ;
- PAGE , 256. ;
- MEMPAGE , 4 .
PARA.
- ᒺ , . :
- PRIVATE ᒺ ;
- PUBLIC ᒺ . , , , ;
- COMMON . , ;
- AT xxxx , ;
- STACK . , , ᒺ , SS.
. - 璺 , . ᒺ (, ). , , , CODE.
, 16- 32-. :
1 USE 16 16- . 64 .
2 USE 32 32- . 4 .
ASSUME, :
|
|
ASSUME | ; |
, , , TASM i MASM MODEL, . , . . . 9.1 MODEL.
near far ᒺ . ᒺ , near ( ). . ᒺ ( far) : . .
9.1
TINY | near | near | DGROUP. .com |
SMALL | near | near | , ᒺ DGROUP. , , |
MEDIUM | far | near | , , ᒺ. far. . near |
COMPACT | near | far | . . far |
LARGE | far | far | , , ᒺ. far |
. , , . ֳ :
- db 1 ;
- dw 2 ();
- dd 4 ( );
- df 6 ;
- dq 8 ;
- dt 10 .
.
MODEL SMALL; ,
;
STACK 256;
DATA SEGMENT;
DATA ENDS
CODE SEGMENT;
ASSUME CS:CODE,DS:DATA,ES:DATA;
;
;
;
;
CODE ENDS; ʳ
END;
:
1 ?
2 -?
3 -?
4 - ?
5 () ?
6 ? near far?
|
|
7 ?
:
1 ?
2 ?
3 ?
, . . 9.9. .
{̳:} | {} | {} | {; } |
9.9
̳ , . - () , , . ̳ . 31 . . .
, :
- , ;
- ;
- ;
- .
() , , . () , . , .
, ᒺ, (). , . , . . :
- ;
- ;
- ;
- () ;
- () .
, , :
- , , , . , , =: equ;
- . ;
- , . ( ) ( ). , , ;
- , $. ;
- , ;
- , , .
. 9.10.
0 2 4 | 0 2 4 | ||
9.10 Intel
, , . (COP) :
w , :
w = 0 ;
w = 1 ;
d :
d = 1 rg 2, ;
d = 0 ;
s , . w.
. :
|
|
- md ( ), :
- COP rg 2 COP , ; rg 2 , , ;
- rg 1 mem , . . rg 2 rg 1 s . 9.2.
9.2 rg 2 rg 1
rg 2 / rg 1 | w = 0 | w = 1 | rg 2 / rg 1 | w = 0 | w = 1 |
AL | AX | AH | SP | ||
CL | CX | CH | BP | ||
DL | DX | DH | SI | ||
BL | BX | BH | DI |
- , . , .
:
1 ?
2 ?
3 ?
4 Intel?
5 ?
6 , ?
:
1 ?
2 , ?
3 , MOV AX,BX , () 89 D 8 .
:
1 - ?
2 ?
3 ?
4 ?
5 Intel?
, , , . :
;
( );
-;
;
.
, - . POPF i SAHF, .
, : , , , (), ().
MOV (MOV operand),
MOV dst,src.
src () dst (), src () . , . . , , . 3 6 .
:
MOV AL,B; AL
MOV BX,CX; CX
MOV AL,[BX]; ,
; , AL
MOV A,[BX];
; ,
; , A
MOV A,[BX] : , :
() = 1234 H
.
(DS) = 7000 .
(AX) .
ϳ , , AX AL (1235 ) AX AH. ϳ :
() = 1234 H .
(DS) = 7000 .
(AX) = 7856 , .
.
MOVSX (MOVe and Sign eXtension) . :
MOVSX dst,src.
, .
dst () 16- 32- , src () 8- 16- .
, , .
,
MOVSX A,L,
: (L) = 82 , (A) , L AL AH. ϳ A FF 82 H.
MOVZX (MOVe and Zero eXtension) . :
MOVZX dst,src.
, , .
dst () 16- 32- , src () 8- 16- .
, , , .
,
MOVZX A,L,
: (L) = 82 , (A) , L AL AH. ϳ A 0082 H.
XCHG (eXCHanGe) . :
XCHG dst,src.
8-, 16-, 32- , , . . - .
:
XCHG AL,B; () AL
XCHG BX,CX; () CX
XCHG AL,[BX]; ,
; , AL
XCHG A,[SI]; ,
; SI .
XLAT (transLATe byte from table) . :
XLAT.
AL 256- , . AL .
LDS/LES/LFS/LGS/LSS (Load pointer into DS/ES/FS/GS/SS segment register) . :
LDS/LES/LFS/LGS/LSSdst,src.
dst () 16- 32- , scr () 4 8 , . , , .
. , .
,
LES DI,[ SI +2],
:
(DS) = 7000 H; (SI) = 1234; DX ; 7000:1234 66 77 88 99
:
- 1234+2 (1234+2)+1 DX. 9988 ;
- (1234+2)+3 (1234+2)+2 S. .
L (Load Effective Address) . :
Ldst,src.
dst () 16- 32- , src () , . src (), , .
, , , .
LDS/LES/LFS/LGS/LSS L . , .
:
LEA DX,[BX+SI+2]; DX ,
;
; BX SI 2.
; (BX) = 0100, (S) = 0020, DX
;
; 0122 = 0100+0020+0002
LHF (Load AH register from register Flags) FLAGS. :
LHF.
Flags, 5 CF, PF, AF, ZF, SF, 7, 6, 4, 2 0 .
SHF (Store AH register into register Flags) FLAGS . :
SHF.
Flags , 5 CF, PF, AF, ZF, SF 7, 6, 4, 2 0 .
LHF SHF 8- , .
( ) . / SP. SS ( ) SP ( ).
PUSH (PUSH operand onto stack) . :
PUSH src.
src () , , , . 2 4 .
/ , SP , 2 (SP)1 (SP)2, (SP)1, (SP)2. 4- , (SP)1, (SP)2, (SP)3 (SP)4. PUSH POP.
POP (POP operand from the stack) . :
POP dst.
dst () . dst () , , . 2 4 . ³ SP, (SP)+2 2 , (SP)+4, .
PUSHA (PUSH All general registers onto stack) . :
PUSHA.
: AX, CX, DX, BX, SP, BP, SI, DI. DI ( ). SP, . SP, , (SP)16.
32- PUSHAD.
POPA (POP All general registers from the stack) . :
POPA.
, , PUSHA. SP , . SP 16.
32- POPAD.
PUSHF (PUSH Flags registers onto stack) . :
PUSHF.
POPF (POP Flags registers from the stack) . :
POPF.
PUSHF POPF , .
- , .
:
IN (INput operand from port). :
INdst,src,
dst () AL, AX EAX, src () () DX;
OUT (OUT operand to port).
OUTdst,src,
dst () () DX, src () AL, AX EAX.
, 255 , DX, 65536 . DX , .
.
- :
IN ,22; , 22
IN L,DX; L ,
; DX
OUT DX,; ,
; DX
, , . - , . , .
- - :
MOVSB (MOVe String Byte) ;
MOVSW (MOVe String Word) ;
MOVSD (MOVe String Double word) .
ֳ - , , DS:SI -, ES:DI. - ES, - , DS.
ϳ SI DI DF. DF 0 ( CLD), SI DI , DF 1 ( STD), SI DI . / 1, , 2, , 4, .
REP, 0.
AL/AX/EAX :
LODSB (LOad String Byte operands) ;
LODSW (LOad String Word operands) ;
LODSD (LOad String Double word operands) .
ֳ - , , DS(ES/GS/FS):SI . ϳ SI DF. DF 0 ( CLD), SI , DF 1 ( STD), SI . / 1, , 2, , 4, .
REP, LOOP -, .
AL/AX/EAX :
STOSB (Store String Byte operands) ;
STOSW (Store String Word operands) ;
STOSD (Store String Double word operands) .
ֳ AL/AX/EAX , , ES:DI. ϳ DI DF. DF 0 ( CLD), DI , DF 1 ( STD), DI . / 1, , 2, , 4, .
REP, , .
:
INSB (INput String Byte operands) ;
INSW (INput String Word operands) ;
INSD (INput String Double word operands) .
ֳ , ES:DI, , , DX. . ϳ DI DF. DF 0 ( CLD), DI , DF 1 ( STD), DI . / 1, , 2, , 4, .
REP, , .
:
OUTSB (INput String Byte operands) ;
OUTSW (INput String Word operands) ;
OUTSD (INput String Double word operands) .
ֳ , DX, , ES:SI, , . . DX. ϳ SI DF. DF 0 ( CLD), SI , DF 1 ( STD), SI . / 1, , 2, , 4, .
REP, , .
( ) . , . . , , . , . .
CBW (Convert Byte to Word) ( AL) ( ). AL . , AL 85 ( 05 ), FF 85 H. AL 74 ( +74 ), 0075 .
CWD (Convert Word to Double Word) ( ) ( DX:AX). DX.
, . , , . DIV.
CWDE (Convert Word to Double Word Extended) ( ) ( AX). A .
MOVSX i MOVZX, .
:
1 ?
2 MOV,MOVSX MOVZX?
3 DS BX LDS BX,[1234], : 7000:1234 10 20 30 40 50?
4 - ?
5 :
MOV CX,0004H; -
CLD
MOV SI,1234H
REP LODSB
SI AL , , 3.
6 ?
:
1 ?
2 REP?
3 SP 3456 3455 PUSH CX, : (SP) = 3457 () = 1234 ?