Assembly [Ελληνικο Μαθημα]
Embed Size (px)
description
Transcript of Assembly [Ελληνικο Μαθημα]
-
5/24/2018 Assembly [ ]
1/130
1
1
8086
8086 Intel, (1978) 16-bit. , .
1.8086
8086 , 1, :
1
- (EU, Execution Unit), . , , ,
.
- (BIU, Bus Interface Unit) / ( ). /. , (Instruction Pointer, IP), , bytes .
"pipeline", , EU
-
5/24/2018 Assembly [ ]
2/130
2
BIU (queue) BIU. (.. ) BIU / . EU .
(bus), /16 bits, 20
bits.
2.
2.1 (Data Registers).
:AX ( = accumulator),
BX ( = base),
CX ( = counter),
DX ( = data ).
16-bit 8-bit . H (High) L (Low). 8-bit : AH,AL, BH, BL, CH, CL, DH, DL. , .. , :
/ , , , .
BX (indirectaddressing).
CX .
DX AX 16 bits 32 bits ,.
2.2 .
16 bits, (pointer, index) , , , . :
SP ( = Stack Pointer),
BP ( = Base Pointer),
SI ( = Source Index),
DI (= Destination Index),
:
-
5/24/2018 Assembly [ ]
3/130
3
SP .
BP ( ,).
SI .
DI .
2.3
IP ( = Instruction Pointer) (offset) . BIU. (Program Counter)von Neumann :
CS : IP
2.4 .
2.
SR16bits, 9 .
2.4.1 .(6 bits)
( ON , OFF ) , , . () . :
CF (Carry Flag)
-
5/24/2018 Assembly [ ]
4/130
4
(ADD,SUB, ADC, SBC). () () Msbit , 1 0. (RCR, RCL). Msbit
bit 71byte 151word = 2bytes.
AF (Auxiliary Flag)
34bit byte, 1 0. BCD (DAA,AAA).
SF (Sign Flag)
. Msbit (7 15) . 0 , 1.
ZF (Zero Flag)
1 0, 0.
OF (Overflow Flag)
1 () . (eXclusive-OR) Msbit .
PF (Parity Flag)
. 1 1 byte .
.
2.4.2 .(3 bits)
( ,, ).
IF (Interrupt Flag)
-
5/24/2018 Assembly [ ]
5/130
5
1 IF, , . ().
DF (Direction Flag)
. 1 (SI DI) /, .
TF (Trap Flag)
1 . .
2 . .. T Trap Flag.
2.5 .
(segments) :
- CS(= Code Segment).- DS(= Data Segment).- SS(= Stack Segment).- ES(extra = Extra Segment).
3. .
/8086 DIL (Dual InLine) 40 (pins) . (Minimum) (Maximum). 5V 0V /. Minimum / , Maximum 8288. 8087 8089.
8086 (Multiplex) . 20 , (Address
-
5/24/2018 Assembly [ ]
6/130
6
Data) (AD0 AD15) (System Address) (A16 S3 A19 S6). , , ( ALE Address Latch Enable )
. BIU.
3
:
- GND.- NMI.- INTR.- CLK
CPU.
- RESET. , 0FFFF0h (IP=0000,CS=0FFFFh). / ROM JMP
-
5/24/2018 Assembly [ ]
7/130
7
/ . bootstrap loader.
- READY /,
.
- TEST WAIT .
- RD .
- VCC +5V 10%.- S3, S4
/.
- S5(IF).- S6
.
- QS0(ALE), QS1 (INTA). .
- S0, S1, S2 (Bus Cycle).
- LOCK .
- RQ/GT0 (HOLD) RQ/GT1 (HLDA) .
4.
/ 20 bit. 8086 1 Megabyte . /00000h 0FFFFFh. 1 byte. (segments) 64 kbytes. 16 bytes, /16 . 64 kbytes . (segmentation)
-
5/24/2018 Assembly [ ]
8/130
8
16 bits 8086. :
(physical address) 20 bits .
/ / / /. / 8086 :
. / 16.
pointer index () , (logical address,
offset, effective address). / / :
= * 16 +
/ / :segment:offset segment offset 4 . 987Ah:0100h,CS:IP , DS:9987H ..
64 kbytes . , :
CS/(CODE). IP. . CS:IP(PC) .CS =345Ah IP = 712Ch, /:
CS*10h + IP = 345Ah * 10h + 712Ch = 345A0h + 712Ch = 3B6CCh
SS /(STACK). / BP. .. SS = 1ABCh SP = 100h,/:
SS * 10h + SP = 1ABCh * 10h + 100h = 1ABC0h + 100h = 1ACC0h
DS ES / ( DATA ) ,
(EXTRA) .
-
5/24/2018 Assembly [ ]
9/130
9
4 16 bits, () 4 bits /20 bits. /(segment).
4.
. , .
5.-
1 byte. ( word = 2 bytes )byte /... 3456h , /678h 679h
5634h :
/
-
5/24/2018 Assembly [ ]
10/130
10
/(segment:offset) . . DS=1234h SI=5678h / (pointer) DS:SI 0300h 0303h :
/
8086 16 bits. , 512 kbytes / 16 bits . 8086 16 bits
byte , AD0 BHE. :
. byte /.AD0 = 0 BHE = 1 ().
. byte /.AD0 = 1 BHE = 0 ().
. byte /.AD0 = 0 BHE = 0 ().
. byte /..
, High AX A Low B. byte
byte. ( )
BA
.
;;
1 :
TITLE word__test; DOSSEG
.MODEL SMALL
.CODE
-
5/24/2018 Assembly [ ]
11/130
11
MAIN proc farPUSH DS; DOS, XOR AX,AX; (SEGMENT) PSPPUSH AX; PSP
MOV AX,@DATA
MOV DS, AX
MOV Ah,'A'MOV AL,'B'MOV WORD__LOW__HI,AX; MOV DL,CHAR__low; MOV AH,2INT 21HMOV DL,CHAR__hi; MOV AH,2; 2DOS INT 21H; DOS
RET; DOS INT 20h PSPMAIN endp
.DATAWORD__LOW__HI label word
Char__low db 0Char__hi db 0.STACK 100H
END MAIN
6.
///64 kbytes. / (port) (DX) byte () /256. (IN OUT). .
-
5/24/2018 Assembly [ ]
12/130
12
2
8086 .
1.
ASSEMBLY /. (,
, , ) :
,
(, ,,,..)
-
,
(1Mbyte RAM ROM)
/ : . (instruction set) . / , (machine language). ASSEMBLY . . :
add a1,1
-
5/24/2018 Assembly [ ]
13/130
13
:
41
:
- .-
.
- .
(Assembler)
. . (TASM.EXE MASM.EXE) .OBJ object module , (TLINK.EXE LINK.EXE) object modules .EXE .COM.
:
2 :
INTDOS EQU 21hTITLE MHNHMAKVDIKAS SEGMENT PUBLICASSUME CS:KVDIKAS,DS:DEDOMENAMAIN PROC NEARmov ax,DEDOMENA ; ds /mov ds,ax ;
lea dx,mhnhma ; /dxmov ah,9 ; DOS stringint INTDOSMAIN ENDPKVDIKAS ENDSDEDOMENA SEGMENT PUBLICMhnhma db WELLCOME TO ASSEMBLY ,13,10,$DEDOMENA ENDSSOROS SEGMENT PARA STACK SOROS
Db 100h dup(0) ; 256 bytesSOROS ENDS
END MAIN
-
5/24/2018 Assembly [ ]
14/130
14
MHNHMA.ASM,:
TASMMHNHMA
, MHNHMA.OBJ. :
TLINKMHNHMA
MHNHMA.EXE. .COM , /t(.. TLINK /t ).
ASSEMBLY
. :
;
( labels ) / , . :
INDOS, KVDIKAS, MAIN, DEDOMENA, MHNHMA, SOROS.
:.. again .
again: add a1,5.
jmp again
(instructions), (directives)
. mov, add, int, sub, mul, div..
EQU, SEGMENT, ENDS, PROC, ENDP, ASSUME, END.
, , . :
- ( .. 14, 35d, 21h, 10101000b, 0abcdh) ( . a). d
-
5/24/2018 Assembly [ ]
15/130
15
, h b.
- (.ax, bx).- (.jmp again).- LENGTH, OFFSET,:,SEG ..
assembly () (segments), . STACK. .EXE.
.COM :
- ( ). .
- 256 bytes . 256 bytes (PSPProgram Segment Prefix).
-. 256 bytes.
.COM :
3 :
TITLE ; CGROUP GROUP KVDIKAS,DEDOMENA ;
;
KVDIKAS SEGMENT PUBLICASSUME CS:CGROUP,DS:CGROUPORG 100h ; 256 .MAIN PROC NEARmov al,aritmos1 ;ALadd al,aritmos2 ; ALmov dl,al ; DL add dl,30h ; ASCII mov ah,2 ; DOS
int 21h ; DOSint 20h ; DOS .COM
-
5/24/2018 Assembly [ ]
16/130
16
MAIN ENDPKVDIKAS ENDS
DEDOMENA SEGMENT PUBLIC
aritmos1 db 4aritmos2 db 5
DEDOMENA ENDSEND MAIN
/t . atroisi.asm, :
Tlink /t atroisi.obj
2.
2.1 END.
END . .EXE END /. .,ARXH PRAXH :
4 :
TITLE AFAIRESH; KVDIKAS SEGMENT PUBLICASSUME CS:KVDIKAS,DS:DEDOMENAPRAXH PROC NEARmov ax,dedomenamov ds,axmov al,aritmos1; 1 ALsub al,aritmos2; ALmov apotelesma,al;
mov dl,apotelesma; DL 2;DOS
add dl,30h ; ASCII mov ah,2 ; DOS int 21hret; .PRAXH ENDPARXH PROC NEARcall praxh ; praxhmov ah,4ch ; DOS int 21h ; DOS
ARXH ENDPKVDIKAS ENDS
-
5/24/2018 Assembly [ ]
17/130
17
DEDOMENA SEGMENT PUBLICaritmos1 db 4aritmos2 db 3apotelesma db 0
DEDOMENA ENDS
SOROS SEGMENT PARA STACK 'SOROS'db 256 dup (0)
SOROS ENDSEND ARXH
2.2 ,
SEGMENTENDS . . SEGMENTENDS(logical segment).
PROCENDP ., (Calls, Ret) .
ASSUME . ASSUME CS: .EXE . ASSUME DS: ASSUME ES /,
(DATA EXTRA) . ASSUME ( labels ) .
5 :
TITLE POLLAPLASIAMOS; KVDIKAS SEGMENT PUBLICASSUME CS:KVDIKAS,DS:DEDOMENA1
PRAXH PROC NEARASSUME DS:DEDOMENA2 ;***** *****
;mov ax,dedomena2mov ds,axmov al,aritmos1; 1 ALmov dl,aritmos2; ALmul dl; AL * DL , AXmov apotelesma,al; mov dl,apotelesma;DL
add dl,30h ; ASCII mov ah,2 ; DOS
-
5/24/2018 Assembly [ ]
18/130
18
int 21hretPRAXH ENDPARXH PROC NEAR ; call praxh
ASSUME DS:DEDOMENA1mov ax,dedomena1mov ds,axlea dx,mhnhmamov ah,09hint 21hmov ah,4ch ; DOS int 21h ; DOSARXH ENDPKVDIKAS ENDS
DEDOMENA1 SEGMENT PUBLICmhnhma db 10,13, "END of PROGRAM",10,13,"$"DEDOMENA1 ENDS
DEDOMENA2 SEGMENT PUBLICaritmos1 db 4aritmos2 db 2apotelesma db 0
DEDOMENA2 ENDS
SOROS SEGMENT PARA STACK "SOROS"Db 256 dup (0)SOROS ENDS
END ARXH ; /h ARXH
2.3
DBbyte, DW , DD , DQDT bytes . DUP
. . . :
ARITMOI DW 10,13,29MHNHMA DB HELLOPINAK DB 10 DUP (0)
21 bytes / :ARITMOI , MHNHMA , PINAK
. .
-
5/24/2018 Assembly [ ]
19/130
19
LABEL () , . BYTE , WORD, DWORD ..
. :
NUM LABEL WORDCHARS DB 10,0
2 CHARS.
NUM WORD . .
mov ax,num
AX.
2.4
EQU , . . EQU, EQU. . :
Blocksize EQU 512BLOCKS EQU 4Bufsize EQU Blocksize * BLOCKSMhnhma EQU
$. :
mhnhma DB mhkos__mhnhma EQU (mhnhma - $)
2.5 .
2.5.1
(SEGMENT, ENDS, ASSUME), Borland Microsoft , (Simplified Directives), , (linking) (object modulus)3.
-
5/24/2018 Assembly [ ]
20/130
20
ASSEMBLY, C,PASCAL, PROLOC, BASIC , ASSEMBLY . , assembly,
, (CALLRET), .
: DOSSEG, .MODEL, .STACK, .DATA,.CODE.
2.5.2 .STACK, .DATA, .CODE.
, .
.STACK .EXE . .
.STACK 200h
512 bytes.
.CODE . .
.DATA. . DS, DS . :
mov ax,@DATA ; @DATA ,;@CODE
mov ds,ax ; ds
-
5/24/2018 Assembly [ ]
21/130
21
. .
CALL RET. IP ( ), () CS:IP ( /). callretnear, far.
. (offset).
/segment:offset.
, ( , ), (pointers). 2 byte ( ), 4 bytes.
:
Tiny..com 65k.
Small. , . 2
bytes.
Compact. , . 4 bytes.
Medium.
. 2 bytes.
Large. .4 bytes.
Huge. , . .
( num) word (2 bytes) .
small.
-
5/24/2018 Assembly [ ]
22/130
22
6 :
;
.model small
.codemov ax,@datamov ds,axmov ax,numor ax,ax ; or
jz einai_mhdenmov dx, offset mhnhma_oximov ah,9; DOS int 21h ; DOS
jmp telos
einai_mhden:mov dx,offset mhnhma_naimov ah,9; DOS int 21h ; DOS
telos:mov ah,4ch; DOS int 21h ; DOS
; .datanum dw 0
mhnhma_nai db 10,13, "It is zero",10,13,'$'
mhnhma_oxi db 10,13, "It is not zero",10,13,'$';.stack 256
end
3
1.
1.1MOVMOV ,
byte :
(.MOV AX,BX) (.MOV APOT,AL)
(.MOV DL,APOT) (.MOV AH,21h) (.MOV ARIT,5)
-
5/24/2018 Assembly [ ]
23/130
23
. MOV DS,DATASEG;
1 byte 1 word = 2 bytes... :
MOV ax,dlMOV bh,dx
.
1.2PUSH POP. (stack) LIFO(Last In First Out). / SS:0000 SS:SP.
PUSHSP2 (2bytes) .
POP
SP2.
/ 16 bit, .
.. SP=100h , SS=1000h , Ax=12. :
PUSH ax
SP=0FEh/1000:00FE 12.
PUSH10 .
PUSHF , POPF .
1.3XCHG ( ) bytes words. . . .. AX=14 ,
BX=15 , :
-
5/24/2018 Assembly [ ]
24/130
24
XCHG ax,bx
ax=15 bx=14.
2..
2.1
8086 . , , 8 16 bits. (twos complement). 32 bits . . , ,
.
2.2
ADDSUBMOV:
ADD , SUB ,
MOV .
ADCSBB Carry Flag, CF. 32 bits. 32 bit CX:BX32 bit
DX:AX.add ax,bxadc dx,cx ; 16 bit
8086 1 INC DEC. , . :
INC DEC
:
ADD , 1
SUB , 1
-
5/24/2018 Assembly [ ]
25/130
25
2.2
MUL:
MUL
.byte AL AX. byte AX DX:AX. . IMUL .. AL=10 DL=15:
MUL DL
AX = 150.
DIV
DIV
.byte AX AL AH. byte
DX:AXAXDX. . IDIV. .. AX=115 DL=10:
DIV DL
AH =5 AL = 11.
NEG.
2.3
8086 AND, OR, XOR NOT. bit byte . bit . bit bits . AL=10110110b ,
AH=11110000b :
AND al,ah
al = 10110000b
-
5/24/2018 Assembly [ ]
26/130
26
0 bit al 0 bit ah , 1 bit al 1 bit ah . AND, OR, XOR, NOT . ,
.
3.
8086 bits . :
CF
0
SHL SAL
SHL SALbit bit. bit CF bit 0. 2.
CF
0
SHR
SHRbit .
bit (. 0) CF bit 0.2.
-
5/24/2018 Assembly [ ]
27/130
27
CF
SAR
SARbit
bit . 2.
4 :
CF
ROR
H RORSHRbit
bit CF.
-
5/24/2018 Assembly [ ]
28/130
28
CF
ROL
ROL . bits .
CF
RCR
CF
RCL
-
5/24/2018 Assembly [ ]
29/130
29
RCLRCR. CF. RCL bits , bit CF CF . 0 bit. RCR.
. 1, CL ..:
SHL AX,1
AX 2. :
MOV CL,4SHL AX,CL
AX16.
4.
4.1
, .
. , . , . CF, OF,
ZF.
4.2
JMP
:
- byte ( -128 +127 ) . SHORT.
- ( -32768 +32767 ) . ().
-
5/24/2018 Assembly [ ]
30/130
30
- . FAR PTR. 8086.
/() ().
:
a:..
jmp SHORT a; byte label a
a:..
jmp FAR PTR a; label a
a:..mov ax, OFFSET a
jmp ax ; label a
a:..
jmp word ptr [b] ; label a..
b dw offset a
4.3
8086 18 . CF ( Carry Flag), OF (Overflow Flag)SF (Sign Flag).
CMP , . SUB:
CMP,
CMP , SUB , (Flags) , . .
CMP AL,6
JA a ; AL >6..
-
5/24/2018 Assembly [ ]
31/130
31
a:
CMPTEST(, ) AND(Byte ) , (
). TESTbits JNZ. . , 4.
7 :
.MODEL SMALL ;
.CODEmov ax,@datamov ds,axMOV AX,ARIT;
TEST AX,0000000000000011h; bitJNZ NOT__EVEN; LEA DX,MHNHMA__EINAI; MOV AH,09 ; INT 21HJmp TELOS
NOT__EVEN:LEA DX,MHNHMA__DEN__EINAI; MOV AH,09 ; INT 21H ;
TELOS:mov ah,4ch; int 21h ; .DATAMHNHMA__EINAI db "4 is a divisor of arit",10,13,"$"MHNHMA__DEN__EINAI db "4 is not a divisor of arit",10,13,"$"arit dw 1201.stack 100h
end
:
-
5/24/2018 Assembly [ ]
32/130
32
JB/JNAE
CF=1
JAE/JNB
CF=0
JBE/JNA
CF=1 ZF=1
JA/JNBE
CF=0 ZF=0
JE/JZ ZF=1
JNE/JNZ ZF=0
JL/JNGE
SFOF
JGE/JNL
SF=OF
JLE/JNG ZF=1 SF
OF
JG/JNLE
ZF=O SF = OF
JP/JPE
PF=1
JNP/JPO
PF=0
JS
SF=1
JNS
SF=0
JC
CF=1
JNC
CF=0
JO
OF=1
-
5/24/2018 Assembly [ ]
33/130
33
JNO
OF=0
byte. 128 +127 (Bytes) / . . :
CMP DL,7JA A.......
A:
:
CMP DL,7JNA BJMP A
B:.A:
4.4
. . , , , , .. 8086 : LOOP,
LOOPE, LOOPNEJCXZ. . CX.
LOOP 1 CX 0,
LOOP. . 18 ,.
mhnhma DB ....
mov cx,18;
lea bx,mhmnhma; /; mhnhma bx
-
5/24/2018 Assembly [ ]
34/130
34
loop__ektyp:mov dl,[bx] ; dl inc bx ; mov ah,02h ; DOS int 21h ; DOS
loop loop_ektyp ; CX >0
LOOPE LOOP CX. LOOPECX0 ZF= 1 ( ). LOOPNE CX0 ZF = 0 ( ). . 256 bytes. ENTER( ASCIl13).
Buffer db 126 dup (0) ; ....
mov cx,256; lea bx,buffer; /
; bxagain:
mov ah,8 ; DOS
int 21h ; DOSmov [bx],al ; ; DOS AL
inc bx ; cmp al,0dh ; ENTERloopne again ; CX >0 ZF = 0
JCXZCX = 0. CX
. .
JCXZ parakatv; CX=0 again: loop again; CX
parakatv:
JCXZ CX=0.
byte .
-
5/24/2018 Assembly [ ]
35/130
35
: 1. ASCII
)
) )
2. byte .
3. 20 .
4.5 (pointer).
/. . / (near pointers) /(far pointers). /, 2 bytes. / , 4 bytes. 0 8086 .
:
LES , LDS,
DWORD 4 bytes, 16bit . 2 bytes ( ) 2 bytes ES DS. (mhnhma)
. (pointer) /mhnhma.
8:
code_seg segment publicassume cs:code_seg,ds:data_segmain proc near
mov ax,data_seg; dsmov ds,axles di,pointer; pointer,
; /mhnhma , ES:DIagain: mov dl,es:[di]; /es:[di] dl
-
5/24/2018 Assembly [ ]
36/130
36
cmp dl,0; ?je telos; mov ah,2; int 21hinc di;
jmp again ; telos: mov ah,4ch
int 21hmain endpcode_seg endsdata_seg segment
; far pointer /mhnhmapointer label dword
dw offset mhnhmadw seg mhnhma
mhnhma db "END OF TESTING PROGRAM",10,13,0
data_seg endssoros segment para stack
db 256 dup (0)soros ends
END MAIN
-
5/24/2018 Assembly [ ]
37/130
37
4
1.
8086 1Mbyte, . . // . 4, / .
. . , /, / ( BIU). , .
2.
/,
.
2.1
, . .:
MOV al,3;AL
-
5/24/2018 Assembly [ ]
38/130
38
AX .
2.4
. (DS). /(segmentoverride prefix). /, ( ) .:
.DATAmhnhma db ,10,13,$PIN db 10 dup (0)
Arit db 10,3Apot db 0
MOV AL, ARIT[0]; mov al , [arit] mov al,aritADD al, arit[1]; add al, [arit + 1]MOV AL, MHNHMA[2]; mov al,[2]MOV dl,pin[3]; mov dl,[pin+3] mov dl,mhnhma[21+3]mov al,es:[6]; 7byte extra segmentmov al,ss:[9]; 10byte .
0. /. __
3.
3.1
.
0 . . . . :
[ + + ]
BXBP, SI DI, . :
[] [] []
-
5/24/2018 Assembly [ ]
39/130
39
, , /.
:
BX SI + BP DI(base) (index) (displacement) , :
[] [BP+][BX] [BX]
[SI] [SI+][DI] [DI+][BX+SI] [BX+SI+][BX+DI] [BX+DI+][BP+SI] [BP+SI+][BP+DI] [BP+DI+][BP]
/. BP /
( SS ), ( DS ). . :
MOV di,100mov al,amov [di],al; 100 data segment a
mov bp,spsub bp,10mov al,[bp]; 10 al
mov si,10mov al,es:[si]; 10 extra segment al
3.2
byte . (DBDW) . WORD PTR, BYTE
PTR. :
MOV SI,2
-
5/24/2018 Assembly [ ]
40/130
40
MOV WORD PTR [SI],8; 2 3 byte data segment ; 080h. ; , 8 0
/
. OFFSETSEG:
LEA,
16 bit . //. OFFSET.
MOV , OFFSET
o SEG (segment) . :
.DATAmhnhma db ...CODE
..MOV AX,SEG MHNHMA; MOV ES,AX; ES (extra segment)
MOV SI,OFFSET MHNHMA; LEA SI, MHNHMAINC SIMOV BYTE PTR ES:[SI],A;E A
. (Simplified) .
;;1
9:
.model small ;small
.stack 200h ; 512
.datadb 200 dup (0)charstring db "ABCDEFGHIJKLM"
.codemov ax,@data ; DS mov ds,ax ;
one:
mov si , offset charstring +8; si /charstring 8mov dl,[si] ; /si dl
-
5/24/2018 Assembly [ ]
41/130
41
mov ah,2int 21h
two:mov bx,8
mov dl,[charstring + bx]mov ah,2int 21h
three:mov bx,offset charstringmov dl,[bx+8]mov ah,2int 21h
four:mov si,8mov dl,[si+charstring]
mov ah,2int 21h
five:mov bx,offset charstringmov di,8mov dl,[bx+di]mov ah,2int 21h
six:mov si,offset charstring
mov bx,8mov dl,[bx+si]mov ah,2int 21h
seven:mov bx,offset charstringmov si,7mov dl,[bx+si+1]mov ah,2int 21h
eight:
mov bx,3mov si,5mov dl,[bx+charstring+si]mov ah,2int 21h
telos:mov ah,4chint 21hEnd
:IIIIIIII
-
5/24/2018 Assembly [ ]
42/130
42
4
4.1
/
. 8086 , . , . MOV , LOOP, INC.
. . ( source )
DS;[SI], ( destination) ES:[DI]. SI
DIDF. :
- (DF) = 0 1 byte 2 (word).
- (DF) = 1 1 byte 2 (word).
:
CLD (DF)STD (DF1)
DF . byte . , byte .
4.2
4.2.1 LODS / LODSB / LODSW
LODSBbyte /DS:[SI]ALSI1. .. :
CLD ; DFMOV SI,2LODSB
AL2byte .
-
5/24/2018 Assembly [ ]
43/130
43
LODSW/DS:[SI]AXSI 2. .. :
CLDMOV SI,2
LODSW
AX2byte 3byte .
4.2.2 STOS / STOSB / STOSW
STOSB byte AL / ES:[DI]DI1. .. :
STD ; DF=1
MOV di,2MOV AL,4STOSB
2byte extra 4 DI1.
STOSWAX /ES:[DI]DI2.
4.2.3MOVS / MOVSB / MOVSW
LODSSTOS. byte ( MOVSB) ( MOVSW) /DS:[SI] /ES:[DI]DISI 1 2. . PHGH PROORISMOS. MEGETHOS__SE__BYTE.
cld ; DFmov cx,MEGETHOS__SE__BYTE : cxmov si,OFFSET PHGH ; /SI
mov ax,SEG PHGH ; mov ds,ax ; DSmov di, OFFSET PROORISMOS ; /DImov ax, SEG PROORIMOS ;mov es,ax ; ES
brogxos__metaforas :movsb : BYTEloop brogxos__metaforas ; CX
4.3
4.3.1 SCAS / SCASB / SCASW
-
5/24/2018 Assembly [ ]
44/130
44
SCAS ES:[DI]. : SCASBAL(byte)SCASWAX(). ( alax)
ES:[DI] . DI 1 2 . , :
10:
DOSSEG ; .MODEL TINY ; Turbo C Tiny ( .com )
.CODEorg 100h ; 256 byte arxh proc
LEA DX,EISAGVGH ; MOV AH,9 ; INT 21h ;DOSmov ah,08 ; int 21h ; DOS alMOV CX, MHKOS_KEIMENOY ; cx
lea di,keimeno; mov bx,seg keimeno ; .EXE ; mov es,bx
cld ; DFloop_again : ; scasb ;
je nai ; loop loop_again ;
LEA DX,mhnhma_noMOV AH,9INT 21h
Jmp short telosnai:
LEA DX, _yesMOV AH,9INT 21h
telos:INT 20HArxh endp
.DATA ; EISAGVGH DB "PRESS A KEY PLEASE $"
KEIMENO db "SEARCH OF A CHARACTER"MHKOS_KEIMENOY DW $ - KEIMENO
-
5/24/2018 Assembly [ ]
45/130
45
MHNHMA_NO db 10,13," THE CHARACTER THAT YOU HAVE SELECTEDDOES NOT EXIST",10,13,"$"_YES db 10,13,"YES THE CHARACTER THAT YOU HAVESELECTED REALLY EXIST IN THE SET",10,13,"$"
End arxh
4.3.2 CMPS / CMPSB / CMPSW
. . /DS:[SI} /
ES:[DI]. /ES:[DI] /DS:[SI]. DI, SIDF.
4.4
. : REP , REPE, REPZ, REPNE, REPNZ. , .
REP
CX. (SI, DI) CX1. :
mov cx,megethos__se__bytebrogxos__metaforas :
movsb ; BYTEloop brogxos_metaforas ;
:
mov cx,megethos__se__byte
REP movsb ; BYTE
CX= 0 .
CX ZF. .
REPEREPZCX=0 ( ). REPNEREPNZCX=0 ( ). :
MOV CX, MHKOS__KEIMENOY ; cx
-
5/24/2018 Assembly [ ]
46/130
46
loop__again: ; scasb ; je nai; loop loop__again;
:
MOV CX, MHKOS__KEIMENOY; cxRepnz scasb ;
5 XLAT
XLAT:
XLAT
. byte AL , . BX . AL . AL /[AL + BX] ( DS). : . ASCII
ascii 737.
11:
DOSSEG;DGROUP group @data,@code.MODEL TINY,c;.COM
.CODEorg 100h; 256 .com
arxh proclea dx ,messagemov ah,09int 21h
AGAIN:mov ah,08; int 21h ; DOSCMP AL,27 ; ESCJE TELOS ; ESCcmp al,7fh
ja printLEA BX,TRANS_PINAKAS ; BX
-
5/24/2018 Assembly [ ]
47/130
47
XLAT ; AL [a1] print:
MOV DL,AL ; MOV AH,2; INT 21h ; DOS
JMP SHORT AGAIN;
telos:INT 20H; DOS .com Arxh endp
.DATA; ASCII 127TRANS_PINAKAS label byte
db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah,0bh,0ch,0dh,0eh,0fhdb 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fhDB 20h,21h,22h,23h,24h,25h,26h,27h,28h,29h,2ah,2bh,2ch,2dh,2eh,2fh
DB 30h,31h,32h,33h,34h,35h,36h,37h,38h,39h,3ah,3bh,3ch,3dh,3eh,3fhDB 40h,128,129,150,131,132,148,130,134,136,141,137,138,139,140,142DB 143,51h,144,145,146,135,151,145,149,147,133,5bh,5ch,5dh,5eh,5fhDB 60h,152,153,175,155,156,173,154,158,160,165,161,162,163,164,166DB 167,71h,168,169,171,159,224,170,174,172,157,7bh,7ch,7dh,7eh,7fh
MESSAGE DB "PRESS ANY KEY TO TRANSLATE IT IN GREEKLETTER",10,13, "PRESS ESC FOR EXIT",10,13,"$"end arxh
5
1.
. (subroutines) .
PASCAL (Function , Procedures). . . , , .
.
-
5/24/2018 Assembly [ ]
48/130
48
, . .
2. (PROCEDURES)
(procedure) . :
ASCII.
1. .2. 1.3. 4. 2.5. .6. .
12:
code_seg segmentassume cs:code_seg,ds:data_segkyrioproc proc far
xor ax,ax; axpush ds ; PSPpush ax ; , DOS.mov dx,data_segmov ds,dx ; DSlea dx,mhnhma1call emfanish_mhnhmacall input_hex
mov cl,4 ; alshl al,cl; 16 mov ascii_timh,al; call input_hex; al
add ascii_timh,al; mov dl,ascii_timhcall emfan_hexret ; DOS
kyrioproc endp
; input_hex proc near
-
5/24/2018 Assembly [ ]
49/130
49
again:call input_char ; cmp al,'0' ;
jb again ; cmp al,'9' ; 0 9
ja deytero_elegxomov dl,al ; call emfanish_char ; sub al,'0' ; ret ;
deytero_elegxo:cmp al,'A' ;
jb again ; A Fcmp al,'F'
ja trito_elegxomov dl,al
call emfanish_charadd al,10sub al,'A'ret
trito_elegxo:cmp al,'a' ; a f
jb againcmp al,'f'
ja againmov dl,al
call emfanish_charadd al,10sub al,'a'ret
input_hex endp; ASCII ; emfan_hex proc near
call allagh_grammhslea dx,mhnhma2call emfanish_mhnhma
mov dl,ascii_timhcall emfanish_charret
emfan_hex endp
; allagh_grammhs proc near
lea dx,nea_grammhcall emfanish_mhnhmaret
allagh_grammhs endp
;emfanish_mhnhma proc near
-
5/24/2018 Assembly [ ]
50/130
50
mov ah,09hint 21hret
emfanish_mhnhma endp
;emfanish_char proc near
mov ah,02hint 21hret
emfanish_char endp
; input_char proc near
mov ah,08hint 21h
retinput_char endpcode_seg ends
; data_seg segment
mhnhma1 db "Please enter a two digits hexadecimal number",10,13,"$"nea_grammh db 10,13,"$"mhnhma2 db 10,13,"The character is : $"
ascii_timh db ?data_seg endssoros segment para stack
db 256 dup (0)soros ends
end kyrioproc
:
1.
.
2. , PROC ENDP. / ;.
3. CALL.CALL emfanish__char
4. RET.
-
5/24/2018 Assembly [ ]
51/130
51
5. RET.6. .7. NEARFAR.8. RET.
2.CALL RET.
2.1
CALLRET, :
CALL / CALL, /CALL.
RET, /CALL.
2.2 CALL
CALL, . RET. CALL NEARCAL L (near ptr call),FARCALL (far ptr call).
IPSP 2. /.
CS SP2 IPSP. / CALL. FAR PTRNEAR FAR..
CALL FAR PTRemfanish__char.
-
5/24/2018 Assembly [ ]
52/130
52
, / . WORD PTR DWORD PTR. ..
.CALL WORD PTR function__ptr
Function__ptr dw input__char
call / , pointer function__ptr. /input__char input__char.
2.3 RET
RET. RET NEARRET (RETN), FARRET(RETF).
RET IP SP 2. CALL.
RET
IP SP 2 CSSP2.CALLRET .
2.4 .
DOS 256 bytes
(program segment prefix) PSP. .COM 256 bytes bytes . .EXE . / ENVIROMENT (PATH, .), .. . :
-
5/24/2018 Assembly [ ]
53/130
53
00-01 bytes 0CD20H
int 20h DOS
02-03 . .
04 05
CL.
0AH-ODH0EH-11H12H-15H16H-2BH2CH-2DH
CP/Mint 22hint 23hint 24h / ENVIRONMENT. Environment SET
DOS :
= 2EH-5BH 5Ch-6BH FCB 16CH-7BH FCB 2
7CH-7FH 80H bytes
.
81H-0FFH .
, .
-
5/24/2018 Assembly [ ]
54/130
54
13:
ASSUME CS:CODE__SEGMAIN proc far
PUSH DS; DOS,
XOR AX,AX; (SEGMENT) PSPPUSH AX; PSPMOV BX, 80H; BX XOR CX,CX; CXMOV Cl,ES:[BX];CXJCXZ TELOS;
AGAIN:INC BX; MOV DL,ES:[BX]; dlMOV AH,2; INT 21H; DOS
LOOP AGAINTELOS: RET; DOS INT 20h PSPMAIN endpCODE__SEG ENDS
SOROS SEGMENT STACKDB 100H DUP (0)
SOROS ENDSEND MAIN
2.5 DOS RET.
DOSRET. ,
byte PSP:INT 20h , DOS. DSES/ PSP , / PSP DS:0000./PUSHRETFPSPINT 20hDOS. :
..push ds ; PSPxor ax,ax ; ax
push ax ; , DOS...; ..ret ; PSP
2.6
-
5/24/2018 Assembly [ ]
55/130
55
ASCII 0.(null terminated
stringC)
14:
code_seg segmentassume cs:code_seg,ds:data_segkyrioproc proc far
xor ax,ax; axpush ds ; PSPpush ax ; ,
DOS.mov dx,data_segmov ds,dx ; DSlea bx,mhnhma
call emfan_mhnhmaret ; DOS
kyrioproc endp
;************************************;* *;* *;* ***********;* /BX *
;*************************************emfan_mhnhma proc nearagain:
mov dl,[bx] ; /bx dlinc bx ; /cmp dl,0 ; jz epistrofh ; call emfanish_char ; jmp short again ;
epistrofh :ret
emfan_mhnhma endp
;************************************;* *;* *;* ********** *;* ASCII DL *;************************************emfanish_char proc near
mov ah,02hint 21hret
emfanish_char endp
-
5/24/2018 Assembly [ ]
56/130
56
code_seg ends
; data_seg segment
mhnhma db "END OF PROGRAMM",10,13,0nea_grammh db 10,13,0data_seg ends
soros segment para stackdb 256 dup (0)
soros endsend kyrioproc
emfan__mhnhma / mhnhma. / emfan__mhnhma BX. emfanish__charASCII DL, DL. , .
:
- -
ASSEMBLY. . . DOS BIOS
(10).
. (C, PASCAL), . 3. :
PUSH , BP.
( CALL)
-
5/24/2018 Assembly [ ]
57/130
57
. , :
15:
code_seg segmentassume cs:code_seg,ds:data_segkyrioproc proc far
xor ax,ax; axpush ds ; PSPpush ax ; , DOSmov dx,data_segmov ds,dx ; DSlea ax,mhnhma; /mhnhma
push ax ; call near ptr emfan_mhnhma
add sp,2; push axret ; DOS
kyrioproc endp
; emfan_mhnhma proc nearpush bpmov bp,spmov bx,[bp+4]; /string bx; +4 near call 4 SP
;/2 bp; 2 /callagain:
mov dl,[bx]inc bxcmp dl,10
jz epistrofhpush dx; ASCII call emfanish__charadd sp,2; push ax
jmp short again
epistrofh:pop bpret
emfan_mhnhma endp
; emfanish__char proc nearpush bpmov bp,spmov dx,[bp+4]; ASCII DX
; DL 2
; DOSmov ah,02h
-
5/24/2018 Assembly [ ]
58/130
58
int 21hpop bpret
emfanish__char endp
code_seg ends
; data_seg segment
mhnhma db "END OF PROGRAMM",10,13,0
data_seg ends
soros segment para stackdb 256 dup (0)
soros endsend kyrioproc
, BP.
2.7
. :
- BYTE AL.
- WORD AX.
- DWORD () DX:AL.
2.8
. assembly , . , . :
(
-
5/24/2018 Assembly [ ]
59/130
59
PUSH), ( RET) ( POP)
:
,************************************,* *
,* *
,* ********** *
,* /BX *
,************************************emfan__mhnhma proc nearagain:push dx; dxmov dl:[bx]; / bx dl
inc bx ; /cmp dl,0 ; jz epistrofh ; call emfanish__char ; jmp short again ; epistrofh :pop dx; dx ret
emfan__mhnhma endp
-
5/24/2018 Assembly [ ]
60/130
60
6
DEBUG
1
, , , , . .
. bugs .
DEBUG. , , , . .COM .
DEBUG . CNTR C. CNTR S
. CNTR C.
2
2.1
DEBUGdebug. ..
C: >DEBUGC: >DEBUG ASKHSH.EXE
(prompt) debug -. debug
-Q(Quit).
debug
. DOS. :
-
5/24/2018 Assembly [ ]
61/130
61
LEA DX, MHNHMAMOV AH,9INT 21HINT 20
MHNHMA DB $
2.2 .
debug -A100(Assembly) assembly . debug assembly . / 100H / .COM.
Debug segment 247F, 100. , . Debug Return:
-a100247F:0100 lea dx,[200]247F:0104 mov ah,09247F:106 int 21247F:018 int 20247F:010A
-A Return .
2.3
, 200/ . :
-f200 L9 Geia soy$
-F (Fill)L 9 . .
2.4
-G(Go), :
-g
-
5/24/2018 Assembly [ ]
62/130
62
Geia soyProgram terminated normally-2.5
/(segment) . / 247F:100/
247F0+ 100--------248F0
2.6 Unassembly
assembly . -U .
-U 100 108
247F:0100 8D160002 LEA DX,[0200]247F:0104 B409 MOV AH,09247F:0106 CD21 INT 21
247F:0108 CD20 INT 20
2.7 ,
Debug .com. .com:
- -N(Name).- BX:CX
-R(Register).
- -W(Write). 110H bytes. MHNHMA.COM Debug :
-N MHNHMA.COM
-RBXBX 0000
:-RCX
-
5/24/2018 Assembly [ ]
63/130
63
CX 0000:210-WWriting 00210 bytes-
-R(register). -R , , . . -R
-RAX=0900 BX=0000 CX=0000 DX=0200 SP=FFEE BP=0000 SI=0000 DI=0000DS=247B ES=247B SS=247B CS=247B IP=0108 NV UP EI PL NZ NA PONC247F:0108 CD20
2.7 .
-D (Dump) , 128, 8 16 . :
-d247F:0200 47 65 69 61 20 73 6F 75-24 00 00 00 00 00 00 00 Geia sou$.247F:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247F:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .
247F:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247F:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247F:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247F:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247F:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .
/segment:offsetbytes.
Debug bytes ASCII , .
-D DS. 3 segments -D/. .
-D SS:0100
2.8 .
-E(Enter). byte .
. spacebar. Return
-
5/24/2018 Assembly [ ]
64/130
64
. .. AAAAAAAA.
-e 200247F:0200 47.41 65.41 61.41 20.41 73.41 6F.41 75.41
247F:0208 24.
41h ASCII A. //. -d.
-d200247:0200 4141 41 41 41 41 41 41-24 00 00 00 00 00 00 00 $.247:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .247:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .
-g=100AAAAAAAAProgram terminated normally-
2.9
Debug, ASCII ? Z. :
1. DL ASCII ? (3F )
2. DL 2DOS.
3. 1 DL.
4. (DL) ASCII Z(5B ) 2 4.
5. DOS.
Debug:
A>debug
-a247B:0100 mov dl,3F247B:0102 MOV AH,2
-
5/24/2018 Assembly [ ]
65/130
65
247B:0104 INT 21247B:0106 INT DL247B:0108 CMP DL,5B247B:010B JBE 102247B:010D INT 20
247B:010F
:
-G?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[Program terminated normally
ASKHSH1.COM Debug:
-N ASKHSH1.COM
-RBXBX 0000:-RCXCX 0000:f-WWriting 0000F bytes
-Q
Debug-L (Load):
A>debug-n askhsh1.com-l-u 100 10D2490:0100 B23F MOV DL,3F
2490:0102 B402 MOV AH,022490:0104 CD21 INT 212490:0106 FEC2 INC DL2490:0108 80FA5A CMP DL,5A2490:010B 76F5 JBE 01022490:010D CD20 INT 20
-T(Trace). :
-t
-
5/24/2018 Assembly [ ]
66/130
66
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=010B NV UP EI NG NZ AC PO CY2490:010B 76F5 JBE 0102
-t
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0102 NV UP EI NG NZ AC PO CY2490:0102 B402 MOV AH,02-t
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0104 NV UP EI NG NZ AC PO CY2490:0104 CD21 INT 21-p?AX=0240 BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0106 NV UP EI NG NZ AC PO CY
2490:0106 FEC2 INC DL-p
AX=0240 BX=0000 CX=000F DX=0041 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0108 NV UP EI NG NZ AC PO CY2490:0108 80FA5A CMP DL,5A-t
AX=0240 BX=0000 CX=000F DX=003F SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0102 NV UP EI NG NZ AC PO CY2490:0102 B402 MOV AH,02-p
AX=0240 BX=0000 CX=000F DX=003F SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0104 NV UP EI NG NZ AC PO CY2490:0104 CD21 INT 21-p?AX=023F BX=0000 CX=000F DX=003F SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0106 NV UP EI NG NZ AC PO CY2490:0106 FEC2 INC DL-p
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=0108 NV UP EI NG NZ AC PO CY2490:0108 80FA5A CMP DL,5A
-T
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=010B NV UP EI NG NZ AC PO CY2490:010B 76F5 JBE 0102
(CALLINT) -T -P (Proceed) CALLINT.
-
5/24/2018 Assembly [ ]
67/130
67
, , . :
:
CMP DL,5A
SF ( ) : (DL) 5A.
2.10 .
. (break points). -G:
-G=
..
-g=100 10d?@ABCDEFGHIJKLMNOPQRSTUVWXYZAX=025A BX=0000 CX=000F DX=005B SP=FFFE BP=0000 SI=0000 DI=0000DS=2490 ES=2490 SS=2490 CS=2490 IP=010D NV UP EI NG NZ AC PO CY2490:010D CD20 INT 20
/ 100 010D /.
/010D
(DL) >5A
CFSF0, ZF=1.
2.11Debug.EXE
.COM .EXE. .EXE .
.
-
5/24/2018 Assembly [ ]
68/130
68
MHNHMA.EXE , .
A>debug-n mhnhma.exe
-l-u24A0:0000 33C0 XOR AX,AX24A0:0002 1E PUSH DS24A0:0003 50 PUSH AX24A0:0004 BAA324 MOV DX,24A324A0:0007 90 NOP24A0:0008 8EDA MOV DS,DX24A0:000A BB0000 MOV BX,000024A0:000D E80100 CALL 001124A0:0010 CB RETF
24A0:0011 8A17 MOV DL,[BX]24A0:0013 43 INC BX24A0:0014 80FA00 CMP DL,0024A0:0017 7405 JZ 001E24A0:0019 E80300 CALL 001F24A0:001C EBF3 JMP 001124A0:001E C3 RET24A0:001F B402 MOV AH.0224A0:0021 CD21 INT 2124A0:0023 RET
0000. :
MOV DX,24A3MOV DS,DXMOV BX,0000
/24A3:0000, :
-d 24a3:000024A3:0000 54 45 4C 4F 53 20 50 52-4F 47 52 41 4D 4D 41 54 TELOS PROGRAMMAT24A3:0010 4F 53 0A 0D 00 0A 0D 00-00 00 00 00 00 00 00 00 OS.24A3:0020 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .24A3:0030 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .24A3:0040 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .24A3:0050 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .24A3:0060 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .24A3:0070 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .
.COM ..... :
-gTELOS PROGRAMMATOS
-
5/24/2018 Assembly [ ]
69/130
69
Program terminated normally-
CALLRET . .-T/:AX=0000 BX=0000 CX=0150 DX=24A3 SP=00FC BP=0000 SI=0000 DI=0000DS=24A3 ES=2490 SS=24A5 CS=24A0 IP=000D NV UP EI NG NZ AC PO CY 24A0:000D E80100 CALL 0011-t
AX=0000 BX=0000 CX=0150 DX=24A3 SP=00FA BP=0000 SI=0000 DI=0000DS=24A3 ES=2490 SS=24A5 CS=24A0 IP=0011 NV UP EI NG NZ AC PO CY24A0:0011 8A17 MOV DL,[BX] DS:0000=54
SPCALL. RET, SP...
AX=0254 BX=0001 CX=0150 DX=2454 SP=00F8 BP=0000 SI=0000 DI=0000DS=24CB ES=24B8 SS=24CD CS=24C8 IP=0023 NV UP EI NG NZ AC PO CY24C8 :0023 C3 RET-t
AX=0254 BX=0001 CX=0150 DX=2454 SP=00FA BP=0000 SI=0000 DI=0000
DS=24CB ES=24B8 SS=24CD CS=24C8 IP=001C NV UP EI NG NZ AC PO CY24C8 :001C EBF3 JMP 0011
3 DEBUG.setDEBUG: A [address] Assemble
C range address Compare
D [range] Dump
E address [list] Enter
F range list Fill
G [=address [address]..] Go
H value value Hex
I value Input
L [address [drive:record record] Load
-
5/24/2018 Assembly [ ]
70/130
70
M range address Move
N filename [filename] Name
O value byte Output
Q Quit
R [register-name] Register
S range list Search
T [=address] [value] Trace
U [range] Unassemble
W [address [drive:record record ]] Write
Debug . :
drive:Drive 0=A, 1=B, 2=C.
byte:.
record:record sector.value:.
address:/8086 /offset 8086. offset / segment CS DS .
range://L value.
Debug
-A (Assemble)
-C (Compare) / address . .
-D (Dump)
-E (Enter)
-
5/24/2018 Assembly [ ]
71/130
71
bytes . byte byte spacebar.
-F (Fill).
.
-G (Go), , ,
-H (Hex)
-I (Input)byte
-L (Load)
-M (Move)/address.
-N (Name). Load Write
-O (Output)
byte
-P (Proceed)Call,Int.
-Q (Quit)Debug
-R (Register)
-S (Search)
-T (Trace)/.
-U (Unassemble).
-W (Write)BX:CX .
-
5/24/2018 Assembly [ ]
72/130
72
7
1
1.1.. :
-
- . 8086 . 6.1 . / :
1. 2. 3.
8086ROMRAM . 220, /00000h FFFFFh. // / ( I/O) . / I/O (ports) 216 = 65.356 (,, , , ..)
6809 68000
Motorola, /. //:
- / /. /.
- / / / / . /.
, / /, (control
-
5/24/2018 Assembly [ ]
73/130
73
bus) /.
1.2/ (= ports)., ./.
/ / , //(Address bus) , A0 A15, ///. 16 /216= 64K //.
.
8086. / . :
1. (Data ports).2. (Control ports).3. (Status ports).
8259, 8253, 8255 .. , /.
2 2.1 8086 . /
INOUT.
2.2IN.:
IN ,
AL AX byte
. :
-
5/24/2018 Assembly [ ]
74/130
74
/. /byte(256) IN. .
INal,60h ; byte
/. / 255 , DX , / , IN ..
mov dx,3f4h ; byte in al,dx ; FCD 8272A
2.3OUT.:
OUT ,
, IN. :
mov dx,3d4hmov al,0fhout dx,al ; 15 /3b4h.
2.48086
8086 16bits. 51. :
byte ( IN OUT AL) / byte (D0 - D7) byte (D8 D15).
(IN OUT AX), , /.
3 3.1 . ( ) .,
.
-
5/24/2018 Assembly [ ]
75/130
75
, . ( OUTKIN) byte 0 bit . 7 bits
. ,
bits.
bits byte AND OR . bits AND 1 bitsOR .
:
in al,OUTKIN ; or al,00000001b ; 1 0 bitout OUTKIN,al ;
:
in al,OUTKIN ; and al,11111110b ; 0 0 bitout OUTKIN,al ;
3.2
V
t
V
t
, . :
in al,OUTKIN ; or al,00000001b ; 1 0 bit
-
5/24/2018 Assembly [ ]
76/130
76
out OUTKIN,al ; ;.; ; .
in al,OUTKIN ; and al,11111110b ; 0 0 bitout OUTKIN,al ; ;.; ; .; ;
. ,
. ( LOOP CMP ) . . .
3.3 .
. .
3.4. 8255 Intel. dip , , 8253.
8255 byte AC/60H-62H. , (/61H) .
bit0 1 . bit0 2 . bit 1 . . .
1. 61h xxxxxx10b
-
5/24/2018 Assembly [ ]
77/130
77
2. 3. 61h xxxxxx00b4. 5. 1 4
XXXXXXbits 61h , .
(1, 0) . ( 2 4). , LOOP CX (.3 .4.4). .com :
16:
code_seg segmentassume cs:code_seg
org 100hhxos proc near
port_b equ 61h ; oliko_loop equ 50000 ; ariumos_epanalalhcevn equ 1000;
in al, port_b ; and al,11111110b ; mov cx,oliko_loop; CX
again:push cx ;
; or al,00000010b ; 1 1 bitout port_b,al ; mov cx,ariumos_epanalalhcevn;
kauysterhsh_1:loop kauysterhsh_1; and al,11111100b ; 0 1 bit
out port_b,al ; mov cx,ariumos_epanalalhcevn;
kauysterhsh_2:loop kauysterhsh_2;
pop cx ; ;
loop againint 20h ; DOS .COM
hxos endpcode_seg ends
end hxos
-
5/24/2018 Assembly [ ]
78/130
78
3.58253 8253 8086. 8253 40h42h. ,
bytes byte . 16 bits. . . . .
0 . 18.2 .
, / 0046CH. bytes byte . .
1 . DMA(Direct Memory
Access) DMA RAM.
2 . . . .0 1 bit 61H8255 ON (1).
8253 30 2 .
8253 43H.
byte 8253 , . bits :
bit 0 0 , 1 BCD3-1 (0-5)5-4
00 01 /byte10 /byte11 /byte
byte
7-6 00 01 10
-
5/24/2018 Assembly [ ]
79/130
79
8253
1. byte 43h, bits , , ,
2. 1 bit 0 bit1 61h.
3. 64k 42h,byte byte. 1.19 .
:
17:
code_seg segmentassume cs:code_seg,ds:code_seg
org 100hhxos proc near
port_b equ 61h ; command_rec equ 43h; channel_2 equ 42h; 2
in al, port_b;or al,00000011b ; 1 out port_b,al ; bits 61h 8255mov al,10110110b; bits
; 10 2 - 2 byte - 3 - out command_rec,al; mov ax,2000 ; out channel_2,al; bytexchg al,ah ; byteout channel_2,al ; mov ah,8 ; int 21h ; (8 DOS)
in al,port_b ; 2 bits and al,11111100b ; 61h out port_b,al ; bit
; int 20h ; DOS
hxos endpcode_seg ends
end hxos
:
-
5/24/2018 Assembly [ ]
80/130
80
1. / bit.
2. .
8
1
1.1.
. (interrupts). , (.. ) . :
1. .2. 3.
CPU.
4. / , , , / ( CS IP) (Interrupt Service Routine ISR).
5. IP , CS
-
5/24/2018 Assembly [ ]
81/130
81
(SR). .
. (status register) . / .
, (Interrupt Handler), , , .
. IRET(Interrupt RETurn) CS ,IPSR.
1.2.8086 256 . 0 255.
/(Interrupt Vector) . . 4 bytes (dword), / ( ).
1024 bytes (/0000:0000h /0000:03FFh), 256 (dword =4 bytes), (Interrupt Vector Table). 10 11 /:
10 * 4 = 40D = 0000:0028h.
/lowhigh , () byte (.1 5).
-D debug :
A>debug-d0000:0000
0000:0000 FB 91 19 00 F4 04 70 00-16 00 88 0D F4 06 70 00 pp.0000:0010 F4 06 70 00 54 FF 00 F0-6F EF 00 F0 6F EF 00 F0 p.To..o..0000:0020 EC 03 39 0F 3B 06 39 0F-6F EF 00 F0 6F EF 00 F0 ..9..9.oo..
-
5/24/2018 Assembly [ ]
82/130
82
0000:0030 6F EF 00 F0 6F EF 00 F0-B7 00 88 0D F4 06 70 00 o..op.0000:0040 65 F0 00 F0 4D F8 00 F0-41 F8 00 F0 74 07 70 00 e..M..At.p.0000:0050 39 E7 00 F0 4A 08 70 00-2E E8 00 F0 D2 EF 00 F0 9..J.p......0000:0060 C8 E3 00 F0 FB 07 70 00-6E FE 00 F0 EE 06 70 00 .p.n...p.0000:0070 53 FF 00 F0 A4 F0 00 F0-22 05 00 00 00 00 00 00 2.*..-d
0000:0080 BF 40 19 00 EB 40 19 00-4F 03 DF 1E 8A 03 DF 1E .@[email protected]:0090 17 03 DF 1E D8 42 19 00-5F 43 19 00 64 A1 19 00 BCd..0000:00A0 29 04 39 0F 62 07 70 00-C5 40 19 00 C5 40 19 00 ).9.b.p..@[email protected]:00B0 C5 40 19 00 C5 40 19 00-40 01 FD 0D A0 01 FE 0D .@@[email protected]:00C0 EA C6 40 19 00 EF 00 F0-C5 40 19 00 C5 40 19 00 .@.@[email protected]:00D0 C5 40 19 00 C5 40 19 00-C5 40 19 00 C5 40 19 00 .@..@..@[email protected]:00E0 C5 40 19 00 C5 40 19 00-C5 40 19 00 C5 40 19 00 .@..@..@[email protected]:00F0 C5 40 19 00 C5 40 19 00-C5 40 19 00 C5 40 19 00 .@..@..@[email protected]:0100 59 EC 00 F0 41 E4 00 F0-6F EF 00 F0 6F EF 00 F0 Y..A..o..o..0000:0110 6F EF 00 F0 6F EF 00 F0-01 E4 00 F0 6F EF 00 F0 o..o.o..0000:0120 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..0000:0130 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..
0000:0140 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..0000:0150 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..0000:0160 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..0000:0170 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..-d0000:0180 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0190 01 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:01A0 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..0000:01B0 6F EF 00 F0 6F EF 00 F0-6F EF 00 F0 6F EF 00 F0 o..o..o..o..0000:01C0 52 00 88 0D F3 EC 00 F0-6F EF 00 F0 6F EF 00 F0 R..o..o..0000:01D0 6F EF 00 F0 70 F0 00 F0-17 01 88 0D 6F EF 00 F0 o..p.o..0000:01E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:01F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............
-d0000:0200 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0210 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0220 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0230 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0240 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0250 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0260 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0270 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............-d0000:0280 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0290 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:02A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............
0000:02B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:02C0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:02D0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:02E0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:02F0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............-d0000:0300 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0310 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0320 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0330 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0340 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0350 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0360 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0370 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............-d
-
5/24/2018 Assembly [ ]
83/130
83
0000:0380 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:0390 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:03A0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ............0000:03B0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 DC 03 ............0000:03C0 40 00 E0 03 40 00 42 42-00 CC F4 C9 00 F0 6D EF @[email protected]:03D0 00 F0 86 00 30 80 39 ED-00 07 E2 03 E2 03 00 F0 ....0.9......
0000:03E0 3A A4 27 00 01 00 00 7C-01 00 00 00 00 00 00 00 ..`.|.0000:03F0 00 00 03 00 01 00 00 7C-95 8D 12 8D 00 F0 46 02 .|.F.
/ 0 1900:91FB 1 7000:06F4 . . .
/:
1. . (.8)1. .2. (IF=0)3. (TF=0)4. CS, IP 5. IP /* 4
CS / * 4 + 26.
/CS:IP.
2
2.1
, /.
.
2.2 .
(, ,COM1, ..) 8259 /INTR. IF. IF1 . IF0 .
CLI0 IF. IF CLI STI , /. (maskable). INTA (INTerrupt Acknowledge=
), .
-
5/24/2018 Assembly [ ]
84/130
84
STI1 IF.
/:
1. . (.8)1. .2. (IF=0)3. (TF=0)4. CS, IP5. IP/* 4
CS / * 4 + 26.
/CS:IP.
:5 8 9 0B COM20C COM10D 0F
2.3
NMI ,, .. /2.
2.4 .
. .
2.5
INT n, n . 21H DOS. . BIOS. :
INT N
, , 3 :
-
5/24/2018 Assembly [ ]
85/130
85
CLI; PUSHF; CALL DWORD PTR 4 * N; /;/4 * N
2.5 divide by zero0.
DIVIDIV.
2.6 single step1.
TF1, .( Tracedebug)
2.7 breakpoint3.
. ( Go Debug). ,Byte0CCH 8086 INT 3. 3
2.8 overflow4.
INTO OF(Overflow flag)1. .
8086.
8086-----------------------------------------------------------
-----------------------------------------------------------00H 01H 02H 03H 04H (overflow)05H BIOS 08H , 09H 0BH COM20CH COM1
0DH XT / AT LPT20EH
-
5/24/2018 Assembly [ ]
86/130
86
0FH LPT1 10H BIOS11H 12H BIOS13H BIOS
14H BIOS15H BIOS16H BIOS17H BIOS18H ROM-BASIC19H 1AH BIOS1BH CNTRL-BREAK 1CH 08H ()1DH /1EH /
1FH /20H DOS21H DOS22H /23H CNTR-BREAK DOS24H DOS25H DOS26H DOS27H DOS
28H DOS (idle)29H DOS 2AH MS- 2EH (Shell) DOS2FH DOS
(spooler DOS , print)33H 40H , 41H 42H EGA BIOS43H EGA
44H EGA4AH 70H 5CH NetBIOS67H EMS70H AT75H
3 .
3.1
-
5/24/2018 Assembly [ ]
87/130
87
. BIOS .
. INT nn .
, . . TSR(Terminate Stay Resident) . (calculator), ...
(9) (8). 18. 2 BIOS__/46C.
TSR:
- .
- .
3.2
:
1. , () 1 dword (4 bytes). , .
Call dword
35H DOS /, () AL , ES:BX. /.
AL
-
5/24/2018 Assembly [ ]
88/130
88
. .
2. , .
. , (. ). , .
3. 25HDOS. AL, DS:DX/.
AL
-
5/24/2018 Assembly [ ]
89/130
89
ISR , DOS, DOS (Re-entrant).
DOS, DOS.
.
5. .
. . . 4000 bytes .
VGA/ 0B800:0000H, . byte . , ... 24 79 . :
= (* 80 + ) * 2
0 (0) (0) .
MNHMH
5
(; Print screen) Print Screen; MAIN__INTER
-
5/24/2018 Assembly [ ]
90/130
90
; . BIOS (ROM) ; (segment) 0F000h
; :
; ) (MAIN PROCEDURE)
; ) 5H;; ; 5; (attributes); (VIDEO MEMORY) ; 0B8000 H (); 18:
TITLE INTPRINTSCR ; PAGE 65,80 ;
CODE__SEG SEGMENT PUBLICassume cs:CODE__SEG, SS:SOROS,ds:data__segMAIN PROC FAR; 5 BIOS
XOR AX,AX ; AXMOV ES,AX ; ES
MOV AX,WORD PTR ES:[22] ; AX; (SEGMENT) ; 5 (5 * 4 + 2 = 22)
CMP AX,0F000H ; ; ; RAM ( ; /
-
5/24/2018 Assembly [ ]
91/130
91
MOV DX,OFFSET CODE__SEG:MAIN__INTER;DX; MOV AL,5 ; AL No MOV AH,25H ; 25HINT 21H ; DOS
; 3 DOS ; ; 5h. 31H DOS
MOV DX,100H ; ; (1 16 BYTES)MOV AH,31H ; DOS INT 21H ;
EXV: PUSH DS ; DOSXOR AX,AX ; INT 20HPUSH AX ; PSP (
RETF ; )MAIN ENDP
; 5HMAIN__INTER PROC FARpush AX; PUSH BX; PUSH CXPUSH DXPUSH DS
PUSH ESCLI; MOV AX,DATA__SEGMOV DS,AX; DSMOV AX,SS
; MOV OLD__SS,AXMOV OLD__SP,SP
MOV AX,new__stack
; ;
MOV SS,AX; DS
mov SP,100hPUSHF; CALL DWORD PTR OLF__VECTOR__5;
; 5STI ;
CALL REVERSE_SCR; ;
-
5/24/2018 Assembly [ ]
92/130
92
;
MOV SP,OLD__SPMOV AX,OLD__SSMOV SS,AX
POP ES; POP DS; POP DX; POP CXPOP BXPOP AXIRET ; ; ; ;
; ()
MAIN__INTER ENDP
REVERSE__SCR PROC NEARSTI;
; ; ; ; MOV BX,0B000H
; ; VGA ;
MOV BX,OB8OOHMOV ES,BXMOV BX,0; BX MOV CX,2000 ; ;80 25 = 2000
AGAIN:INC BX; 1
; MOV AL,BYTE PTR ES:[BX] ; CMP AL,127 ; JA A ; AOR AL,10000000B ; JMP B
A: AND AL,01111111B ; B: MOV BYTE PTR ES:[BX],AL ;
; INC BX; ()LOOP AGAIN ;
; AGAIN 2000 RET ;
-
5/24/2018 Assembly [ ]
93/130
93
REVERSE__SCR ENDP
CODE__SEG ENDS
DATA__SEG SEGMENTOLD__VECTOR__5 DD 0OLD__SS DW 0OLD__SP DW 0; NEW__STACK DB 100H DUP (0)
DATA__SEG ENDS
NEW__STACK segmentDb 100 dup (0)
New__stack ends
SOROS SEGMENT PARA STACKDB 256 DUP (0)
SOROS ENDSEND MAIN
9
ASSEMBLER
1MACRO
macro:
, . Assembler , . macro.
macro
. macro (), MACRO.ENDMmacro. macro. macro macro . : macro pusha (pushall) ,
popa (popall) clrscr, :
PUSHALL MACROPUSH AX
PUSH BXPUSH CXPUSH DX
-
5/24/2018 Assembly [ ]
94/130
94
PUSH BPPUSH SIPUSH DIENDM
POPALL MACROPOP DIPOP SIPOP BPPOP DXPOP CXPOP BXPOP AXENDM
CLRSCR MACRO
PUSHALLmov cx,0; mov dx,2479h; mov bh,7; normalmov ah,06; BIOSmov al,00; int 10h; BIOSPOPALLENDM
macro . macroMACRO. MACRO. macro . macro, , . macro .
MACRO:
GOTOXY MACRO X,Ymov ah,0fh
int 10h; bx mov dl,Y; mov dh,X; mov ah,02; BIOSint 10h ; BIOS
ENDM
MACRO 9 DOS
PRINT_DOS__STRING MACRO STRINGlea dx,string; /dx
mov ah,09; DOS int 21h ; DOS
-
5/24/2018 Assembly [ ]
95/130
95
ENDM
macro , : LOCAL
INPUT_DIGIT MACRO; macro LOCAL UP,TELOS ,MHDEN ; UP : ;
MOV AH,08; ENTER 0INT 21HCMP AL,13JE MHDENCMP AL,0JB UP; CMP AL,9JA UP;
MOV DL,AL ; MOV AH,02 ; INT 21HJMP TELOS
MHDEN:XOR AL,AL; al
TELOS:ENDM
,
macro . , call ,macro, macro. call , macro .
2 INCLUDE
assembly . macro equ . INCLUDEmacro equ assembly . INCLUDEassembly . assembler include , , . macro LIB.MAC
:
-
5/24/2018 Assembly [ ]
96/130
96
19:
INCLUDE LIB.MAC; macro
;
SOROS SEGMENT PARA STACKDB 256 DUP (0)
SOROS ENDS
code_seg segmentassume cs:code_seg,DS:DATA_SEGMAIN proc farpush ds; DOS, xor ax,ax; (SEGMENT) PSP
push ax; PSP
mov ax,data_segmov ds,axCLRSCR; macro GOTOXY 5,10; macro 5,10PRINT_DOS_STRING MHNHMA; macro
again:INPUT_DIGITcmp al,0
jne again
ret; DOS INT 20h PSPMAIN endpcode_seg ENDS
DATA_SEG SEGMENT PUBLICMHNHMA DB "EISAGOGI AKERAIOY ARITMOY $"
DATA_SEG ENDSEND MAIN
, NUM
INCLUDE, include include , .
includemacro, equ, , segment ...assemblyinclude.
3.
3.1
-
5/24/2018 Assembly [ ]
97/130
97
assembler linker .
. . (Linker). , . .
. (modulus),
. EXTRN PUBLIC. . num1 num2. MODULE1.ASMMODULE2.ASM.
20:
module1.asmCode_seg segment public
assume cs:code_seg,ds:data_seg
extrn emfan_decimal:near,new_line :near,num2 :word ; /;
public nea_grammh ; ;
kyrioproc proc farxor ax,ax; ax
push ds ; /PSPpush ax ; , DOS.mov dx,data_segmov ds,dx ; DSmov dx,num1 ; dx call emfan_decimal; emfan__decimalcall new_line; mov dx,num2 ; call emfan_decimal; emfan_decimal
ret ; DOS
kyrioproc endp
-
5/24/2018 Assembly [ ]
98/130
98
code_seg ends
; data_seg segment public
num1 dw 12345nea_grammh db 10,13,'$'data_seg ends
soros segment para stackdb 256 dup (0)
soros ends
end kyrioproc
module2.asm
code_seg segment public
assume cs:code_seg,ds:data_seg
public emfan_decimal,new_line,num2 ; /; object; modules
extrn nea_grammh:byte; emfan_decimal proc near
mov ax,dx ; axmov si,10 ; sixor cx,cx ;
non_zero:xor dx,dx ; div si ; div dx:ax
push dx ; dx inc cx ; 1 or ax,ax ; 0
jne non_zero ; 10 next_digit: ;
pop dx ; add dl,'0' ; mov ah,2 ; ASCII int 21hloop next_digit ; ret
emfan_decimal endp
new_line proc nearmov dx, offset ds:nea_grammh; dx /mov ah,09; DOS
int 21h;ret
-
5/24/2018 Assembly [ ]
99/130
99
new_line endpcode_seg ends
; data_seg segment public
num2 dw 6789data_seg ends
end ;; data__seg segment public
num2 dw 6789data__seg ends
end ;
.
C>tasm module1
C>tasm module2
A>
tlink module1 module2
.
3.2 PUBLIC (Segments).
code__seg data__seg. SEGMENT
code__seg data__seg PUBLIC. . code__seg, ,
PUBLIC. code__seg module1module2 , . data__seg .
(STACK) , PUBLIC.
3.3 PUBLICEXTRN
-
5/24/2018 Assembly [ ]
100/130
100
/ . linker.
PUBLIC, /
PUBLIC.
Public emfan__decimal,new__line,num2
module2.asm, emfan__decimal,new__line num2 module1. PUBLIC PUBLIC.
EXTRN,
PUBLIC. EXTRN (label) : . ,:
FARNEAR
BYTEbyteWORDbyte
DWORDbyte
Extrn emfan_decimal;near,new_line:near,num2:wordmodule1 :
1. emfan_decimal,new_line ( module2.asm).
2. num2 2 byte, 0 64k.
emfan_decimal,new_line,num2publicmodule2.asm.
-
5/24/2018 Assembly [ ]
101/130
101
10
ROM-BIOS & DOS
1 ROM-BIOS
1.1 .
ROM-BIOS Read Only Memory BasicInput Output System ( ). . (, ..)
.
BIOS . 7 . BIOS . , (IN OUT). . BIOS
.
BIOS , BIOS RAM / 0400H 0500h. BIOS .
BIOS , . BIOS . BIOS // .. BIOS . BIOSDOS. INT n , n BIOS, . BIOS. BIOS .
BIOS /0F0000h 0FFFFFh.
-
5/24/2018 Assembly [ ]
102/130
102
2.2 .
Int 10H
AH=0hAL=
Int 10H
=1hCH=(0-4)CL=(0-4)
Int 10H
AH=2hBH=DH=DL=
Int 10H
AH=3hBH=
CH=(0-4)CL=(0-4)DH=DL=
Int 10H
AH=6hBH=
AL=,
0 CH=CL=DH=
DL=
Int 10H
AH=7hBH=
AL=,0
CH=CL=DH=
DL=
Int 10H
AH=8h
BH=
AH=
AL=Ascii
Int 10H
AH=9hBH=AL=Ascii BL= CX=
Int 10H
AH=0AhBH= AL=Ascii BL=CX=
Int 10H AH=0Ch
-
5/24/2018 Assembly [ ]
103/130
103
BH=AL=CX=DX=
Int 10H
AH=0DhBH=DX=CX=
AL=
Int 10H
AH=0EhBH= AL=Ascii BL=
Int 10H
AH=0Fh AH=AL=BH=
Int 10H
AH=013hAL=00 BL
01 BL
02
03
BH=BL=CX=bytesDH=DL=ES=/BP=/
2.3 .
Int 13H
AH=00hDL= 00h-7Fh 80H-0FF
CF=0 AH=0AH=
Int 13H
AH=01hDL=00h-7Fh
80H-0FF
AH=00 01 ..
-
5/24/2018 Assembly [ ]
104/130
104
Int 13H
AH=02hAL=(0-9)CH=*CL=DH=
DL=ES:BX=/
CF=0AH=0 AL= CF=1 AH=
Int 13H
AH=03hAL=(0-9)CH=*
CL=DH=DL=ES:BX=/
CF=0AH=0 AL= CF=1
AH=
10 . 8 CH. 78CL. 6 CL .
2.4
Int 16H
AH=0h AH=AL=Ascii
Int 16H
AH=01h ZF=0 AH=
AL=Ascii ZF=1
Int 16H
AH=02h AL=Bit 0 SHIFT Bit 1 SHIFT Bit 2 CTRLBit 3 ALT
Bit 4 SCROLLLOCK
-
5/24/2018 Assembly [ ]
105/130
105
Bit 5NUM LOCKBit 6 CAP LOCKBit 7INS
Int 16H
AH=05hCH=CL=Ascii
CF=0 AL=0 CF=1 AL=1
2.6
Int 17H
AH=00hAL=Ascii DX=00H LPT1
01H LPT202H LPT3
AH=
2.8 .
Int 11H
AX=Bit 0 1 Bit 1 1 Bits 2-3 RAM
00 16kb01 32kb10 48kb11 64kb4
Bits 4-5 01 40X25 02 80X25 03 8025
Bits 6-7
00 01 10 11
Bit 8 Bit2 9-11 Bit 12 1 Bit 13 1 modemBits 14-15
2. DOS
-
5/24/2018 Assembly [ ]
106/130
106
2.1
DOS (COMMAND.COM) (Utilities) .
DOS INT 21H. DOS , IO.SYS MSDOS.SYS.DOS , .SYS , CONFIG.SYS DEVICE=. :
- 1024 bytes /256 .
- 256 bytes BIOS- 512 bytes
DOS- DOS
DOS .- CONFIG.SYS- 640KB .
COMMAND.COM.,COMMAND.COM
- 384kb 640kb 960kb /.
- 64kb 960kb 1Mb ROM-BIOS.
DOS BIOS. DOS. . :
) (,
, , ).) ().) .)
FCB .) DOS) .) ,
...
-
5/24/2018 Assembly [ ]
107/130
107
DOS. DOS .
2.2 DOS
INT 20H
CS=/(PSP)
.COM
INT 21H
=00CS=/(PSP)
.COM
INT 21H
AH=01H AL=Ascii
INT 21H
AH=02HDL=Ascii
INT 21H
AH=03H AL=Ascii
INT 21H
AH=04HDL=Ascii
INT 21H
AH=05HDL=Ascii
INT 21H
AH=06HDL= AsciiDL=0FFh
ZF=0AL=Ascii
INT 21H
AH=07H AL=Ascii
CNTR-BREAK
INT 21H AH=08H AL=Ascii
-
5/24/2018 Assembly [ ]
108/130
108
CNTR-BREAK
INT 21H
AH=09HDS:DX=/
$
INT 21H
AH=OAH 0 byte bytes.1 byte bytes 2 /
bytes
ENTER. OCR
INT 21H
AH=0BH AL=0FFh AL=00h
INT 21H
AH=0CHAL=DOS(01h, 06h, 07h, 08h)
AL=Ascii
INT 21H
AH=0DH
INT 21H
AH=25HAL=DS:DX= /
INT 21H
AH=2AH CX=(1980-2099)
DH=(1-12)DL=(1-31)AL=(0-60=)
INT 21H
AH=2BHCX=DH=DL=
AL=00 0FFh
INT 21H
AH=2CH CL=(0-59)CH=(0-24)
-
5/24/2018 Assembly [ ]
109/130
109
DH=(0-59)DL= (0-99)
INT 21H
AH=2DHCL=CH=DH=DL=
AL=00 0FFh
INT 21H DOS
AH=30H AL=AH=
.3.10 0 AL=3 AH=10
INT 21H
AH=31HAL=DX=(1= 16 Bytes)
INT 21H
AH=35HAL=
ES:BX=/
INT 21H
AH=39HDS:DX=/
DOS
CF=0 CF=1 AX=03
AX=05
INT 21H
AH=3AHDS:DX= /DOS
CF=0 CF=1 AX=03 AX=05 AX=10
INT 21H
AH=3BHDS:DX= /DOS
CF=0 CF=1 AX=03
-
5/24/2018 Assembly [ ]
110/130
110
INT 21H
AH=3CHDS:DX= /DOS
CX=
00H
01H
02H 04H
08H 20H
CF=0 CF=1 AX=03 AX=05 AX=04
INT 21H
AH=3DHDS:DX= /DOS
AL= Bits 0-2000 001 010
CF=0 AX=CF=1 AX=03H AX=05H AX=04H
AX=01H AX=02H AX=0CH
INT 21H
AH=3EHBX=
CF=0 CF=1 AX=06H
INT 21H
AH=3FHBX=CX=bytesDS:DX=/
CF=0 AX=CF=1 AX=05 AX=06H
INT21H
AH=40HBX=CX=bytesDS:DX=/
CF=0 AX=CF=1 AX=05 AX=06H
-
5/24/2018 Assembly [ ]
111/130
111
INT 21H
AH=41HDS:DX= /DOS
CF=0 CF=1 AX=03 AX=05 AX=02
INT 21H
AH=42HBX=AL=00H 01H 10H CX:DX
CF=0 DX:AX=CF=1 AX=01H AX=06H
INT 21H
AH=48H
BX=
CF=0
AX=/CF=1 AX=07H AX=08H BX=
INT 21H 48H
AH=49HES=/
CF=0 CF=1 AX=07H AX=08H
INT 21H
AH=4CHAL=
-
5/24/2018 Assembly [ ]
112/130
112
8086
8086, .
AAA Adjust result of Ascii Addition
AAA
AAA ASCII AL AX unpacked BCD .:
1. LS nibble al 0 9 32. LS nibble al 0Af 0Fh AF (Auxiliary Flag) = 1,
6 AL, 1 AH, 1 AF3. MS nibble AL
.AX=0535h, BL=39 :
ADD AL,BLAAA
AX=0604h
AAD Ascii Adjust for Division
AAD
AAD AH AL unpacked BCD , AL. :
1. AH 0AH2. AH AL3. AH
AAM Ascii Adjust of Multiplication
AAM
AAM AL, unpacked BCD . :
AL 0Ah AL AH
AAS Ascii Adjust of Subtraction
AAS
-
5/24/2018 Assembly [ ]
113/130
113
AAS AL Ascii . :
1. LS nibble al 0 9 AF=1, 32. LS nibble al A F AF (Auxiliary Flag)=1, 6
AL, 1 AH, 1 AF3. MS nibble AL4. CF = AF
ADC ADd with Carry
ADC ,
1 2 Carry Flag
ADD ADDition
ADD ,
1, 2
AND AND logical
AND ,
2 1
CALL CALL procedure
CALL
5
CBW Convert Byte to Word
CBW
AL word :AL >= 80H AH=0FFHAL < 80H AH=00
CLC Clear Carry Flag
CLC
Carry Flag
CLD Clear Direction Flag
-
5/24/2018 Assembly [ ]
114/130
114
CLD
Direction Flag
CLI Clear Interrupt Flag
CLI
Interrupt Flag
CMC CoMplement Carry flag
CMC
Carry Flag 0 1 1 0
CMP CoMPare
CMP ,
1 2
CMPS
CMPSB CMPSW
.
3
CWD Convert Word to Dword
CWD
AX DX:AX.byte AX 0 , DX = 0.byte AX 1 , DX=0FFh.
DAA Decimal Adjust accumulator after Addition
DAA
. DAA AL , BCD . :
1. AF = 1 LS nibble AL 0Ah 0Fh 6 AL ON AF
2. CF = 1 MS nibble AL 0Ah 0Fh 60h AL ON CF
-
5/24/2018 Assembly [ ]
115/130
115
.AL = 68h BL = 28h, ADD AL,BLDAAAL = 96H 90H
DAS Decimal Adjust accumulator after Substraction
DAA
. DAS AL, BCD . :
1. AF = 1 LS nibble AL 0Ah 0Fh 6 AL ON AF
2. CF = 1 MS nibble AL 0Ah 0Fh 60h AL ON CF
.AL = 67h BL = 28h , SUB AL,BLDASAL = 39H 3FH
DEC DECrement
DEC
1
DIV DIVine
DIV
byte, AX , ALAH. word, DX:AX AL AH.
ESC ESCape
ESC
data bus /. , .
HLT HaLT
-
5/24/2018 Assembly [ ]
116/130
116
HLT
IDIV Interger DIVision
IDIV
DIV .
IMUL Interger MULtiply
IMUL
. MUL
IN INput
IN ,
INC INCrement
INC
1
INT INTerrupt
INT
INTO INTerrupt on Overflow
INTO
4 Overflow Flag 1.
IRET Interrupt RETurn
IRET
() .
JA/JNBE Jump if Above/Jump if Not Below or Equal
JAE/JNB Jump if Above or Equal/Jump if Not Below
JB/JNAE Jump if Below/Jump if not Above Equal
JBE/JNA Jump if Below or Equal/Jump if Not Above
-
5/24/2018 Assembly [ ]
117/130
117
JC Jump if Carry flag set
JCXZ Jump if CX register is Zero
JE/JZ Jump if Equal/Jump if Zero
JG/JNLE Jump if Greater/Jump if Not Less or Equal
JGE/JNL Jump if Greater or Equal/Jump if Not Less
JL/JNGE Jump if Less/Jump if Not Greater or EqualJLE/JNG Jump if Less/Jump if not Greater
JNC Jump if not Carry set
JNE/JNZ Jump if Not Equal/Jump if Not Zero
JNO Jump if Not Overflow
JPO/JNP Jump if Not Parity/Jump if Parity Odd
JNS/ Jump if Not Sign
JO Jump if Overflow
JP/JPE Jump if Parity Even
JS Jump if Sign
BYTE (-128 127) . .
JMP JuMP
JMP
.
LAHF Load int AH Flags register
LAHF
AH byte . bits :
LDS Load register and DS from memory
LDS ,
, bytes 16bits, bytes DS. (far pointer).
LEA Load Effective Address
LEA ,
/16bits, bytes
-
5/24/2018 Assembly [ ]
118/130
118
LES Load register and ES from memory
LES ,
, bytes 16bits
, bytes ES. (far pointer).
LOCK LOCK the bus
LOCK
LOCK
LODS LoaD String
LODS/LODSB/LODSW
/ DS:SI . 3.
LOOP LOOP if cx not zero
LOOP
cx 1 / cx 0.
/byte.
LOOPZ/LOOPE LOOP if cx not zero and Zf = 1 (WHILE Equal)
LOOPZ/LOOPE
cx 1 / cx 0 0 (ZF = 1). /byte.
LOOPNZ/LOOPNE LOOP if cx not zero and Zf = 0 (While not Equal)
LOOPNZ/LOOPNE
cx 1 / cx 0 0 (ZF = 0). /byte.
MOV MOVe
MOV ,
. .
-
5/24/2018 Assembly [ ]
119/130
119
MUL MULtiply accumulator
MUL
. byte, AL AX. word, AX DX:AX.
NEG NEGate
NEG
. /. , .
NOP No Operation
NOP
/. .
NOT NOT
NOT
bit . /.
OR OR logical
OR ,
2 1.
OUT OUTput
OUT ,
POP POP from top of stack
POP
, SP . word.
POPF POP Flags register from top of stack
-
5/24/2018 Assembly [ ]
120/130
120
POPF
(Status Register).
PUSH PUSH onto top of s tack
PUSH
, SP. word.
PUSHF PUSH Flags register onto top of stack
PUSHF
, SP . RCL Rotate through Carry left
RCL Rotate through Carry left
RCL ,
bits . Carry flag 8 bit.
RCR Rotate through Carry right
RCR ,
bits .
REP REPeat
REP/REPE/REPNE/REPZ/REPNZ
. .
4.
RET RETurn
RET ( )
, RETN (RETurnNear) RETH (RETurn Far). 5. ret , , SP . RET Pascal PUSH (CALL) .
-
5/24/2018 Assembly [ ]
121/130
121
ROL Rotate Left
ROL ,
bits .
Carry Flag, bit .
ROR Rotate Right
ROR ,
bits . Carry Flag,
bit .
SAHF Store register AH into Flags
SAHF
LAHF . AH byte SF.
SAL/SHL Shift Arithetic Right /Shift left
SAL/SHL ,
bits .
SAR Shift Arithetic Right
SAR ,
bits , bit .
SBB SuBtract with Borrow
SBB ,
1 2 Carry Flag.
SCAS SCAn String
SCAN/SCANS/SCANW
/ DS:SI . 3.
SHR Shift Right
SHR ,
-
5/24/2018 Assembly [ ]
122/130
122
bits bits 0.
STC SeT Carry flag
STC
CF = 1.
STD SeT Direction flag
STD
DF = 1.
STI SeT Interrupt flag
STI
IF = 1.
STOS STOre String
STOS/STOSB/STOSW
/ ES:DI. 3
SUB SUBtract
SUB ,
2 1
TEST TEST
TEST ,
AND 2 1, . .
WAIT WAIT
WAIT
/ , TEST.
TEST. .
-
5/24/2018 Assembly [ ]
123/130
123
XCHG exchange
XCHG ,
1 2.
XLAT exchange via Look up At Table
XLAT
/ DS:[BX+AL] AL. AL.
XOR eXclusive OR
XOR ,
bitwise XOR 2 1.
-
5/24/2018 Assembly [ ]
124/130
124
/ . ASSEMBLY 8086. debuger .
BIT (BInary digiT).
BIT 8 BIT BYTE. 4 bit nibble, byte nibble. , byte. byte.
(byte) .
. . (BCD ..)
.
.
. 0 ( LSBIT, Less Significant BIT), 1, 2 .. ( MSBIT, More Significant BIT) 2 n-1 n bit . byte n = 8. byte:
b7b6b5b4b3b2b1b0
:
b7 27 b626 b5 25 b4 24 b3 23b2 22b1 21b020
-
5/24/2018 Assembly [ ]
125/130
125
:
1 0 1 0 0 1 1 0:
1 128 + 0 64 + 1 32 + 0 16 + 0 8 + 1 4 + 12 + 0 =166 .
2 0. .. 135:
135 : 2 = 67 1 > 1 (bit)67 : 2 = 33 1 > 133 : 2 = 16 1 > 116 : 2 = 8 0 > 0
8 : 2 = 4 0 > 04 : 2 = 2 0 > 02 : 2 = 1 0 > 01 : 2 = 0 1 > 1 (bit)
:
1 0 0 0 0 1 1 1
bit 00000000 11111111 0 28
- 1 ( 0 255). CF...
(128)10 1 0 0 0 0 0 0 0+(129)10 1 0 0 0 0 0 0 1
(257)10 (1) 0 0 0 0 0 0 0 1
(1) CF.
, . 0 1 . 2. (0 1 1 0 ) . .. BYTE
0 0 0 0 0 1 0 1 (5)10 5 :
-
5/24/2018 Assembly [ ]
126/130
126
1 1 1 1 1 0 1 0
+ 1
1 1 1 1 1 0 1 1 (-5)10
bit 10000000 01111111 -27-1 27- 1 (-128 +127).
F...
( 64)10 0 1 0 0 0 0 0 0+( 65)10 0 1 0 0 0 0 0 1
(129)10
1 0 0 0 0 0 0 1 6 bit 7bit.
A
( -1)10 1 1 1 1 1 1 1 1+( -2)10 1 1 1 1 1 1 1 0
(-3)10 1 1 1 1 1 1 0 1 6bit 7bit
.
ASCII (American Standard Code for Information) . 26 26 10 20 . 7 27 = 128. bit 0. bit 1 128 ( 128 255) ( ...) . extended ASCII.
32 ASCII . ASCII .
-
5/24/2018 Assembly [ ]
127/130
127
ASCII
HEX MSD 0 1 2 3 4 5 6 7
LSD BITS 0000 0001 0010 0011 0100 0101 0110 0111
0 0000 NUL DLE SPACE 0 @ P ` p
1 0001 SOH DC1 ! 1 A Q a q
2 0010 STX DC2 2 B R b r
3 0011 ETX DC3 # 3 C S c s
4 0100 EOT DC4 $ 4 D T d t
5 0101 ENQ NAK % 5 E U e U
6 0110 ACK SYN & 6 F V f v
7 0111 BEL ETB 7 G W g w
8 1000 BS CAN ( 8 H X h x9 1001 HT EM ) 9 I Y i y
A 1010 LF SUB * : J Z j z
B 1011 VT ESC * ; K [ k {
C 1100 FF FS , < L \ l |
D 1101 CR GS - = M ] m }
E 1110 SO RS . > N ^ n ~
F 1111 SI US / ? O _ o DEL
ASCII
NUL - DLE
SOH DC1
STX DC2
ETX DC3
EOT DC4
ENQ NAK
ACK SYN -
BEL - ETB
BS - CAN -
HT EM
LF SUB -
VT ESC
FF FS -
CR GS
SO RS
SI US
SPACE DEL
-
5/24/2018 Assembly [ ]
128/130
128
ASSEMBLY 8086. ,
, . . ASCII.
D ( Decimal ) . .. 14 13 byte .
DB 14,13D
B (Binary). 0 1. .. :
DB 01010101B, 11111111b
byte .
H (Hex). , . :
0 0000 01 0001 12 0010 23 0011 3
4 0100 45 0101 56 0110 67 0111 78 1000 89 1001 9A 1010 10B 1011 11C 1100 12D 1101 13
E 1110 14F 1111 15
-
5/24/2018 Assembly [ ]
129/130
129
. .. 1 4 A F 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1 .
. 0, . .. CH(High) CX 0CX12 . :
DB 0ACH,12H
byte .
.
-
5/24/2018 Assembly [ ]
130/130
ASSEMBLER 8086 DOS 1989
Kris jamsa Programming the complete Reference 1991
8088 8086 IBM PC/TX &
1987
Microsoft Microsoft. MS-DOS Operating System ForPersonal Computers Compatible with IBM.
1990
Leo J. Scanlon 8086/88 ASSEMBLY LANGUAGEPROGRAMMING
1984
James W. Cofron PROGRAMMING THE 8086/88 1987
Peter Norton ASSEMBLY Language Book 1986
Peter Norton Inside the IBM PC, Revised and Enlarged 1986
Rodert Jourdain Programmers Problem Solver for IBM PC XT &AT 1987
Russel Rector - GeorgeAlexy - -
THE 8086 BOOK 1980
Borland International Turbo Assembler Users Guide 1988
Borland International Turbo Assembler Reference Guide 1988