1.
16- (POH) (, , , DX, SI, DI, SP, ).
AX () [Accumulator eXchange],
BX () [Base eXchange],
CX () [Counter eXchange],
DX ( ) [Data eXchange],
SI ( ) [Source Index],
DI ( ) [Destination Index],
BP ( ) [Base Pointer],
SP ( ) [Stack Pointer].
.
, .
.
AX - -, . , AX. AX. AX: | AH | AL |
BX - , "" . BX: | BH | BL |
CX - . CX: | CH | CL |
DX - - , DX:AX. DX: | DH | DL |
SP - , . SS .
BP - ( , ).
SI - .
DI - .
8- : *H - (High) , *L (Low).
2.
.
FLAGS, 16 , , 1 1 .
(CF, OF, AF, SF, ZF, IF, DF).
CF (Carry Flag). 1, ( ), 0. , 0FFFFh 1, , , , 0000h CF = 1.
OF (Overflow Flag). 1, . , , ( ) .
AF (Auxiliary carry Flag). 1, ( ) . - .
|
|
SF (Sign Flag). .
ZF (Zero Flag). 1, .
IF (Interrupt enable Flag). 1 , . .
DF (Direction Flag). 1, , DF = 0 .
.
STC [SeT Carry] . CF 1.
CLC [CLear Carry] . CF 0.
CMC [CoMplement Carry] . F.
STD [ SeT Direction ] . DF 1, DI SI .
CLD -[CLear Direction] . DF 0, DI SI .
LAHF [ Load Flags into AH ] . FLAGS , SF (7 ), ZF (6 ), AF (4 ), PF (2 ) CF (0 ). 1 1, 3 5 - 0.
SAHF [Store AH into Flags] . SF, ZF, AF, PF CF 7, 6, 4, 2 0 . 1, 3 5 .
CLI [ CLear Interrupt ] . IF 0. .
STI [ SeT Interrupt ] . IF 1, CLI.
.
OF, SF, ZF CF , DF .
PUSHF POPF.
PUSHF [ PUSH Flags ] FLAGS ( SP 2).
POPF [ POP Flags ] (POPF) FLAGS ( SP 2).
3.
.
( flat ). , , 16- , .
( SEGMENT ENDS).
SEGMENT ENDS.
_ segment readonly . ''..._ ends, , .
SEGMENT .
READONLY. , MASM , . .
|
|
. , . :
BYTE ;
WORD ;
DWORD , 4;
PARA , 16 ( );
PAGE , 256.
.
. :
- PUBLIC ( MEMORY) , , ;
- STACK , PUBLIC, , , STACK, ;
- COMMON , , , , , PUBLIC STACK, ;
- AT , . , AT, , 16. : segment at 40h , 0400h. , , ;
- PRIVATE ( ) .
. USE16 USE32. , USE16, 64 , 16-. , 32- 32- , . USE32 4 , 32-. , USE16 , .MODEL .386 .
, . , PRIVATE, .
( ) - .
(CS, DS, SS, ES, FS, GS). .
Intel .
DS,ES,GS,FS , .
CS [Code Segment] , , , , , , . , , , .. CS.
SS [Stack Segment] .
ASSUME.
assume :...ASSUME , . , , SEG NOTHING, ASSUME . , , .
|
|
GROUP.
_ group _..., , , . ( , SEG), .
4.
( ).[ 16 ]
, .
. . , , AX BX,
mov ax,bx
. ( , ) ,
mov ax,2 AX 2. . , , . , , ES, 0001, mov ax,es:0001 AX. , , . , , ES, word_var , mov ax,es:word_var word_var . DS, , DS . .. , . , AX , DS, BX: mov ax,[bx] ( BX, SI, DI BP)
. : mov ax,[bx+2] | mov ax,[bp]+2 | mov ax,2[bp] AX , , DS, 2 , , BX. ( BX, BP, SI, DI ( ))
. , , , . : mov ax,[bx+si+2] | mov ax,[bx][si]+2 | mov ax,[bx+2][si] | mov ax,[bx][si+2] | mov ax,2[bx][si] AX , , BX SI, 2. BX + SI, BX + DI, BP + SI BP + DI. , , .
5.
.
, . .
|
|
(ORG, ALIGN EVEN).
org. ORG 100h COM, 100h.
align. . , NOP.
evenEVEN , NOP, . , , , . BYTE, .
CS IP.
CS [Code Segment] . , , , , , , .
IP [Instruction Pointer] ( ), , - . , , , .. CS IP.
6.
.
.MODEL
.model , ,:
>TINY [] , 64 . ;
>SMALL [] , ( , ). ;
>COMPACT [] , , ( );
>MEDIUM [] , , , ;
>LARGE HUGE [ ] , ;
>FLAT [] , TINY, 32- , , , , , 4 .
, C, PASCAL, BASIC, FORTRAN, SYSCALL STDCALL. , , .
, NEARSTACK ( ) FARSTACK. .
. .
, , SEGMENT ASSUME. , , , ENDS , .
.CODE
.code _ _TEXT segment word public CODETINY, SMALL COMPACT
name_TEXT segment word public CODEMEDIUM, HUGE LARGE (name , ). .CODE , , , NAME_TEXT.
.stack.STACK
STACK segment para public stack. 1 .
.data_DATA segment word public DATA.data?
:
_BSS segment word public BSS, , .
|
|
:
CONST segment word public CONST, .
.fardata _:
_ segment para private FAR_DATA, , . , FAR_DATA.
.fardata? _:
_ segment para private FAR_BSSFARDATA, . , FAR_BSS.
, .DATA,.DATA?,.CONST,.FARDATA .FARDATA?, , .STACK, FARSTACK, .CODE TINY FLAT FLAT DGROUP . DS ( SS, FARSTACK, CS TINY) , ASSUME.
7.
. .
, , . , , (, , ..), , . :
_ d*D* :
DB ;
DW (2 );
DD (4 );
DF 6 ( 16- : 32- );
DQ (8 );
DT 10 (80- , FPU).
, ( ), ? DUP, . , .
?, . , DUP, DUP (). , :
table_512w dw 512 dup(?)512 , table_512w. DUP , , DUP.
.
text_string db 'Hello world!'12 ASCII- Hello world!, text_string , mov al,text_string AL 48h ( H).
. , 10- (0 - , 1 - ). DT. , . , , . , . , H, , - . . "-", , H. 20 . 80, , . , -1234 , :
number DT 80000000000000001234H
8.
(ASCIIZ-) .
String_ASCIIZ db Hello World,0
String_ASCII_with_ counter db 11,Hello World
.
D
.
D
9.
, , . . .
.
STRUC .
struc ends, , . :
<>, . (). :
point struc; x dw 0; y dw 0; 0,0,0z dw 0color db 3 dup(?); point endscur_point point <1,1,1,255,255,255>; mov ax,cur_point.x; "x", . ().
color struc; color.red db?green db?blue db?color endspoint strucx dw 0y dw 0z dw 0clr color <>point ends cur_point point <> mov cur_point.clr.red,al; ; cur_point..
, .
union ends, , , . , , , , . . .
.
, . 8, 16 32 . , .
RECORD __ : _: = [,_: = ]
.
10.
.
, , , .
, , .
: 2 + 2 , (2 2) +. , . , 2 + 2 4.
, , , , .
<> ( ). , , , , :
message1 equ <foobar>() ( ). , , . mov al, 2*(3+4); mov al,14
: + (), (), * (), / ( ), MOD ( ). . mov al,90 mod 7; mov al,6
, , .
: AND (), NOT (), OR (), XOR ( ), SHL ( ), SHR ( ). .
mov ax,1234h AND 4321h; mov ax,0220h: EQ (), GE ( ), GT (), LE ( ), LT (), NE ( ). , , ..errnz $ gt 65535; 64
:
SEG ;
OFFSET ;
THIS (MASM TASM);
PTR ;
LARGE 32- (TASM WASM);
SMALL 16- (TASM WASM);
SHORT 8- .
SEG OFFSET :
mov dx, offset msg; DX msg
THIS , :
mov al, this byte-1; AX .
PTR , , :
mov dword ptr [si],0; 4 DS:SI
LARGE, SMALL SHORT , :
jmp large dword ptr old_address; old_address 32- jmp small dword ptr old_address; old_address 16- 16- .jmp short short_label; short_label , +128/-127 , JMP.:
. () ;
: () ;
[] ( ) ;
? ;
DUP () .
LENGTH table dw 0,1,2,3,4,5,6,7; 8 .table_count = length table; table_count = 8SIZE table_size = size table; table_size = 16.
, , , , .
11.
(MOV, XCHG, LEA, LDS, LSS, LES, LFS, LGS, XLATB, PUSH, POP, IN, OUT, CBW, CWD). , .
MOV , ; : .
. , . MOV , mov ax,bx = b; , , , . MOV : ( ), , ( , ). , ( CS) . , . MOV , MOV ( ) PUSH/POP.
XCHG 1, 2; : .
2 1, 1 2. XCHG .
xchg eax,ebx; , :; temp = eax; eax = ebx; ebx = temp; xchg al,al; LEA , ; : . lea mov , . , , lea , ( ) , .lds ,; : ds; lss ,; : ss.les ,; : es; lfs ,; : fs;lgs ,; : gs; . , , . , , . . , , . .XLATB; AL ES:BX , AL. XLATB ASCII- :mov al,0Ch
mov bx, offset htable
xlatb
, ES,
htable db "0123456789ABCDEF"
AL 0h, ASCII- ѻ. , , , DAS, XLAT .
PUSH ; : .
. , , . SS:[SP] SP (2 4).
POP ; : .
, , SP 2 4 . POP , PUSH. , , CS ( CS , RET), .
IN , : .
-, , . AL, . , DX, 255.
OUT , : .
(AL, ) -, . , DX.
CBW; : .
CBW , AL, , , :
mov al,0F5h; AL = 0F5h = 245 = -11
cbw; = 0FFF5h = 65 525 = -11
CWD; : .
CWD A , ( 0 15) , ( 16 31) DX. DX , , .
12.
(ADD, ADC, SUB, SBB, CMP, MUL, IMUL, DIV, IDIV, NEG). , .
, , OF, SF, ZF, AF, CF, PF .
ADD , .
, , . , , , , . ADD , , CF ( ), OF ( ) SF ( ), , .
ADC , .
ADD, , , F.
SUB , .
. , , , , . SUB , , .
SBB , .
SUB, , CF.
CMP , .
. (, ) ( ; ), , CF, OF, SF, ZF, AF PF.
MUL - .
( ) AL, , ( ) , DX:AX, . (, DX) ( ), CF OF 0, 1. (SF, ZF, AF PF) .
IMUL .
IMUL ,
IMUL , 1, 2
, :
>IMUL : ( ) AL, ( ), , DX:AX .
>IMUL , : (, ) (), .
>IMUL ,1,2: 1 ( ) 2 (), ().
, , . , . OF CF , , , ( ) ( ). SF, ZF, AF PF IMUL .
DIV .
AL, ( ) ( ) AL, , , DX . , . CF, OF, SF, ZF, AF PF , #DE ( ) 0 .
IDIV .
AL, ( ) ( ) AL, , , DX . , , . CF, OF, SF, ZF, AF PF , #DE ( ) 0 .
NEG .
, ( ), . , . , CF 0, 1. (OF, SF, ZF, AF, PF) .
13.
(AND, OR, XOR, NOT, TEST). , .
AND , .
Ȼ ( ) (, ; ) . 1, 1, 0 . AND , ,
and al,00001111b
AL, . OF CF , SF, ZF PF , AF .
OR , .
Ȼ ( ) (, ; ) . 0, 0, 1 . OR , ,
or al,00001111b
, AL 1. OR OF CF , SF, ZF PF , AF .
XOR , .
Ȼ ( ) (, ; ) . 1, , , . XOR , :
xor ,;
xor ,b
xor b,
xor ,b;
,
mov ax,0
xchg ax,bx
NOT .
( ), , 1, , 1, 0. .
TEST , .
Ȼ ( ) (, ; ) SF, ZF PF , ( OF CF , AF ). TEST, , (Jcc), (CMOVcc) (SETcc).
14.
(SHL, SHR, SAL, SAR, RCL, RCR, ROL, ROR). , .
SHL , - ;
SHR , - ;
SAL , - ;
SAR , - .
( ) ( ) ( ) ( CL, , 0 31), 1 ( ) ( ) 2. , 0010b (2) 1 0100b (4). SAL SHL ( ) CF, , . SHR : CF, 1 , . 2. SAR SHR, , , , , 11111100b (-4) 11111110b (-2). SAR, , 2, , IDIV, , . , -9 4 IDIV, -2 ( -1), -9 2, -3. 1 1, .
1 OF: SAL/SHL 1, ( ), 0, . SAR OF 0, SHR OF . OF . SF, ZF, PF , AF ( , , ).
8086 1 CL , 5, 80186 .
RCL , ;
RCR , ;
ROL , ;
ROR , .
( ) , ( CL, , 0 31). 1 ROR (ROL) () , (), () . RCR RCL , CF , .
15.
- (, DAA, AAS, DAS, AAD, ). , .
AAA ASCII- .
- AL. , 1. . , 05 06 000Bh, 0101h ( 11). CF OF 1, AL , . OF, SF, ZF PF .
DAA BCD- . [BCD=Binary-Coded Decimal=- ]
ADD (ADC, INC XADD) AL - , AL - , . , AL 19h,
inc al
daa
, AL 20h ( 1Ah, INC). AF CF , , SF, ZF PF , OF .
AAS ASCII- .
- AL SUB SBB. , 1. CF OF 1, AL , . OF, SF, ZF PF .
DAS BCD- .
SUB (SBB DEC) AL - , AL - , . , AL 20h,
dec al
das
, AL 19h ( 1Fh, DEC).
AF CF , , SF, ZF PF , OF .
AAD -ASCII- .
- , , , . , 25 5:
mov ax,0205h; 25
mov bl,5
aad; 19h
div bl; = 0005
SF, ZF PF , OF, AF CF .
AAM ASCII- .
- , MUL, - ( AL). :
mov al,5
mov bl,5; 5 5
mul bl; - 0019h
aam; 0205h
SF, ZF PF OF, AF CF .
16.
. (Jcc) (JMP) . ., .
JMP .
JMP , - . ( , , ), , .
:
> short ( ) -127 +128 JMP;
> near ( ) , JMP;
> far ( ) . , , CS;
> . , .
short near JMP IP, . , IP, MOV. JMP , IP, . , .
, ( ), JMP IP CS, 16 CS 16 IP.
J cc .
, ( short near), . , , Jcc , , . , , JE, , . Jcc 8- .
Jcc , , , Jcc JMP, , :
cmp ,0 jne local_1 jmp far_label; , = 0ll_1: . () . , , , . , , , . , . , . , . code segment jmp DS:go_addr; FF 26 dddd go:; code ends data segment go_addr dw go; () data ends () . , , , 2 , ( ) . . : codel segment assume CS:codel,DS:data jmp DS:go_addr; FF 2E dddd codel ends code2 segment assume CS:code2 go:; code2 ends data segment go_addr dd go; data ends LOCALS . . , , , . TASM "@@" , LOCALS. , MODEL STACK . , , , .17. (LOOP). . LOOP 1 short ( , -128 +127 LOOP), . , . , ADD 10 :
mov cx,0Ah
loop_start: add ax,cx
loop loop_start
LOOP
dec ecx
jz
LOOP .
(LOOPE/LOOPZ LOOPNE/LOOPNZ). LOOPE - , LOOPZ - , LOOPNE - , LOOPNZ - , , short, . LOOPE LOOPZ ZF, LOOPNE LOOPNZ ZF . LOOPcc , ZF ( ) . , DS:SI ES:DI (. ), ( = 0) ASCII- 13 ( ): mov cx,str_lengthmove_loop: stosb lodsb cmp al,13 loopnz move_loop JCXZ. JCXZ - , = 0 , CX . . , , , LOOPNE, = 0, 65 535 .18.
(CALL) (RET) . .
CALL - .
, . ( ), , . , , , CALL. , JMP, . IP, CALL , IP , . CALL , , , . CALL , V86 , CS IP JMP.
RET - .
RETN ( , ) IP, , , CALL. RETF IP CS, . RET, RETN RETF , , . RET , , , , .
( PROC ENDP).
, , , .. CALL, , RET. , .
proc USES ; TASM proc USES ; MASM/WASM... ret endp PROC . NEAR FAR, , RET RETN RETF. , NEAR TINY, SMALL COMPACT. .MODEL, . PROC , . , . USES , . PUSH, RET POP,