Professional Documents
Culture Documents
8086
8086 Intel, ( 1978)
16-bit.
, .
1. 8086
8086 ,
1, :
1
-
"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).
3. .
/ 8086 DIL (Dual In
Line) 40 (pins) .
(Minimum) (Maximum).
5V 0V /.
Minimum
/ , Maximum
8288.
8087
8089.
8086 (Multiplex) . 20
, (Address
3
:
-
GND .
NMI .
INTR .
CLK
CPU.
RESET .
,
0FFFF0h (IP=0000,CS=0FFFFh).
/ ROM JMP
6
/ .
bootstrap loader.
-
READY
/,
.
TEST WAIT
.
RD
.
S3, S4
/.
S5 (IF).
S6
.
S0, S1, S2
(Bus Cycle).
LOCK
.
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).
/ /
:
<
/ / :
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
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
, 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
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
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
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
SHR
CF
0
SHR bit .
bit (. 0) CF bit 0.
2.
26
SAR
CF
SAR bit
bit
.
2.
4 :
ROR
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 <>
:
-
( -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).
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
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
:
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
60
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
( 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
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
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
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
82
/ 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
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 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=.
:
-
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
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
, 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.
cx 1 / cx <> 0
0 (ZF = 0).
/ byte.
MOV MOVe
MOV <>,<>
.
.
118
. 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
.
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
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
1989
Kris jamsa
1991
8088 8086
IBM PC/TX &
1987
Microsoft
1990
Leo J. Scanlon
1984
James W. Cofron
1987
Peter Norton
1986
Peter Norton
1986
Rodert Jourdain
1987
1980
Borland International
1988
Borland International
1988
130