برنامه نویسی به زبان اسمبلی برای کامپیوترهای شخصی
DESCRIPTION
برنامه نویسی به زبان اسمبلی برای کامپیوترهای شخصیTRANSCRIPT
-
5/27/2018
1/53
AssemblyProgramming
-
5/27/2018
2/53
(RAM) : OO(Ram)
:ROM. . / ((BIOS68K 960K . .RAM ROM
. RAM: RAM RAM.() RAM .ROMRAM.
RAM.
-
5/27/2018
3/53
0526H1315 .05
29. :
.
.
.
. 64k
. .
-
5/27/2018
4/53
. . (cs) .64k
.
64k" . ((DS
."
(ss).
.
088EOH 038E 038EOH . .
[038[0.
-
5/27/2018
5/53
) ) 65,535 FFFFH0000H. 01 .00 65535
..DS 038EOH038E[o]H0032H
.
. 03912H
,.
PC : .8086/8088 ( ) nnnn[o] FFFF[o]H o.
-
5/27/2018
6/53
1111 F o.
: 80286 FFFFF[o] .
.
: / 80386/486 . . .
.
SS,DS,CS .
.
o.
-
5/27/2018
7/53
.:CS (Ip)
.cs.:. DS .
. : SS . . ((sp
ss. : ES ES() DI() ES
. :. FS,GS
BP,SP,IP:
IP(IP): IP.CSIP IP. DEBV6 EIP IP.
-
5/27/2018
8/53
514H IP39B4[o] H CS . ,CSIP.
IP CS 39B40H+514H=3A054H .
ss:(... ( BP() SP .
SP: (SP) ss ESP.
.
BP: (BP) .
EBP.
. DX,CX,BX,AX . AX. ALAH
EDX,ECX,EBX,EAX.
-
5/27/2018
9/53
OECX,BX,AX: MOV AX,OO 2/MOV BH,OO 3/MOV ECX,OO / :AX
AX . .
: BXBX ....
.. CX:CX cx
. / DX:DX. AX,DX
.
. :
DI,SI. : SI DSSI
ESI.. : DI
DIES.
-
5/27/2018
10/53
(Flags) flag
.() () OF
. () DF
. () IF
. .() TF FlagDEBVG
. =) 1 = o) () SF
zr=o) () ZF zf=1)
()AF.
. () PF()() CF
.
-
5/27/2018
11/53
Flag.
CF,ZF,SF,OF: Flag . DF
flag .
-
5/27/2018
12/53
-
5/27/2018
13/53
. Ilo DOS.
. . :Dos
. : /
.. :
. : .
-
5/27/2018
14/53
.
: .
: CO.MMAND.Com,MSDOS.SysIO.sys :
: IO.sys / / .
IBMBIO.COM. pc-Dos : MSDOS.sys . /
. pc-DosIBMDOS.COM : COMMAND.COM .
.
BooT Process .(Cold boot)CS . IP FFFF[o] H
-
5/27/2018
15/53
FFFFoH CS:IP ROM.
FFFFOH :
. .
40[o]. .
(boot start loader) MSDOS,To.sys To.sys To.sys. DOS DOS .MSDOS.sys ConFIG.sys. COMMAND.COMMSDOS.sys . AUTOEXE.BAT
. 640k
.
-
5/27/2018
16/53
- ROM .
. Dos Llo . Dos --.
.
COM. EXE,COM COM.
-
5/27/2018
17/53
) EXE . ) EXE
: . .EXE
.(266 (PSP .
. PSP. . .PSPES,DS
( .CSLP ).
. .SSSP .
. SS:SP,CS:LP ESDSPSP
. .EXE,COM
. COM .EXE
-
5/27/2018
18/53
SS (). SP . . :
. POP,PUSH
6P .PUSHSP POP SP
. . EXE
. popA,pushA. : popF PushF ()
.
-
5/27/2018
19/53
. . .
. DS cs EXE
IP. .
.
Wordx,DW
Wordx DW o (). MOV CX , Wordx WordxCX
MOV CX, 25 CX MOV CX , DX CXDX MOV CX, [DX] DXCX
. MOV -. -MOV
-
5/27/2018
20/53
-MOV . MOV -DS:DX DS ) DX:
CX ( .
.
. Comment.
ADD , MOV
SEGMENTEND SIZE,FAR
-
5/27/2018
21/53
.Model , Data .
((label:
..MAIN .
MAIN PROC FAIR : .
. ZQZA -
(.) 09 - ($)(@) (-) () -
() () (state ments)
.: .ADD,MOV.
(directives). .
.
-
5/27/2018
22/53
Title,Page Title,Page
. Page : Page
. Page{} {} : Page
. Title: Title
. SAGMENT
. EXE ........
segments , : ENDS.
segment Begin segment ENDS End segment
(align) : : .((combine((class
segment ""
-
5/27/2018
23/53
:. PARA
10H. para.
: public , common , stack .:
. AT Sgment PARA stack
common , poblic
none. ( ) (calss):code . stackdata ()
. PROC
PROC.
ASSVME DS EXESS
CS.
-
5/27/2018
24/53
. ASSVME.
ASSVME ss : :CS:DS
ss ss : .
ASSVMEES ES. :
ES ES:nothing.
ASSVME
. END
ENDPENDS END. .
END [procname]
PROC .
FAR.
-
5/27/2018
25/53
psp EXE
.: -CS.
-sspsp.
.
...MODEL
: large , compact,medium,small,tiny
Tiny * *
small medium compact Large
liny ) comTiny TASM4,MASM6.( 64k.smallmodel 64k64k
Assume.
-
5/27/2018
26/53
stack : {}
Data
code {}Ends segment
(): . txet,data.() text,data,stack
. ds
MOV DS, AX ,MOVS AX , @data EXIT ,Startup
.Exit , MASM .startup..startup INI 21h4chExit
. TASMExitCode,startup code.
: EXE ./. DWDB: ( ).
-
5/27/2018
27/53
. [name] Dn expressino ..
: . nameDW( ) DB: : Dn())DD))DF))DQ))DT) MASM6 .
Tword,Qword,Fword,Dword-22/word-Byte. ((expression .
: FLDA DB ? ()
FLDA DB/Byte 21,22,23,........ FLDA.) FLDA+o)
FLDA+lMOV AL,FLDA+3
AL(18h)24 ()Dupname DN.
1/ DW/word 10 Dup (?)
2/ DB/Byte 5 Dup (12)
3/ DB/Byte 3 Dup (5 Dup 4 )
(44444)4 .
:
-
5/27/2018
28/53
PC PC (Byte) DB,MASM. DB()
:
23/ DB , strawberry jam
DB crazy sams CD Emporium . DB Crazy sam s CD Emporium
: . H .
. :
:1,0B
Test,xor,OR,AND.
-
5/27/2018
29/53
D :
. :0FH.
.
:
.
. .RET CLC () () .
.[lable:] operation operand 1,operand 2
.
.Worda Dw ? define a word
Mov DX,Worda ,register in first operand
-
5/27/2018
30/53
Mov worda . cx ,register in second ... ....
Mov EDX , EBX ,register in both operand
.
) (.
.Count DB ?
ADD BX,25 ,add 25 to BX
Mov count,50 ,move 50 to count
( DC.( Cmps,movs
.Worda DW o ,Define a word
Bytea DB o ,define a Byte
Mov BX, worda
ADD ByteA , DL
Mov CX,DS:[38BOH]
INC ByteA PTR [1BOH]
) (DS38BOH
38BOHmove cx. 1BOH.
-
5/27/2018
31/53
[1BOH] Byte PTR.
Codetbl DB 20 DUP (?)
Mov CL, Codetbl [3]
Mov CL, Codetbl+3
mov mov+.
BP,SI,DI,BX . SI,DI,BX . DS:SI,DS:DI,DS:BX DS SS:BPssBP
. . . .[[DI
DI.MovBXDataval.MovDataval BX Dataval DB 50 .MOV BX ,offset DatavalMOV [BX],25
-
5/27/2018
32/53
.mov Dataval ,25MOV . mov [BX+2] ,o Dadval: [BX+DI]:
BXDI. SIDI,BX,BP
.ADD CL,[BX] ,2nd operond =DS:BX
MOV Byte ptr[DI],25 ,1st operond =DS:DI
ADD [BP] ,CL ,1st operond =SS:BP
MOV .:Data TAB () Data TABBL
DI. Datatab DB 40 DUP(?)
MOV datatab[DI] ,BL
()
. MOV
MOV .() (
-
5/27/2018
33/53
/ / . MOV [lalde:] MOV /
MOV:Bytefld BW ?Wordfld DW ?
.MOV EDX,ECX ,Register to Register
MOV DS , BX ,Register to segment register
MOV Byteefld,DH ,Register to memory,direct
MOV [DI] ,BX ,Register to memory , Indirect .
MOV CX,40 ,Immediate to register
MOV Bytefld,40 ,Immediate to memory-direct
MOV Wordfld [BX],40 ,Immediate to memory-indirect
.MOV CH,Bytefld ,memory to Register,direct
MOV CX,Wordfld [BX] ,memory to Register,indirect
.MOV CX,DS ,segment register to Register
MOV Wordfld,DS ,segment Register to memory
. CH
MOV: CL -()--
--.. :
-
5/27/2018
34/53
:. :
. .
. .
.
.
(1) (o) .AH ooo .27-1.
woAX1.
MOVMOV AH,OO 10110 100 OOOOOOOO
-
5/27/2018
35/53
(100)AH .MOV
:MOV AX,00 10111 000 00000000 00000000 AX(ooo)
.reg,w.
((mode :
1110,01,00mod .
Rey m r 8R/m
. (/) d
BXAX.MOV BX,AX 00 00 00 11 11 011 000(r/m)(ooo) reg(011)mod(11)D=q . w=l . (011)BX(ooo)Ax
.DEBU6.
: MOV
-
5/27/2018
36/53
. () . mov (MOVS)
. :.
MOV///: .:
100010 dw mod reg r/m :Reg / reg/mem
1100011w modooor/m .....data....data ifw=1
1011wreg......data......data if w=1 lmmed: 1010000w addr-low addr-high mem: 1010001w addr-low addr-high mem
10001110 mod Osgr/m (sg=seg reg) segregrem/mem 10001100 modosgr/m (sg=seg reg) reg/memseg reg
9 (Interrupt= ) INT INT21 H INT10H.
.
-
5/27/2018
37/53
() AH .
INT10 H INT 21 H. . DOS
. INT21 H
. enterODH
((carriage Return=CR.
(). ()
.
OOH OOH OO OO
4FH OOH 79 OO 27H/28H OOH 39/40 12
OOH 18 H OO 24
-
5/27/2018
38/53
O4 H 18 H 79 24 .2K 4KBOOOCOJH 2K .
16kB800[0]h.. (graphics mode)(text mode)
). (
INT 10 H- . AHO2 HDH BH O ()
. DL. .O8:
MOV AH,O2 H ,Request set sursorMOV BH,OO ,Page number O
MOV DH,O8 ,Row 8
MOV DL,15 ,Solumn 15
INT 10H ,Call interrupt service.
-
5/27/2018
39/53
INT 10 HO6H
. O6H=AH
. =AL OOH =( ) BH
=CX: =DX:
()CX,DX . AL : OO:OOH CX: 18:4FHDX.71H
()(). MOV AX,0600H ,AH =06(scroll),AL=oo(full screen)
MOV BH,71H ,white background (I), biue foreground (1)
MOV BH,0000H ,upper left row: column
MOV DX,184 FH ,lower row : column
INT 10 H ,Call interrupt serviceoo05
0500HCXoc4FHDX: 184FH
.09HINT 21H
.
-
5/27/2018
40/53
CUSTMSG DB , customer name ? $
customer name?$ .DB $
$. LEA 09HAH
DXINT 21 H.MOV AH,09H
LEA DX,Custmsg ,load address of prompt
INT 21H
INT . . .
. 09H
FFH,ooH.
.20 H. : INT 10 H06 H
.INT O . O6 H.
-
5/27/2018
41/53
. AL .AL
:AL= (00) CX=: BH= DX=: :MOV AX,0601 H ,Request Scroll upone Line
MOV BH,61 H ,Bronn Background , Blue Foregronnd
MOV CX,0000 ,From 00:00 throoghMOV DX,184 FH ,24:79-(Full screen)
INT 10H ,call interrupt service
. ROW .
O. ..
(CMP ROW,22)ROW. ROW .
ROWOO. ROW((INC ROW . AL.DXCX DX:CX () .: :
:::MOV AX,0607H ,request scroll 7 lins
MOV BH,80H ,cyan background,black foregroond
-
5/27/2018
42/53
MOV CX,OC19 H ,from cow12,column25 tehrough
INT 10 H ,call int errupt- service
. .
. : INT 10 HO9 H
.:
AL= BL= BH= CX=
AL CX " C60 .
"((01H.MOV AH,09H ,request display
MOV AL,01H ,happy face for display
MOV BH,O ,page number o (normal)
MOV BL,16H ,blue background ,brown foreground
MOV CX,60 ,60repeated characters
INT 10H ,call interrupt service
(Bell) Tab
. 09 H01 CX .oo
-
5/27/2018
43/53
cx )AL (LOOP 02HINT 10H.
: Dana porter .
: 11/2=5 . 40-5=35 .
page 60,132
Title Ao9CTRNM (EXE) Accept names ,Center on screen
.model small .stack 64
Data
Parlist labeel byte
Maxnlen DB 20
Actulen DB ?
KB name DB 21 DUP
Prompt DB name? , $
.Code .886
Alomain proc far ,MOV AX.@ data,MOV DS,AX
MOV ES,AX, CALL QLOCLR
AL cx "
"((01H:MOV AH,09H ,Request display
-
5/27/2018
44/53
MOV AL,01H ,Happy face for display
MOV BH,O ,page number o (normal)
MOV BL,16 H ,blue background , brown foreground
MOV CX,60 ,60 repeated characters
INT 10 H ,call interrupt service
(Bell) TAB
. 09 H CX .00( AL01 ( LOOPCX INT 10H02H
.A2OLOOP:
MOV DX,OOOO ,set wrsor to oo,oo
Call Q2OCURS
Call B10 PRMPT ,display-prompt
Call C10 INPT ,provide for input of name
Call Q10 CLR ,clear screen
-
5/27/2018
45/53
CMP ACTULEN,OO ,name entered?
JE A30 ,no,exit
Call D10 CODE , setbell ande $
Call E10 CENT ,cinter,display name
JMP A20 LOOP
A30:
MOV AX,4COOH ? ,end processing
INT 21 H
A10 MAIN ENDP
Display Prompt
B10 PROMPT PROC Near
MOV AH , 09H ,Reqvest dispiay
Lea DX,PROMPT
INT 21H
RET
B10 Prompt Endp
Accept+input of name
C10 INPT Proc near
MOV AH,OAH ,Request Key board
Lea DX,PARlist ,input
INT 21 H ... RET .... C10INPT Endp
-
5/27/2018
46/53
Set bell and $ delimiter
D10 Code PROC near
Movsx BX,Actulen Replace ODH with 0H
Mov KB name [BX],0
Mov KB name[BX+1] $
RetD1OCOde Endp
Center and display name:
E10cent PROC near
MOV DL,Actulen ,locate center column
Shir DL,1 ,divide lengh by 2
NEG DL ,reverse sign
ADD DL,40 ,add 40
MOV DH,12 ,center row
Call Q20coRs ,set cursor
MOV AH,09H
LEA DX,kbname ,display name
INT 21 H
RET
E10Cent Endp
Clear Screen
Q10CLR PROC Near
MOV AX,0600H ,Request scroll screen
MOV BH,30
-
5/27/2018
47/53
MOV CX,0000
MOV DX,184FH
INT 10H
RET
Q10 CLR Endp
Set eursor row co umn
Q20CUPRS PROC near ,DX set on entry
MOV AH,02H ,Request set cursor
MOV BH,00 ,page #00
INT 10H RET
Q20CURS ENDP
End A10 main
SHRE10 CENT .
ADD . NEG+- DLDL Dana porter: . (01H) D10Ccode
:MOV ZX BX,Actulen
MOV Kbname[BX],01H
MOVzxBX.MOV BX .movbxKB name
-
5/27/2018
48/53
07H .07H ( Enter )KB name+11 INT09H 07H$ D10 code
21 H. 00HINT 21 H09 H.
:
cmp Actulen ,ooA20 loop.
INT 21 H OAH OAHINT 21 H.
.INT . . .
.: .ABEL BYTE.
-
5/27/2018
49/53
.LABEL .
LABEL...
OFFh. .
. .
.. Enter.
.
pgup , home , F1 .
OS 12,unix .
.
00 (con)
-
5/27/2018
50/53
01 . (con) 02 ((con. 03 (AVX) 04 (LPT1PRN)
:01,00 .
.
INT 21h 40h
.AH=40h CX=BX=01 DX=
AX INT :
() = 05H AX= 06H
:JC error-rautine , test for display error
-
5/27/2018
51/53
ODH( ) oalt,(back spacs)08H() 07H . INT 21H09H()
Cotitle DB Intertech corp , ODH,OAH ,Dispiay area
MOV AH,40H ,kequest display
MOV BX,01 ,File handle for screen
MOV ex,17 ,Display 17 characters
Lea BX,Cotitle ,Display area
INT 21 H ,Call interrupt service
CotitleOAH,ODH
INT 21 H 3FH
.:
AH=3FH BX=00 CX= DX=
AX INT .
-
5/27/2018
52/53
INT = 06H= 05H:AX AX.
.
(back spaes) 3FhINT 21hOah .
KB nput DB 20DUP
MOV AH,3FH ,Request keyboard input
MOV BX,00 ,File handle for key board
MOV CX,20 ,maximum 20 characters
Lea DX,KBInput ,Input area
INT 21 H ,call interrupt service
Enter .CX
.
-
5/27/2018
53/53
(ODH) Enter (Oah) . INT.
AX.