You are on page 1of 130

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
1

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 (indirect
addressing).
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),
:

SP .
BP ( ,
).
SI .
DI .
2.3
IP ( = Instruction Pointer)
(offset)
. BIU. (Program Counter)
von Neumann :
CS : IP

2.4 .

2.
SR 16
bits, 9 .
2.4.1 .(6 bits)
( ON , OFF )
, , .
( ) . :
CF (Carry Flag)
3

(ADD,
SUB, ADC, SBC). ()
() Msbit , 1 0.
(RCR, RCL). Msbit
bit 7 1 byte 15
1 word = 2bytes.
AF (Auxiliary Flag)
3
4 bit 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)

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 In
Line) 40 (pins) .
(Minimum) (Maximum).
5V 0V /.
Minimum
/ , Maximum
8288.
8087
8089.
8086 (Multiplex) . 20
, (Address

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
6

/ .
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)

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)
.
8

4 16 bits,
( ) 4 bits / 20 bits.
/ (segment).

4.



.

, .
5. -
1 byte. ( word = 2 bytes )
byte /.
.. 3456h , / 678h 679h
5634h :
/

/
(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

10

MAIN proc far


PUSH DS; DOS,
XOR AX,AX; (SEGMENT) PSP
PUSH 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,2
INT 21H
MOV DL,CHAR__hi;
MOV AH,2; 2 DOS
INT 21H; DOS
RET; DOS INT 20h PSP
MAIN endp
.DATA
WORD__LOW__HI label word
Char__low db 0
Char__hi db 0
.STACK 100H
END MAIN
6.
/ /
/ 64 kbytes.
/ (port)
(DX) byte ()
/ 256.
(IN OUT).
.

11

2
8086 .
1.
ASSEMBLY /.

(,
, , )
:


(, ,
,,

..)


( 1Mbyte RAM ROM)

/ :

.
(instruction set)
. /
,
(machine language). ASSEMBLY

. .
:
add a1,1

12

:
4
1
:
-

(Assembler)
.

. (TASM.EXE MASM.EXE)
.OBJ object module ,
(TLINK.EXE LINK.EXE)
object modules
.EXE .COM.

:
2 :
INTDOS EQU 21h
TITLE MHNHMA
KVDIKAS SEGMENT PUBLIC
ASSUME CS:KVDIKAS,DS:DEDOMENA
MAIN PROC NEAR
mov ax,DEDOMENA ; ds /
mov ds,ax
;
lea dx,mhnhma
; / dx
mov ah,9 ; DOS string
int INTDOS
MAIN ENDP
KVDIKAS ENDS
DEDOMENA SEGMENT PUBLIC
Mhnhma db WELLCOME TO ASSEMBLY ,13,10,$
DEDOMENA ENDS
SOROS SEGMENT PARA STACK SOROS
Db 100h dup(0) ; 256 bytes
SOROS ENDS
END MAIN

13

MHNHMA.ASM,
:
TASM MHNHMA
,
MHNHMA.OBJ.
:
TLINK MHNHMA
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

14

, h b
.
-

(. ax, bx).

(. jmp again).

LENGTH, OFFSET,:,SEG ..

assembly ( )
(segments),
.
STACK.
.EXE.
.COM :
-

(
).
.

256 bytes .
256 bytes (PSP
Program Segment Prefix).

. 256 bytes
.

.COM
:
3 :
TITLE ;
CGROUP GROUP KVDIKAS,DEDOMENA ;
;
KVDIKAS SEGMENT PUBLIC
ASSUME CS:CGROUP,DS:CGROUP
ORG 100h ; 256 .
MAIN PROC NEAR
mov al,aritmos1 ; AL
add al,aritmos2 ; AL
mov dl,al ; DL
add dl,30h ; ASCII
mov ah,2 ; DOS
int 21h ; DOS
int 20h ; DOS .COM

15

MAIN ENDP
KVDIKAS ENDS
DEDOMENA SEGMENT PUBLIC
aritmos1 db 4
aritmos2 db 5
DEDOMENA ENDS
END MAIN
/t .
atroisi.asm, :
Tlink /t atroisi.obj
2.
2.1 END.
END
. .EXE END /
. . ,
ARXH PRAXH :
4 :
TITLE AFAIRESH;
KVDIKAS SEGMENT PUBLIC
ASSUME CS:KVDIKAS,DS:DEDOMENA
PRAXH PROC NEAR
mov ax,dedomena
mov ds,ax
mov al,aritmos1; 1 AL
sub al,aritmos2; AL
mov apotelesma,al;
mov dl,apotelesma; DL 2
; DOS
add dl,30h ; ASCII
mov ah,2 ; DOS
int 21h
ret; .
PRAXH ENDP
ARXH PROC NEAR
call praxh ; praxh
mov ah,4ch ; DOS
int 21h ; DOS
ARXH ENDP
KVDIKAS ENDS

16

DEDOMENA SEGMENT PUBLIC


aritmos1 db 4
aritmos2 db 3
apotelesma db 0
DEDOMENA ENDS
SOROS SEGMENT PARA STACK 'SOROS'
db 256 dup (0)
SOROS ENDS
END ARXH
2.2 ,
SEGMENT ENDS
.
.
SEGMENT ENDS (logical segment).
PROC ENDP .
,
(Calls, Ret)
.
ASSUME
. ASSUME CS:
.EXE
. ASSUME DS: ASSUME ES
/ ,
(DATA EXTRA)
. ASSUME
( labels ) .
5 :
TITLE POLLAPLASIAMOS;
KVDIKAS SEGMENT PUBLIC
ASSUME CS:KVDIKAS,DS:DEDOMENA1
PRAXH PROC NEAR
ASSUME DS:DEDOMENA2 ;***** *****
;
mov ax,dedomena2
mov ds,ax
mov al,aritmos1; 1 AL
mov dl,aritmos2; AL
mul dl; AL * DL , AX
mov apotelesma,al;
mov dl,apotelesma; DL

add dl,30h ; ASCII


mov ah,2 ; DOS

17

int 21h
ret
PRAXH ENDP
ARXH PROC NEAR ;
call praxh
ASSUME DS:DEDOMENA1
mov ax,dedomena1
mov ds,ax
lea dx,mhnhma
mov ah,09h
int 21h
mov ah,4ch ; DOS
int 21h ; DOS
ARXH ENDP
KVDIKAS ENDS
DEDOMENA1 SEGMENT PUBLIC
mhnhma db 10,13, "END of PROGRAM",10,13,"$"
DEDOMENA1 ENDS
DEDOMENA2 SEGMENT PUBLIC
aritmos1 db 4
aritmos2 db 2
apotelesma db 0
DEDOMENA2 ENDS
SOROS SEGMENT PARA STACK "SOROS"
Db 256 dup (0)
SOROS ENDS
END ARXH ; /h ARXH
2.3
DB
byte, DW , DD , DQ DT bytes .
DUP

. .
.
:
ARITMOI DW 10,13,29
MHNHMA DB HELLO
PINAK DB 10 DUP (0)
21 bytes /
:
ARITMOI , MHNHMA , PINAK
.
.

18

LABEL ()
,
.
BYTE , WORD, DWORD ..
. :
NUM LABEL WORD
CHARS DB 10,0
2
CHARS.
NUM WORD . .
mov ax,num
AX.
2.4
EQU ,
. .
EQU
, EQU.

. :
Blocksize EQU 512
BLOCKS EQU 4
Bufsize EQU Blocksize * BLOCKS
Mhnhma EQU
$
. :
mhnhma DB
mhkos__mhnhma EQU (mhnhma - $)
2.5 .
2.5.1
(SEGMENT, ENDS, ASSUME),
Borland Microsoft
,
(Simplified Directives), ,
(linking) (object modulus)
3 .

19


ASSEMBLY, C, PASCAL, PROLOC, BASIC
, ASSEMBLY
.
, assembly,
,
( CALL RET),
.
: 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 <--- @data
2.5.3 DOSSEG
.
assembly
, MS-DOS
. ,
DGROUP DGROUP.
MS-DOS.
2.5.4 .MODEL

20

.

.

CALL RET.

IP (
), ()
CS:IP (
/ ).
call ret near, 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 .

21

6 :

;
.model small
.code
mov ax,@data
mov ds,ax
mov ax,num
or ax,ax ; or
jz einai_mhden
mov dx, offset mhnhma_oxi
mov ah,9; DOS
int 21h ; DOS
jmp telos
einai_mhden:
mov dx,offset mhnhma_nai
mov ah,9; DOS
int 21h ; DOS
telos:
mov ah,4ch; DOS
int 21h ; DOS
;
.data
num 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.1 MOV
MOV ,
byte :
(. MOV AX,BX)
(. MOV APOT,AL)
(. MOV DL,APOT)
(. MOV AH,21h)
(. MOV ARIT,5)
22


. MOV DS,DATASEG;

1 byte 1 word = 2 bytes.
.. :
MOV ax,dl
MOV bh,dx
.
1.2 PUSH POP
. (stack)

LIFO (Last In First Out).
/ SS:0000
SS:SP.
PUSH SP 2 (2
bytes) .
POP
SP 2.
/ 16 bit,
.
.. SP=100h , SS=1000h , Ax=12. :
PUSH ax

SP=0FEh / 1000:00FE 12.


PUSH 10 .
PUSHF , POPF

.
1.3 XCHG
( )
bytes words.
. . .. AX=14 ,
BX=15 , :

23

XCHG ax,bx

ax=15 bx=14.
2. .
2.1
8086 .
, ,
8 16 bits.

(twos complement). 32 bits
. .
,
,
.
2.2
ADD SUB MOV :
ADD ,
SUB ,
MOV
.
ADC SBB
Carry Flag,
CF. 32 bits.
32 bit
CX:BX 32 bit
DX:AX.

add ax,bx
adc dx,cx ; 16 bit

8086 1 INC DEC.


,
. :
INC <>
DEC <>
:
ADD <> , 1
SUB <> , 1

24

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:AX
AX DX. .
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

25

0 bit al 0 bit
ah , 1 bit al 1 bit ah . AND, OR, XOR
, NOT .
,
.
3.
8086 bits
. :

SHL SAL
CF
0

SHL SAL bit


bit. bit CF
bit 0.
2.

SHR
CF
0

SHR bit .
bit (. 0) CF bit 0.
2.

26

SAR
CF

SAR bit
bit
.
2.
4 :

ROR
CF

H ROR SHR bit


bit CF.

27

ROL
CF

ROL . bits
.

RCR
CF

RCL
CF

28

RCL RCR .
CF. RCL bits
, bit CF
CF . 0 bit. RCR .
.
1,
CL .
. :
SHL AX,1
AX 2. :
MOV CL,4
SHL AX,CL
AX 16.
4.

4.1

, .

.
,

. ,

. CF, OF,
ZF.
4.2

JMP <>
:
-

byte ( -128 +127 )


.
SHORT.

( -32768 +32767 )
.
().

29

.
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
..

30

a:
CMP TEST
(, ) AND (Byte
) , (
). TEST
bits JNZ. .
, 4.
7 :
.MODEL SMALL ;
.CODE
mov ax,@data
mov ds,ax
MOV AX,ARIT;
TEST AX,0000000000000011h; bit
JNZ NOT__EVEN;
LEA DX,MHNHMA__EINAI;
MOV AH,09
;
INT 21H
Jmp TELOS
NOT__EVEN:
LEA DX,MHNHMA__DEN__EINAI;
MOV AH,09
;
INT 21H ;

TELOS:
mov ah,4ch;
int 21h
;
.DATA
MHNHMA__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

:

31

JB/JNAE

CF=1

JAE/JNB

CF=0

JBE/JNA

CF=1 ZF=1

JA/JNBE

CF=0 ZF=0

ZF=1

JNE/JNZ

ZF=0

JL/JNGE

SF<>OF

JGE/JNL

SF=OF

JLE/JNG

ZF=1 SF<>OF

JG/JNLE

ZF=O SF = OF

JE/JZ

PF=1

PF=0

JS

SF=1

JNS

SF=0

JC

CF=1

JNC

CF=0

JO

OF=1

JP/JPE
JNP/JPO

32

JNO

OF=0


byte.
128 +127 (Bytes)
/ .
.
:
CMP DL,7
JA A
.......
A:
:
CMP DL,7
JNA B
JMP A
B:
.
A:
4.4

.
. ,
,
, , ..
8086 : LOOP,
LOOPE, LOOPNE JCXZ.
. CX
.
LOOP 1 CX 0
,
LOOP. . 18 ,
.
mhnhma DB
..
..
mov cx,18;
lea bx,mhmnhma; /
; mhnhma bx

33

loop__ektyp:
mov dl,[bx] ; dl
inc bx
;
mov ah,02h ; DOS
int 21h
; DOS
loop loop_ektyp ; CX > 0
LOOPE LOOP CX.
LOOPE CX<>0 ZF = 1 (
). LOOPNE
CX<>0 ZF = 0 (
). .

256 bytes.
ENTER ( ASCIl 13).

Buffer db 126 dup (0) ;


..
..
mov cx,256;
lea bx,buffer; /
; bx
again:
mov ah,8 ; DOS
int 21h ; DOS
mov [bx],al ;
; DOS AL
inc bx ;
cmp al,0dh ; ENTER
loopne again ; CX > 0 ZF = 0

JCXZ CX = 0.
CX
. .
JCXZ parakatv; CX=0
again: loop again; CX
parakatv:
JCXZ
CX=0.


byte .

34

: 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 public
assume cs:code_seg,ds:data_seg
main proc near
mov ax,data_seg; ds
mov ds,ax
les di,pointer; pointer,
; / mhnhma , ES:DI
again: mov dl,es:[di]; / es:[di] dl

35

cmp dl,0; ?
je telos;
mov ah,2;
int 21h
inc di;
jmp again ;
telos: mov ah,4ch
int 21h
main endp
code_seg ends
data_seg segment
; far pointer / mhnhma
pointer label dword
dw offset mhnhma
dw seg mhnhma
mhnhma db "END OF TESTING PROGRAM",10,13,0
data_seg ends
soros segment para stack
db 256 dup (0)
soros ends
END MAIN

36

1.
8086 1Mbyte,

.
.
/ /
.
4, /
.

.
. ,
/
, /
( BIU). ,
.
2.
/ ,
.
2.1
,
. .:
MOV al,3;AL <-- 3
2.2
,
. :
MOV al,bl;AL <-- (BL)
2.3
/ .
.
: ..
AAA ; ASCII

37

AX
.
2.4
.
(DS).
/ (segment
override prefix). / , (
) .
:
.DATA
mhnhma db ,10,13,$
PIN db 10 dup (0)
Arit db 10,3
Apot db 0
MOV AL, ARIT[0]; mov al , [arit] mov al,arit
ADD 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]; 7 byte extra segment
mov al,ss:[9]; 10 byte .

0. /
. __
3.
3.1

.

0 .
.
.
.
:
[ < > + < > + <>]
BX BP ,
SI DI,
. :
[< >] [< >] [<>]

38

,
,
/ .
:
BX
SI

+
BP
DI
(base)
(index)
(displacement)
,
:
[]
[BX]
[SI]
[DI]
[BX+SI]
[BX+DI]
[BP+SI]
[BP+DI]
[BP]

[BP+]
[BX]
[SI+]
[DI+]
[BX+SI+]
[BX+DI+]
[BP+SI+]
[BP+DI+]

/
. BP /
( SS ), ( DS ).

. :
MOV di,100
mov al,a
mov [di],al; 100 data segment a
mov bp,sp
sub bp,10
mov al,[bp]; 10 al
mov si,10
mov al,es:[si]; 10 extra segment al
3.2

byte .
(DB DW)
. WORD PTR, BYTE
PTR. :
MOV SI,2

39

MOV WORD PTR [SI],8; 2 3 byte data segment


; 080h.
; , 8 0
/
. OFFSET
SEG :
LEA <>, <>
16 bit . /
/ .
OFFSET.
MOV , OFFSET
o SEG (segment)
. :
.DATA
mhnhma db
..
.CODE
..
MOV AX,SEG MHNHMA;
MOV ES,AX; ES (extra segment)
MOV SI,OFFSET MHNHMA; LEA SI, MHNHMA
INC SI
MOV BYTE PTR ES:[SI],A; E A

. (Simplified)
.
;
; 1
9:
.model small ; small
.stack 200h ; 512
.data
db 200 dup (0)
charstring db "ABCDEFGHIJKLM"
.code
mov ax,@data ; DS
mov ds,ax ;
one:
mov si , offset charstring +8; si / charstring 8
mov dl,[si] ; / si dl

40

mov ah,2
int 21h
two:
mov bx,8
mov dl,[charstring + bx]
mov ah,2
int 21h
three:
mov bx,offset charstring
mov dl,[bx+8]
mov ah,2
int 21h
four:
mov si,8
mov dl,[si+charstring]
mov ah,2
int 21h
five:
mov bx,offset charstring
mov di,8
mov dl,[bx+di]
mov ah,2
int 21h
six:
mov si,offset charstring
mov bx,8
mov dl,[bx+si]
mov ah,2
int 21h
seven:
mov bx,offset charstring
mov si,7
mov dl,[bx+si+1]
mov ah,2
int 21h
eight:
mov bx,3
mov si,5
mov dl,[bx+charstring+si]
mov ah,2
int 21h
telos:
mov ah,4ch
int 21h
End
:
IIIIIIII

41

4
4.1
/
. 8086
,
.
,
.

MOV , LOOP, INC.

. .
( source )
DS;[SI],
( destination )
ES:[DI]. SI
DI DF. :
-

(DF) = 0 1 byte 2
(word).
(DF) = 1 1 byte 2
(word).

:
CLD ( DF)
STD ( DF 1)
DF
.
byte
. ,
byte .
4.2
4.2.1 LODS / LODSB / LODSW
LODSB byte / DS:[SI] AL
SI 1. .. :
CLD ; DF
MOV SI,2
LODSB
AL 2 byte .

42

LODSW / DS:[SI] AX
SI 2. .. :
CLD
MOV SI,2
LODSW
AX 2 byte 3 byte
.
4.2.2 STOS / STOSB / STOSW
STOSB byte AL /
ES:[DI] DI 1. .. :
STD ; DF=1
MOV di,2
MOV AL,4
STOSB
2 byte extra 4 DI 1.
STOSW AX /
ES:[DI] DI 2.
4.2.3 MOVS / MOVSB / MOVSW
LODS
STOS. byte ( MOVSB ) ( MOVSW )
/ DS:[SI] / ES:[DI] DI SI
1 2.
.
PHGH PROORISMOS.
MEGETHOS__SE__BYTE.
cld ; DF
mov cx,MEGETHOS__SE__BYTE : cx
mov si,OFFSET PHGH ; / SI
mov ax,SEG PHGH ;
mov ds,ax ; DS
mov di, OFFSET PROORISMOS ; / DI
mov ax, SEG PROORIMOS ;
mov es,ax ; ES
brogxos__metaforas :
movsb : BYTE
loop brogxos__metaforas ; CX
4.3
4.3.1 SCAS / SCASB / SCASW

43

SCAS
ES:[DI].
: SCASB AL ( byte)
SCASW AX ( ).
( al ax )
ES:[DI]
.
DI 1 2
.
,
:
10:
DOSSEG ;
.MODEL TINY ; Turbo C Tiny ( .com )
.CODE
org 100h ; 256 byte
arxh proc
LEA DX,EISAGVGH ;
MOV AH,9 ;
INT 21h ;DOS
mov ah,08 ;
int 21h ; DOS al
MOV CX, MHKOS_KEIMENOY ; cx
lea di,keimeno
; mov bx,seg keimeno ; .EXE
; mov es,bx
cld ; DF
loop_again : ;
scasb ;
je nai ;
loop loop_again ;
LEA DX,mhnhma_no
MOV AH,9
INT 21h
Jmp short telos
nai:
LEA DX, _yes
MOV AH,9
INT 21h
telos:
INT 20H
Arxh endp
.DATA ;
EISAGVGH DB "PRESS A KEY PLEASE $"
KEIMENO db "SEARCH OF A CHARACTER"
MHKOS_KEIMENOY DW $ - KEIMENO

44

MHNHMA_NO db 10,13," THE CHARACTER THAT YOU HAVE SELECTED


DOES NOT EXIST",10,13,"$"
_YES
db 10,13,"YES THE CHARACTER THAT YOU HAVE
SELECTED REALLY EXIST IN THE SET",10,13,"$"
End arxh
4.3.2 CMPS / CMPSB / CMPSW
.
. / DS:[SI} /
ES:[DI]. / ES:[DI]
/ DS:[SI] .
DI, SI
DF.
4.4


.
: REP , REPE, REPZ, REPNE, REPNZ.
,
.
REP
CX. (SI, DI)
CX 1. :
mov cx,megethos__se__byte
brogxos__metaforas :
movsb ; BYTE
loop brogxos_metaforas ;

:
mov cx,megethos__se__byte
REP movsb ; BYTE
CX = 0 .
CX
ZF. .
REPE REPZ CX=0
( ).
REPNE REPNZ CX=0
(
). :
MOV CX, MHKOS__KEIMENOY ; cx
45

loop__again: ;
scasb ;
je nai;
loop loop__again;
:
MOV CX, MHKOS__KEIMENOY; cx
Repnz 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
.CODE
org 100h; 256 .com
arxh proc
lea dx ,message
mov ah,09
int 21h
AGAIN:
mov ah,08;
int 21h ; DOS
CMP AL,27 ; ESC
JE TELOS ; ESC
cmp al,7fh
ja print
LEA BX,TRANS_PINAKAS ; BX

46

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 127
TRANS_PINAKAS label byte
db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h,0ah,0bh,0ch,0dh,0eh,0fh
db 10h,11h,12h,13h,14h,15h,16h,17h,18h,19h,1ah,1bh,1ch,1dh,1eh,1fh
DB 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,3fh
DB 40h,128,129,150,131,132,148,130,134,136,141,137,138,139,140,142
DB 143,51h,144,145,146,135,151,145,149,147,133,5bh,5ch,5dh,5eh,5fh
DB 60h,152,153,175,155,156,173,154,158,160,165,161,162,163,164,166
DB 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 GREEK
LETTER",10,13, "PRESS ESC FOR EXIT",10,13,"$"
end arxh

1.

.

(subroutines)
.

PASCAL (Function , Procedures).

.
. ,
,
.


.

47

,
.

.
2. (PROCEDURES)
(procedure)

.
:

ASCII
.
1.
2.
3.
4.
5.
6.

.
1 .

2 .
.
.

12:
code_seg segment
assume cs:code_seg,ds:data_seg
kyrioproc proc far
xor ax,ax; ax
push ds ; PSP
push ax ; , DOS.
mov dx,data_seg
mov ds,dx ; DS
lea dx,mhnhma1
call emfanish_mhnhma
call input_hex
mov cl,4 ; al
shl al,cl; 16
mov ascii_timh,al;
call input_hex
; al
add ascii_timh,al;
mov dl,ascii_timh
call emfan_hex
ret ; DOS
kyrioproc endp
;
input_hex proc near

48

again:
call input_char ;
cmp al,'0'
;
jb again
;
cmp al,'9'
; 0 9
ja deytero_elegxo
mov dl,al
;
call emfanish_char ;
sub al,'0' ;
ret
;
deytero_elegxo:
cmp al,'A' ;
jb again
; A F
cmp al,'F'
ja trito_elegxo
mov dl,al
call emfanish_char
add al,10
sub al,'A'
ret
trito_elegxo:
cmp al,'a' ; a f
jb again
cmp al,'f'
ja again
mov dl,al
call emfanish_char
add al,10
sub al,'a'
ret
input_hex endp
; ASCII
;
emfan_hex proc near
call allagh_grammhs
lea dx,mhnhma2
call emfanish_mhnhma
mov dl,ascii_timh
call emfanish_char
ret
emfan_hex endp
;
allagh_grammhs proc near
lea dx,nea_grammh
call emfanish_mhnhma
ret
allagh_grammhs endp
;
emfanish_mhnhma proc near

49

mov ah,09h
int 21h
ret
emfanish_mhnhma endp
;
emfanish_char proc near
mov ah,02h
int 21h
ret
emfanish_char endp
;
input_char proc near
mov ah,08h
int 21h
ret
input_char endp
code_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 ends
soros segment para stack
db 256 dup (0)
soros ends
end kyrioproc
:
1.

.
2. ,
PROC ENDP.
/
; .
3. CALL .
CALL emfanish__char
4.
RET.

50

5. RET.
6. .
7. NEAR FAR.
8. RET.
2. CALL RET.
2.1

CALL RET , :
CALL / CALL ,
/
CALL.
RET,
/
CALL
.
2.2 CALL
CALL,
.
RET.
CALL NEAR CAL L (near ptr call),
FAR CALL (far ptr call).

IP SP 2.
/
.

CS SP
2 IP
SP.
/
CALL.
FAR PTR
NEAR FAR..
CALL FAR PTR emfanish__char.

51

, /
.
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 NEAR RET (RETN),
FAR RET (RETF).
RET
IP SP 2.
CALL .
RET
IP SP 2
CS SP 2
.
CALL RET

.
2.4 .
DOS
256 bytes
(program segment prefix) PSP. .COM 256 bytes
bytes . .EXE

.
/ ENVIROMENT (PATH, .),
..
. :

52

00-01

bytes 0CD20H

int 20h DOS



.

.


CL.

CP/M
int 22h
int 23h
int 24h

/
ENVIRONMENT. Environment

SET
DOS
:

02-03

04
05
0AH-ODH
0EH-11H
12H-15H
16H-2BH
2CH-2DH

2EH-5BH
5Ch-6BH
6CH-7BH
7CH-7FH
80H

81H-0FFH

FCB 1
FCB 2

bytes
.


<Enter>


,
.

53

13:
ASSUME CS:CODE__SEG
MAIN proc far
PUSH DS; DOS,
XOR AX,AX; (SEGMENT) PSP
PUSH AX; PSP
MOV BX, 80H; BX
XOR CX,CX; CX
MOV Cl,ES:[BX]; CX
JCXZ TELOS;
AGAIN:
INC BX;
MOV DL,ES:[BX]; dl
MOV AH,2;
INT 21H; DOS
LOOP AGAIN
TELOS: RET; DOS INT 20h PSP
MAIN endp
CODE__SEG ENDS
SOROS SEGMENT STACK
DB 100H DUP (0)
SOROS ENDS
END MAIN
2.5 DOS RET.

DOS RET. ,
byte PSP : INT 20h , DOS.
DS ES /
PSP , / PSP DS:0000.
/ PUSH
RETF PSP
INT 20h DOS.
:
..
push ds ; PSP
xor ax,ax ; ax
push ax ; , DOS.
..
;
..
ret ; PSP
2.6

54


ASCII 0.(null terminated
string C)
14:
code_seg segment
assume cs:code_seg,ds:data_seg
kyrioproc proc far
xor ax,ax; ax
push ds ; PSP
push ax ; ,
DOS.
mov dx,data_seg
mov ds,dx ; DS
lea bx,mhnhma
call emfan_mhnhma
ret ; DOS
kyrioproc endp
;************************************
;*
*
;*
;* **********
*
;* / BX
*
;*************************************
emfan_mhnhma proc near
again:
mov dl,[bx] ; / bx dl
inc 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,02h
int 21h
ret
emfanish_char endp

*
*

55

code_seg ends
;
data_seg segment
mhnhma db "END OF PROGRAMM",10,13,0
nea_grammh db 10,13,0
data_seg ends
soros segment para stack
db 256 dup (0)
soros ends
end kyrioproc
emfan__mhnhma
/ mhnhma. /
emfan__mhnhma
BX. emfanish__char
ASCII DL ,

DL.
,
.
:
-
-

ASSEMBLY.

.

.
DOS BIOS
( 10).

.
(C, PASCAL),
.
3
. :
PUSH ,
BP.
( CALL)

56

.
, :
15:
code_seg segment
assume cs:code_seg,ds:data_seg
kyrioproc proc far
xor ax,ax; ax
push ds ; PSP
push ax ; , DOS
mov dx,data_seg
mov ds,dx ; DS
lea ax,mhnhma; / mhnhma
push ax
;
call near ptr emfan_mhnhma
add sp,2; push ax
ret ; DOS
kyrioproc endp
;
emfan_mhnhma proc near
push bp
mov bp,sp
mov bx,[bp+4]; / string bx
; +4 near call 4 SP
;/ 2 bp
; 2 / call
again:
mov dl,[bx]
inc bx
cmp dl,10
jz epistrofh
push dx; ASCII
call emfanish__char
add sp,2; push ax
jmp short again
epistrofh:
pop bp
ret
emfan_mhnhma endp
;
emfanish__char proc near
push bp
mov bp,sp
mov dx,[bp+4]; ASCII DX
; DL 2
; DOS
mov ah,02h

57

int 21h
pop bp
ret
emfanish__char endp
code_seg ends
;
data_seg segment
mhnhma db "END OF PROGRAMM",10,13,0
data_seg ends
soros segment para stack
db
256 dup (0)
soros ends
end kyrioproc
,
BP .
2.7

.
:
-

BYTE
AL.

WORD
AX.

DWORD ( )
DX:AL.

2.8
.

assembly ,

.


, .
:
(

58

PUSH), ( RET)
( POP)
:
,************************************
,* *
,*
*
,* **********
*
,* / BX
*
,************************************
emfan__mhnhma proc near
again:
push dx; dx
mov 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

59

6
DEBUG
1

, ,
, ,
.

.
. bugs
.

DEBUG. ,
, ,

. .COM
.
DEBUG .
CNTR C. CNTR S

.
CNTR C.

2
2.1
DEBUG debug
. ..
C: >DEBUG

C: > DEBUG ASKHSH.EXE


(prompt) debug -. debug

-Q (Quit).
debug
.
DOS. :

60

LEA DX, MHNHMA


MOV AH,9
INT 21H
INT 20
MHNHMA DB $
2.2 .
debug -A100(Assembly)
assembly .
debug assembly
.
/ 100H / .COM
.
Debug segment 247F,
100. ,
. Debug Return:
-a100
247F:0100 lea dx,[200]
247F:0104 mov ah,09
247F:106 int 21
247F:018 int 20
247F:010A
-A
Return .


2.3
, 200
/ .
:
-f200 L9 Geia soy$
-F (Fill) L 9
.
.
2.4
-G(Go),
:
-g

61

Geia soy
Program 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,09
247F: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
-RBX
BX 0000
:
-RCX

62

CX 0000
:210
-W
Writing 00210 bytes
-R(register)
. -R ,
, . . -R

-R
AX=0900 BX=0000 CX=0000 DX=0200 SP=FFEE BP=0000 SI=0000 DI=0000
DS=247B ES=247B SS=247B CS=247B IP=0108 NV UP EI PL NZ NA PONC
247F:0108 CD20
2.7 .
-D (Dump)
, 128
, 8 16 .
:
-d
247F: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:offset bytes
.
Debug bytes ASCII ,
.
-D DS.
3 segments -D /
. .
-D SS:0100
2.8 .
-E(Enter).
byte .
. spacebar
. Return

63

. ..
AAAAAAAA.
-e 200
247F:0200 47.41 65.41 61.41 20.41 73.41 6F.41 75.41
247F:0208 24.
41h ASCII A.
/
/ . -d
.
-d200
247: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=100
AAAAAAAA
Program terminated normally
2.9
Debug,
ASCII ? Z.
:
1. DL ASCII ? (3F )
2. DL 2 DOS.
3. 1 DL.
4. (DL) ASCII Z(5B
) 2 4.
5. DOS.
Debug:
A>debug
-a
247B:0100 mov dl,3F
247B:0102 MOV AH,2
64

247B:0104 INT 21
247B:0106 INT DL
247B:0108 CMP DL,5B
247B:010B JBE 102
247B:010D INT 20
247B:010F
:
-G
?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[
Program terminated normally
ASKHSH1.COM
Debug:
-N ASKHSH1.COM
-RBX
BX 0000
:
-RCX
CX 0000
:f
-W
Writing 0000F bytes
-Q
Debug
-L (Load)
:
A>debug
-n askhsh1.com
-l
-u 100 10D
2490:0100 B23F
2490:0102 B402
2490:0104 CD21
2490:0106 FEC2
2490:0108 80FA5A
2490:010B 76F5
2490:010D CD20

MOV DL,3F
MOV AH,02
INT 21
INC DL
CMP DL,5A
JBE 0102
INT 20

-T
(Trace).

:
-t

65

AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000


DS=2490 ES=2490 SS=2490 CS=2490 IP=010B NV UP EI NG NZ AC PO CY
2490:010B 76F5 JBE 0102
-t
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0102 NV UP EI NG NZ AC PO CY
2490:0102 B402
MOV AH,02
-t
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0104 NV UP EI NG NZ AC PO CY
2490:0104 CD21
INT 21
-p
?
AX=0240 BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000
DS=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=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0108 NV UP EI NG NZ AC PO CY
2490:0108 80FA5A CMP DL,5A
-t
AX=0240 BX=0000 CX=000F DX=003F SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0102 NV UP EI NG NZ AC PO CY
2490:0102 B402
MOV AH,02
-p
AX=0240 BX=0000 CX=000F DX=003F SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0104 NV UP EI NG NZ AC PO CY
2490:0104 CD21
INT 21
-p
?
AX=023F BX=0000 CX=000F DX=003F SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0106 NV UP EI NG NZ AC PO CY
2490:0106 FEC2
INC DL
-p
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=0108 NV UP EI NG NZ AC PO CY
2490:0108 80FA5A CMP DL,5A
-T
AX=023F BX=0000 CX=000F DX=0040 SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=010B NV UP EI NG NZ AC PO CY
2490:010B 76F5
JBE 0102


( CALL INT)
-T -P (Proceed)
CALL INT .

66

, ,
.
:

:
CMP DL,5A
SF ( ) : (DL) 5A
.
2.10 .

.
(break points)
. -G
:
-G=</ > </ >
..
-g=100 10d
?@ABCDEFGHIJKLMNOPQRSTUVWXYZ
AX=025A BX=0000 CX=000F DX=005B SP=FFFE BP=0000 SI=0000 DI=0000
DS=2490 ES=2490 SS=2490 CS=2490 IP=010D NV UP EI NG NZ AC PO CY
2490:010D CD20
INT 20
/ 100
010D /
.
/ 010D
(DL) > 5A

CF SF 0, ZF=1.
2.11 Debug .EXE
.COM
.EXE. .EXE
.

.

67

MHNHMA.EXE ,
.
A>debug
-n mhnhma.exe
-l
-u
24A0:0000 33C0 XOR AX,AX
24A0:0002 1E
PUSH DS
24A0:0003 50
PUSH AX
24A0:0004 BAA324
MOV DX,24A3
24A0:0007 90
NOP
24A0:0008 8EDA
MOV DS,DX
24A0:000A BB0000
MOV BX,0000
24A0:000D E80100
CALL 0011
24A0:0010 CB
RETF
24A0:0011 8A17
MOV DL,[BX]
24A0:0013 43
INC BX
24A0:0014 80FA00
CMP DL,00
24A0:0017 7405
JZ 001E
24A0:0019 E80300
CALL 001F
24A0:001C EBF3
JMP 0011
24A0:001E C3
RET
24A0:001F B402
MOV AH.02
24A0:0021 CD21
INT 21
24A0:0023
RET
0000. :
MOV DX,24A3
MOV DS,DX
MOV BX,0000

/ 24A3:0000, :
-d 24a3:0000
24A3:0000 54 45 4C 4F 53 20 50 52-4F 47 52 41 4D 4D 41 54 TELOS PROGRAMMAT
24A3: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 .....
:
-g
TELOS PROGRAMMATOS
68

Program terminated normally



CALL RET . .
-T /:
AX=0000 BX=0000 CX=0150 DX=24A3 SP=00FC BP=0000 SI=0000 DI=0000
DS=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=0000
DS=24A3 ES=2490 SS=24A5 CS=24A0 IP=0011 NV UP EI NG NZ AC PO CY
24A0:0011 8A17
MOV DL,[BX]
DS:0000=54
SP
CALL.
RET , SP...
AX=0254 BX=0001 CX=0150 DX=2454 SP=00F8 BP=0000 SI=0000 DI=0000
DS=24CB ES=24B8 SS=24CD CS=24C8 IP=0023 NV UP EI NG NZ AC PO CY
24C8 :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 CY
24C8 :001C EBF3
JMP 0011
3 DEBUG.
set DEBUG :

A
[address]

Assemble

range address

Compare

[range]

Dump

address [list]

Enter

range list

Fill

[=address [address]..]

Go

value value

Hex

I
L

value
[address [drive:record record]

Input
Load

69

range address

Move

filename [filename]

Name

value byte

Output

Quit

[register-name]

Register

range list

Search

[=address] [value]

Trace

[range]

Unassemble

[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)

70

bytes .
byte byte spacebar. <Enter>
-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 .

71

7

1
1.1 .

.
:
-

8086
. 6.1 .
/
:
1.
2.
3.

8086 ROM RAM .
220, / 00000h
FFFFFh. / /
/ ( I/O) .
/ I/O (ports) 216 = 65.356
(,
, , , ..)
6809 68000
Motorola, /.
/ /:
-

/
/.
/ .

/ / / /
.
/.

, /
/, (control
72

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
. /
IN OUT.
2.2 IN.
:
IN < >, < >
AL AX
byte
.
:

73

/. / byte
( 256) IN . .
IN al,60h ; byte
/.
/ 255 ,
DX , /
, IN ..
mov dx,3f4h ; byte
in al,dx ; FCD 8272A
2.3 OUT.
:
OUT < > , < >
,
IN. :
mov dx,3d4h
mov al,0fh
out dx,al ; 15 / 3b4h.
2.4 8086
8086 16bits.
5
1 . :
byte ( IN OUT
AL) / byte (
D0 - D7) byte ( D8
D15).
( IN OUT
AX), , /.
3

3.1 .

( )
.
,
.

74

,
.
( OUTKIN) byte
0 bit
. 7 bits
.
,
bits.
bits byte
AND OR .
bits AND 1 bits
OR .
:
in al,OUTKIN ;
or al,00000001b ; 1 0 bit
out OUTKIN,al ;
:
in al,OUTKIN
;
and al,11111110b ; 0 0 bit
out OUTKIN,al ;
3.2


,

.
:
in al,OUTKIN ;
or al,00000001b ; 1 0 bit
75

out OUTKIN,al ;
;.
;
; .
in al,OUTKIN
;
and al,11111110b ; 0 0 bit
out OUTKIN,al ;
;.
;
; .
;
;
.
,
. ( LOOP CMP
) .
.

.
3.3

.
.

.
3.4 .

8255 Intel. dip
,
,
8253.
8255 byte A C
/ 60H-62H. ,
(/ 61H) .
bit 0 1 . bit 0
2

. bit 1 .

. .
1. 61h xxxxxx10b

76

2.
3.
4.
5.

61h xxxxxx00b

1 4

XXXXXX bits 61h ,


.
(
1, 0) .

( 2 4). ,
LOOP CX (.3 .4.4).
.com :
16:
code_seg segment
assume cs:code_seg
org 100h
hxos 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 bit
out 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 again
int 20h
; DOS .COM
hxos endp
code_seg ends
end hxos

77

3.5 8253
8253
8086. 8253 40h
42h. ,
bytes byte .
16 bits.

.

.
. .
0 .
18.2
.
, /
0046CH. bytes
byte .
.
1 .
DMA(Direct Memory
Access) DMA
RAM.
2
.
.
. .
0 1 bit 61H 8255
ON (1).
8253 3
0 2 .
8253 43H.
byte 8253
, . bits :
bit 0 0 , 1 BCD
3-1 (0-5)
5-4
00
01 / byte
10 / byte
11 / byte
byte
7-6 00 01 10

78

8253
1. byte 43h, bits
, ,
,
2. 1
bit 0 bit 1 61h.
3. 64k 42h,
byte byte.
1.19 .

:
17:
code_seg segment
assume cs:code_seg,ds:code_seg
org 100h
hxos 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 8255
mov al,10110110b; bits
; 10 2 - 2 byte - 3 -
out command_rec,al;
mov ax,2000 ;
out channel_2,al; byte
xchg al,ah ; byte
out 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 endp
code_seg ends
end hxos
:

79

1. /

bit.
2.
.

8

1
1.1 .


.
(interrupts).
, (.. )

.
:
1. .
2.
3.
CPU .
4. / ,
, ,
/ (
CS IP)
(Interrupt Service Routine ISR).
5.
IP , CS

80

(SR).
.


.
(status register)
.
/

.
,
(Interrupt Handler),
, ,
.

.
IRET(Interrupt RETurn)

CS ,IP SR.
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.
/ low
high , (
) 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..

81

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 .@...@..O....
0000: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..@..@..
0000:00B0 C5 40 19 00 C5 40 19 00-40 01 FD 0D A0 01 FE 0D .@@..@.
0000:00C0 EA C6 40 19 00 EF 00 F0-C5 40 19 00 C5 40 19 00 .@.@..@..
0000:00D0 C5 40 19 00 C5 40 19 00-C5 40 19 00 C5 40 19 00 .@..@..@..@..
0000:00E0 C5 40 19 00 C5 40 19 00-C5 40 19 00 C5 40 19 00 .@..@..@..@..
0000:00F0 C5 40 19 00 C5 40 19 00-C5 40 19 00 C5 40 19 00 .@..@..@..@..
-d
0000: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..
-d
0000: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 ............
-d
0000: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 ............
-d
0000: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 ............
-d
0000: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

82

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 @..@.BB...m.
0000: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.
1.
2.
3.
4.
5.

. (. 8)
.
(IF=0)
(TF=0)
CS, IP
IP / * 4
CS / * 4 + 2
6.
/ CS:IP.
2
2.1
,
/ .

.
2.2 .
(, ,
COM1, ..)
8259 /
INTR.
IF. IF 1
. IF 0 .
CLI 0 IF .
IF CLI STI ,
/.
(maskable).
INTA (INTerrupt Acknowledge =
),
.

83

STI 1 IF .
/
:
1.
1.
2.
3.
4.
5.

. (. 8)
.
(IF=0)
(TF=0)
CS, IP
IP / * 4
CS / * 4 + 2
6.
/ CS:IP.
:
5
8
9
0B COM2
0C COM1
0D
0F
2.3
NMI
,
, ..

/ 2.
2.4 .
.
.
2.5
INT n, n
. 21H
DOS.

. BIOS.
:
INT N
, , 3 :

84

CLI;
PUSHF;
CALL DWORD PTR 4 * N; /
; / 4 * N
2.5 divide by zero 0.
DIV IDIV
.
2.6 single step 1.
TF 1,
.( Trace debug)
2.7 breakpoint 3.
. ( Go
Debug). ,
Byte 0CCH 8086
INT 3. 3

2.8 overflow 4.
INTO OF(Overflow flag)
1.

.
8086.
8086
----------------------------------------------------------

----------------------------------------------------------00H

01H

02H

03H

04H
(overflow)
05H
BIOS
08H
,
09H

0BH
COM2
0CH
COM1
0DH
XT / AT LPT2
0EH

85

0FH
10H
11H
12H
13H
14H
15H
16H
17H
18H
19H
1AH
1BH
1CH
1DH
1EH
1FH
20H
21H
22H
23H
24H
25H
26H
27H
28H
29H
2AH
2EH
2FH
33H
40H
41H
42H
43H
44H
4AH
5CH
67H
70H
75H

LPT1
BIOS

BIOS
BIOS
BIOS
BIOS
BIOS
BIOS
ROM-BASIC

BIOS
CNTRL-BREAK
08H ()
/
/
/
DOS
DOS
/
CNTR-BREAK DOS
DOS
DOS
DOS
DOS

DOS (idle)
DOS
MS-
(Shell) DOS
DOS
(spooler DOS , print)

,

EGA BIOS
EGA
EGA
70H
NetBIOS
EMS
AT

3 .
3.1

86


.
BIOS
.

.
INT n n
.
,
.
.
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 <-----
AH <------ 35H DOS
INT 21H
oldvect <----- ( offset )
oldvect + 2 <------ ES ( segment )

ISR

87

.
.
2.
, .
.
,
(.
). ,
.
3. 25H DOS. AL
, DS:DX / .
AL <---- < >
DS <---- Segment .
DX <---- Offset
AH <---- 25H
INT 21H
4. DOS ,
31H DOS.
DX <--- ,
(1 = 16 bytes)
AH <---- 31H
INT 21H
3.3 .

1 PUSH
2 ,
SS,SP .
3 ,
.
4
5 SS,SP
6 POP
PUSH.
7 IRET.

88

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
89

; . BIOS (ROM)
; (segment) 0F000h
; :
; ) (MAIN PROCEDURE)
; ) 5H
;
;
; 5
; (attributes)
; (VIDEO MEMORY)
; 0B8000 H ( )
;
18:
TITLE INTPRINTSCR ;
PAGE 65,80 ;
CODE__SEG SEGMENT PUBLIC
assume cs:CODE__SEG, SS:SOROS,ds:data__seg
MAIN PROC FAR
; 5 BIOS
XOR AX,AX ; AX
MOV ES,AX ; ES
MOV AX,WORD PTR ES:[22] ; AX
; (SEGMENT)
; 5 (5 * 4 + 2 = 22)
CMP AX,0F000H ;
;
; RAM (
; / < 0F0000 h)
JB EXV ; DOS
; 5 35H DOS
; / () OLD__VECTOR__5
MOV AX,DATA__SEG; DS
MOV DS,AX ;
MOV AL,5
MOV AH,35H
INT 21H
; ES:BX
; OLD__VECTOR__5
MOV WORD PTR OLD__VECTOR__5,BX ;
MOV AX,ES
MOV WORD PTR OLD__VECTOR__5[2],AX;
; 6 5
; 25H DOS
MOV AX,CODE__SEG ; DS
MOV DS,AX ;

90

MOV DX,OFFSET CODE__SEG:MAIN__INTER; DX


;
MOV AL,5 ; AL No
MOV AH,25H ; 25H
INT 21H ; DOS
; 3 DOS
;
; 5h. 31H DOS
MOV DX,100H ;
; (1 16 BYTES)
MOV AH,31H ; DOS
INT 21H ;
EXV:
PUSH DS ; DOS
XOR AX,AX ; INT 20H
PUSH AX ; PSP (
RETF ; )
MAIN ENDP
; 5H
MAIN__INTER PROC FAR
push AX;
PUSH BX;
PUSH CX
PUSH DX
PUSH DS
PUSH ES
CLI;
MOV AX,DATA__SEG
MOV DS,AX; DS
MOV AX,SS
;
MOV OLD__SS,AX
MOV OLD__SP,SP
MOV AX,new__stack
;
;
MOV SS,AX; DS
mov SP,100h
PUSHF;
CALL DWORD PTR OLF__VECTOR__5;
; 5
STI ;
CALL REVERSE_SCR;
;

91

;
MOV SP,OLD__SP
MOV AX,OLD__SS
MOV SS,AX
POP ES;
POP DS;
POP DX;
POP CX
POP BX
POP AX
IRET ;
;
;
;
; ()
MAIN__INTER ENDP
REVERSE__SCR PROC NEAR
STI;
;
;
;
; MOV BX,0B000H
;
; VGA
;
MOV BX,OB8OOH
MOV ES,BX
MOV BX,0; BX
MOV CX,2000 ;
; 80 25 = 2000
AGAIN:
INC BX; 1
;
MOV AL,BYTE PTR ES:[BX] ;
CMP AL,127 ;
JA A ; A
OR AL,10000000B ;
JMP B
A: AND AL,01111111B ;
B: MOV BYTE PTR ES:[BX],AL ;
;
INC BX; ( )
LOOP AGAIN ;
; AGAIN 2000
RET ;

92

REVERSE__SCR ENDP
CODE__SEG ENDS
DATA__SEG SEGMENT
OLD__VECTOR__5 DD 0
OLD__SS DW 0
OLD__SP DW 0
; NEW__STACK DB 100H DUP (0)
DATA__SEG ENDS
NEW__STACK segment
Db 100 dup (0)
New__stack ends
SOROS SEGMENT PARA STACK
DB 256 DUP (0)
SOROS ENDS
END MAIN

9
ASSEMBLER
1 MACRO
macro :
, .
Assembler ,
.


macro.
macro
. macro ( ),
MACRO. ENDM
macro. macro .
macro macro
. : macro pusha (pushall) ,
popa (popall) clrscr ,
:
PUSHALL MACRO
PUSH AX
PUSH BX
PUSH CX
PUSH DX
93

PUSH BP
PUSH SI
PUSH DI
ENDM
POPALL MACRO
POP DI
POP SI
POP BP
POP DX
POP CX
POP BX
POP AX
ENDM
CLRSCR MACRO
PUSHALL
mov cx,0;
mov dx,2479h;
mov bh,7; normal
mov ah,06; BIOS
mov al,00;
int 10h; BIOS
POPALL
ENDM
macro . macro
MACRO .
MACRO .
macro .
macro, ,
. macro .
MACRO :
GOTOXY MACRO X,Y
mov ah,0fh
int 10h; bx
mov dl,Y;
mov dh,X;
mov ah,02; BIOS
int 10h ; BIOS
ENDM
MACRO 9 DOS
PRINT_DOS__STRING MACRO STRING
lea dx,string; / dx
mov ah,09; DOS
int 21h ; DOS

94

ENDM
macro ,
: LOCAL
INPUT_DIGIT MACRO; macro
LOCAL UP,TELOS ,MHDEN ;
UP :
;
MOV AH,08; ENTER 0
INT 21H
CMP AL,13
JE MHDEN
CMP AL,0
JB UP;
CMP AL,9
JA UP;
MOV DL,AL ;
MOV AH,02 ;
INT 21H
JMP TELOS
MHDEN:
XOR AL,AL; al
TELOS:
ENDM
,
macro .
, call
,
macro ,
macro . call
, macro
.
2 INCLUDE

assembly .
macro equ . INCLUDE
macro
equ
assembly . INCLUDE
assembly .
assembler include
, ,
. macro
LIB.MAC

:

95

19:
INCLUDE LIB.MAC; macro
;
SOROS SEGMENT PARA STACK
DB 256 DUP (0)
SOROS ENDS
code_seg segment
assume cs:code_seg,DS:DATA_SEG
MAIN proc far
push ds; DOS,
xor ax,ax; (SEGMENT) PSP
push ax; PSP
mov ax,data_seg
mov ds,ax
CLRSCR; macro
GOTOXY 5,10; macro 5,10
PRINT_DOS_STRING MHNHMA; macro
again:
INPUT_DIGIT
cmp al,0
jne again
ret; DOS INT 20h PSP
MAIN endp
code_seg ENDS
DATA_SEG SEGMENT PUBLIC
MHNHMA DB "EISAGOGI AKERAIOY ARITMOY $"
DATA_SEG ENDS
END MAIN

, NUM
INCLUDE , include
include
, .
include macro, equ,
, segment ...
assembly
include.
3.
3.1

96



assembler linker
.

.
.
(Linker).

,
.
.
.
(modulus),
.
EXTRN
PUBLIC.
.
num1 num2.
MODULE1.ASM MODULE2.ASM.
20:
module1.asm
Code_seg segment public
assume cs:code_seg,ds:data_seg
extrn emfan_decimal:near,new_line :near,num2 :word ; /
;
public nea_grammh
;
;
kyrioproc proc far
xor ax,ax; ax
push ds ; / PSP
push ax ; , DOS.
mov dx,data_seg
mov ds,dx ; DS
mov dx,num1 ; dx
call emfan_decimal; emfan__decimal
call new_line;
mov dx,num2 ;
call emfan_decimal; emfan_decimal
ret ; DOS
kyrioproc endp

97

code_seg ends
;
data_seg segment public
num1 dw 12345
nea_grammh db 10,13,'$'
data_seg ends
soros segment para stack
db 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 ; ax
mov si,10 ; si
xor 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 21h
loop next_digit ;
ret
emfan_decimal endp
new_line proc near
mov dx, offset ds:nea_grammh; dx /
mov ah,09;
DOS
int 21h;
ret

98

new_line endp
code_seg ends
;
data_seg segment public
num2 dw 6789
data_seg ends
end ;
;
data__seg segment public
num2 dw 6789
data__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 module1
module2 , .
data__seg .
(STACK)
,
PUBLIC.
3.3 PUBLIC EXTRN

99


/ .
linker.
PUBLIC , /
PUBLIC
.
Public emfan__decimal,new__line,num2
module2.asm, emfan__decimal,new__line
num2
module1. PUBLIC
PUBLIC.
EXTRN ,
PUBLIC. EXTRN
(label) : . ,
:
FAR
NEAR

BYTE byte
WORD byte
DWORD byte

Extrn emfan_decimal;near,new_line:near,num2:word
module1 :
1. emfan_decimal,new_line
( module2.asm).


2. num2 2 byte,
0 64k.
emfan_decimal,new_line,num2
public module2.asm.

100

10
ROM-BIOS & DOS
1 ROM-BIOS
1.1 .
ROM-BIOS Read Only Memory Basic
Input Output System (
).

.
(, ..)
.
BIOS
. 7
. BIOS
.

, (
IN OUT).
.
BIOS
.
BIOS
,
BIOS RAM / 0400H 0500h.
BIOS
.
BIOS ,
. BIOS
.
BIOS / /
.. BIOS
. BIOS
DOS. INT n ,
n BIOS,
.
BIOS.
BIOS
.
BIOS /
0F0000h 0FFFFFh.

101

2.2 .

Int 10H

AH=0h
AL=

Int 10H

=1h
CH= (0-4)
CL= (0-4)

Int 10H

AH=2h
BH=
DH=
DL=

Int 10H

AH=3h
BH=

Int 10H

AH=6h
BH=

AL= ,
0
CH=
CL=
DH=
DL=

Int 10H

AH=7h
BH=

AL= ,
0
CH=
CL=
DH=

Int 10H

Int 10H

AH=9h
BH=
AL=Ascii
BL=
CX=

Int 10H

AH=0Ah
BH=
AL=Ascii
BL=
CX=

Int 10H

AH=0Ch

DL=
AH=8h
BH=

CH= (0-4)
CL= (0-4)
DH=
DL=

AH=
AL=Ascii

102

BH=
AL=
CX=
DX=

Int 10H

AH=0Dh
BH=
DX=
CX=

AL=

Int 10H

AH=0Eh
BH=
AL=Ascii
BL=

Int 10H

AH=0Fh

Int 10H

AH=013h
AL=
00 BL

01 BL

02


03


BH=
BL=
CX= bytes
DH=
DL=
ES=/
BP= /

AH=
AL=
BH=

2.3 .

Int 13H

AH=00h
DL=
00h-7Fh
80H-0FF

CF=0 AH=0

AH=

Int 13H

AH=01h
DL=
00h-7Fh
80H-0FF

AH=
00
01
..

103

Int 13H

Int 13H

AH=02h
AL=
(0-9)
CH=*
CL=
DH=
DL=
ES:BX=/

CF=0
AH=0
AL=
CF=1
AH=

AH=03h
AL=
(0-9)
CH=*
CL=
DH=
DL=
ES:BX=/

CF=0
AH=0
AL=
CF=1
AH=

10
. 8 CH.
7 8 CL. 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
CTRL
Bit 3 ALT
Bit 4 SCROLL
LOCK

104

Bit 5 NUM LOCK

Bit 6 CAP LOCK

Bit 7 INS

Int 16H

AH=05h
CH=

CL=Ascii

CF=0 AL=0
CF=1 AL=1

2.6
Int 17H

AH=00h
AL=Ascii
DX=
00H LPT1
01H LPT2
02H LPT3

AH=

2.8 .

Int 11H

AX=
Bit 0 1

Bit 1 1

Bits 2-3 RAM

00 16kb
01 32kb
10 48kb
11 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
modem
Bits 14-15

2. DOS

105

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 ROMBIOS.
DOS
BIOS.
DOS.
. :
) (,
, , ).
) ( ).
) .
)
FCB .
) DOS
) .
) ,
.
..

106


DOS.
DOS .
2.2 DOS

INT 20H

CS=/

(PSP)


.COM

INT 21H

=00
CS=/

(PSP)


.COM

INT 21H

AH=01H

INT 21H

AH=02H
DL=Ascii

INT 21H

AH=03H

INT 21H

AH=04H
DL=Ascii

INT 21H

AH=05H
DL=Ascii

INT 21H

AH=06H
DL= Ascii

DL=0FFh

ZF=0

AL=Ascii

INT 21H

AH=07H

AL=Ascii


CNTR-BREAK

INT 21H

AH=08H

AL=Ascii

AL=Ascii

AL=Ascii

107

CNTRBREAK

INT 21H

AH=09H
DS:DX=/

ENTER. O
CR

INT 21H

AH=OAH

0 byte
bytes
.

1 byte
bytes

2 /
bytes

INT 21H

AH=0BH

AL=0FFh

AL=00h

INT 21H

AH=0CH
AL=
DOS
(01h, 06h, 07h, 08h)

AL=Ascii

INT 21H

AH=0DH

INT 21H

AH=25H
AL=

DS:DX= /

INT 21H

AH=2AH

CX= (19802099)
DH=(1-12)
DL= (1-31)
AL=
(0-6
0=)

INT 21H

AH=2BH
CX=
DH=
DL=

AL=

00
0FFh

INT 21H

AH=2CH

CL=(0-59)
CH= (0-24)

108

DH=
(0-59)
DL=
(0-99)

INT 21H

AH=2DH
CL=
CH=
DH=
DL=

AL=

00
0FFh

INT 21H


DOS

AH=30H

AL=

AH=

INT 21H

AH=31H
AL=

DX= (1
= 16 Bytes)

INT 21H

AH=35H
AL=

ES:BX=/

INT 21H

AH=39H
DS:DX=/


DOS

CF=0
CF=1
AX=03
AX=05

INT 21H

AH=3AH
DS:DX= /


DOS

CF=0
CF=1
AX=03
AX=05
AX=10

INT 21H

AH=3BH
DS:DX= /


DOS

CF=0
CF=1
AX=03

.
3.10 0 AL=3
AH=10

109

AH=3CH
DS:DX= /


DOS

CX=

00H

01H

02H
04H

08H
20H

CF=0
CF=1
AX=03
AX=05
AX=04

INT 21H

INT 21H

AH=3DH
DS:DX= /


DOS

AL=

Bits 0-2
000
001
010

CF=0
AX=
CF=1
AX=03H
AX=05H
AX=04H
AX=01H
AX=02H
AX=0CH

INT 21H

AH=3EH
BX=

CF=0
CF=1
AX=06H

INT 21H

INT21H

AH=3FH
BX=

CX= bytes
DS:DX=/

AH=40H
BX=

CX= bytes
DS:DX=/

CF=0
AX=

CF=1
AX=05
AX=06H
CF=0
AX=

CF=1
AX=05
AX=06H

110

INT 21H

AH=41H
DS:DX= /


DOS

CF=0
CF=1
AX=03
AX=05
AX=02

INT 21H

AH=42H
BX=

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=49H
ES=/

CF=0
CF=1
AX=07H

AX=08H

INT 21H

AH=4CH
AL=


111

8086
8086,
.

AAA Adjust result of Ascii Addition
AAA

AAA ASCII AL
AX unpacked BCD .
:
1. LS nibble al 0 9 3
2. LS nibble al 0Af 0Fh AF (Auxiliary Flag) = 1,
6 AL, 1 AH, 1 AF
3. MS nibble AL
. AX=0535h, BL=39 :
ADD AL,BL
AAA
AX=0604h
AAD Ascii Adjust for Division
AAD

AAD AH AL unpacked BCD ,


AL. :
1. AH 0AH
2. AH AL
3. AH
AAM Ascii Adjust of Multiplication
AAM

AAM AL,
unpacked BCD . :
AL 0Ah AL AH
AAS Ascii Adjust of Subtraction
AAS

112

AAS AL
Ascii . :
1. LS nibble al 0 9 AF=1, 3
2. LS nibble al A F AF (Auxiliary Flag)=1, 6
AL, 1 AH, 1 AF
3. MS nibble AL
4. CF = AF
ADC ADd with Carry
ADC < 1> , < 2>

1 2 Carry Flag
ADD ADDition
ADD < 1> , < 2>

1, 2
AND AND logical
AND < 1> , < 2>

2 1
CALL CALL procedure
CALL </ >

5
CBW Convert Byte to Word
CBW

AL word :
AL >= 80H AH=0FFH
AL < 80H AH=00
CLC Clear Carry Flag

CLC
Carry Flag
CLD Clear Direction Flag

113

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>

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

114

. AL = 68h BL = 28h,
ADD AL,BL
DAA
AL = 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,BL
DAS
AL = 39H 3FH
DEC DECrement
DEC <>

1
DIV DIVine
DIV <>

byte, AX , AL
AH. word, DX:AX
AL AH.
ESC ESCape
ESC < >

data bus /
.
,
.
HLT HaLT

115

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
116

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 Equal
JLE/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

117

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
/ byte.

<>

0.

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 <>,<>

.
.
118

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 < 1> , < 2>

2 1.
OUT OUTput
OUT <>,<>


POP POP from top of stack
POP <>

,
SP . word.
POPF POP Flags register from top of stack

119

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 (RETurn
Near) RETH (RETurn Far). 5.
ret , ,
SP . RET
Pascal
PUSH (CALL) .

120

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>

1 2 Carry Flag.
SCAS SCAn String
SCAN/SCANS/SCANW

/ DS:SI
. 3.
SHR Shift Right
SHR <>,<>

121

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 < 1> , < 2>
2 1
TEST TEST
TEST < 1> , < 2>

AND 2 1,
.
.
WAIT WAIT
WAIT

/ ,
TEST.
TEST.
.

122

XCHG exchange
XCHG < 1> , < 2>

1 2.
XLAT exchange via Look up At Table
XLAT

/ DS:[BX+AL] AL. AL
.
XOR eXclusive OR
XOR < 1> , < 2>

bitwise XOR 2 1.

123



/ .


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 2 7 b62 6 b5 2 5 b4 24 b3 2 3 b2 2 2 b1 2 1 b02 0

124

:
10100110
:
1 128 + 0 64 + 1 32 + 0 16 + 0 8 + 1 4 + 1 2 + 0 =
166 .

2 0. .. 135
:
135
67
33
16
8
4
2
1

:
:
:
:
:
:
:
:

2
2
2
2
2
2
2
2

= 67
= 33
= 16
= 8
= 4
= 2
= 1
= 0

1
1
1
0
0
0
0
1

>
>
>
>
>
>
>
>

1 ( bit)
1
1
0
0
0
0
1 ( bit)

:
1 0 0 0 0 1 1 1
bit
00000000 11111111 0 28
- 1 ( 0 255).

CF .
..
1 0 0 0 0 0 0 0
(128)10
+(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 :

125

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 7
bit.
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

6 bit 7
bit
.

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 .

126


HEX
LSD
0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

MSD
BITS
0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

0
0000
NUL
SOH
STX
ETX
EOT
ENQ
ACK
BEL
BS
HT
LF
VT
FF
CR
SO
SI

1
0001
DLE
DC1
DC2
DC3
DC4
NAK
SYN
ETB
CAN
EM
SUB
ESC
FS
GS
RS
US

2
0010
SPACE
!

#
$
%
&

(
)
*
*
,
.
/

ASCII
3
0011
0
1
2
3
4
5
6
7
8
9
:
;
<
=
>
?

4
0100
@
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O

5
0101
P
Q
R
S
T
U
V
W
X
Y
Z
[
\
]
^
_

6
0110
`
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o

7
0111
p
q
r
s
t
U
v
w
x
y
z
{
|
}
~
DEL

ASCII
NUL -
SOH
STX
ETX
EOT
ENQ
ACK
BEL -
BS -
HT
LF
VT
FF
CR
SO
SI
SPACE

DLE
DC1
DC2
DC3
DC4
NAK
SYN -
ETB
CAN -
EM
SUB -
ESC
FS -
GS
RS
US
DEL

127



ASSEMBLY 8086.
,
, .
.

ASCII.

D ( Decimal ) . ..
14 13
byte .
DB 14,13D
B (Binary).

0 1. .. :
DB 01010101B, 11111111b

byte .

H (Hex). ,

.

:

0
1
2
3
4
5
6
7
8
9
A
B
C
D
E
F

0000
0001
0010
0011
0100
0101
0110
0111
1000
1001
1010
1011
1100
1101
1110
1111

0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

128


. ..

1 4 A F 0 0 0 1 0 1 0 0 1 0 1 0 1 1 1 1
.
.

0,
. ..

CH
(High) CX
0CX
12 . :
DB 0ACH,12H

byte .

.

129

ASSEMBLER 8086 DOS

1989

Kris jamsa

Programming the complete Reference

1991

8088 8086
IBM PC/TX &

1987

Microsoft

Microsoft. MS-DOS Operating System For


Personal Computers Compatible with IBM.

1990

Leo J. Scanlon

8086/88 ASSEMBLY LANGUAGE


PROGRAMMING

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 - George


Alexy - -

THE 8086 BOOK

1980

Borland International

Turbo Assembler Users Guide

1988

Borland International

Turbo Assembler Reference Guide

1988

130

You might also like