មេរៀន មូលដ្ឋាន Assembly
១. រចនាសម្ព័ន្ធកម្មវិធី
1.Syntax
- គ្មានបែងចែក Lower case or Upper case
- 1 standard ត្រូវសរសេរលើ 1 បន្ទាត់
- Ful name ដែលគេប្រើសំរាប់ដាក់ឈ្មោះអថេរ Proc , label ត្រូវមានប្រវែងចាប់ពី 1 -> 31 character និង លើកលែងសញ្ញា Underscore => សញ្ញាពិសេសផ្សេងទៀតពុំអាចប្រើបានដូចជា (? , @ , # , $ , % ) ។
- ប្រើ ; សំរាប់ការអធិប្បាយ ( Comment)
2. Constance and Variable; បណ្តាលេខ ក្នុង Assembly យើងអាចប្រើបានតែប្រព័ន្ធលេខ Binary , Hexa , Decimal ។
▪ Binary;
01101B => ត្រូវ
01012B => ខុស
01101 => ជាលេខ Dec ពុំមែនជា Bin ទេ
▪ លេខ Hexa;
01h => ត្រូវ
9h => ត្រូវ
0ABh => ត្រូវ
0Bh =>ត្រូវ
Fh => ខុស
សំរាប់ Hexa ត្រូវនាំមុខដោយលេខ ( 0…9) ទើបត្រូវ
▪ Decimal
-> យើងប្រើ D ខាងក្រោយតំលៃលេខដើម្បីបញ្ជាក់ថាលេខ Dec ក្នុងករណីដែលពុំ បាន បញ្ជាក់ថា B , H , D តាម ក្រោយនោះ => Complier យល់ថាជាលេខ Decimal ។
** យើងអាចប្រកាស់អថេរដោយប្រភេទផ្សេងៗគ្នាដូចជា;
DB : Byte
DW : Word
DD : Double word ; 4 byte
DO : 4 word =8 byte
DT : 10 byte
ឧទាហរណ៏; X1 DB ?
=> X1 ជាអថេរប្រភេទ Byte និងពុំទាន់មានផ្ទុកតំលៃចាប់ផ្តើម X2 DW 2
=> X2 ជាអថេរប្រភេទ Word ដែលមានតំលៃចាប់ផ្តើម =2
3- Array ដោយ Assemply មាន 5 ប្រភេទទិន្នន័យ => មាន 5 ប្រភេទ array ដែរ ។ ក្នុង Assembly array គ្រាន់តែ ជាស៊េរីនៃ Byte memory ឬ word memory ។ ឧទាហរណ៏ array 5 byte ដែលមានតំលៃចាប់ផ្តើម 10 ,20 , 30
=> យើងទទួលបាន;
Element Address Content
X 0200h 10
X+1 0201h 20
X+2 0202h 30
ឬ X X DB ? ? ?
=> ត្រៀម 3 byte សំរាប់ X , X +1 , X+2
4- Constance យើងដឹងថា Constance -> តំលៃរបស់វាពុំអាចផ្លាស់ប្តូរបានទេ
ឧទាហរណ៏; X EOU 10
ពេលនេះ X ជាចំនួនថេរដែលមានតំលៃ = 10
5- Structure Assembly program រួមមាន 3 srgment ដូចជា code seg , Data seg , Stack seg និង Segement និមួយៗ ត្រូវបាន Compile ដាក់បញ្ជូលទៅ Segment Memory រៀងខ្លួន ។
+ Mode Memory;
គឺជាការកំនត់ mode memory អោយ compiler;
▪ model ប្រភេទ អត្ថាធិប្បាយ
SMAL Code program 1 seg
Data 1 seg
MEDIUM Code Program ច្រើនជាង 1 seg
Data 1 seg
COMPACT Code program 1 seg
Data ច្រើនជាង 1 seg
LAGE Code program ច្រើនជាង 1 seg
Data ច្រើនជាង 1 seg
គ្មាន array ណាច្រើនជា 64K byte
HUGE Code program ច្រើនជាង 1 seg
Data ច្រើនជាង 1 seg
Array អាចធំជាង 64 K byte
+ Data Segement
DS របស់ program គឺជាកន្លែងផ្ទុកការប្រកាសអថេរចំនួនថេរ ។
STACK Value
មុខងារកំនត់ទំហំ memory សំរាប់ Stack segment ទៅតាមតំលៃ Value ។ Ex; value=100h => 100h byte សំរាប់ STACK
+ Code segment
គឺជាកន្លែងផ្ទុក Code របស់កម្មវិធីទាំងមូល
CODE
……
……
នៅក្នុង code Seg => ត្រូវតែមាន main proc ព្រោះដូច C ដែរដែលវាជា Function មួយសំរាប់កំនត់ទីតាំង
ចាប់ផ្តើមតំបូងបំផុតនៃតំណើរការណ៏កម្មវិធី ។
ឧទាហរណ៏; កម្មវិធីខាងក្រោមមានមុខងារបង្ហាញ “ A” លើ screen ;
madel Small
stack 100h
Code
main proc
MOV AH , 02h
MOV DL , ‘A’
INT 21h
Main endp
END MAIN
២. Input/Out put Data and Controll/ Looping
+ ប្រើ Function 01 របស់DOS សំរាប់បញ្ជូន 1 character
+ ប្រើ Function 02 របស់DOS សំរាប់បង្ហាញ 1 character
+ ប្រើ Function 09 របស់DOS សំរាប់ out put string on screen
ឧទាហរណ៏កម្មវិធីខាងក្រោមសរសេរបញ្ជូលទិន្នន័យ 1 character អោយទៅអថេរ x បន្ទាប់មកបង្ហាញ
ទិន្នន័យរបស់ X ដែលទើបទទួលបានលើ Screen;
model small
stack 100h
Data
X DB ?
Msg 1 DB Input a value ; $
Msg 2 DB char was ; $
Code
mov dx , @ data , ចាប់ផ្តើមបញ្ជូល Code ក្នុង DS ចូល
mov ds , dx , ទៅ memory ដើម្បី Register memory
LEA dx , msg 1
Int 21h បង្ហាញ msg 1 លើ screen
Mov ah , 01h
Mov ah , 01h
Int 21h បញ្ជូលទិន្នន័យ 1 char -> AL បន្ទាប់មកផ្ទេរពី AL -> X
Mov X , al
LEA dx , msge
Mov oh , 09h បង្ហាញ string msgz
Int 21h
Mov dl , x
Mov ah , 02h ផ្ទេរ X ចូល AL ដើម្បីអនុវត្តន៏ Func 2 <- DOS សមរាប់បង្ហាញ content , DL លើ
Int 21h screen
Mov Ah , 4ch
Int 21h បញ្ឍប់កម្មវិធី
Main endp
End main
à LEA dx , msg មានន័យថាគណនា Real address msg ( ដែល msg កំពុងចង្អុរទៅកាន់ក្បាល address នៃ array ) រួចផ្ទុក address នោះក្នុង dx ដើម្បីអនិវត្តន៏ Functiong របស់ DOS ។
1> Condiction;
ការត្រួតពិនិត្យល/ខគឺធ្វើឡើងដោយ CMP និង Jump
+ IF THEN ELSE
ឧទាហរណ៏;ប្រសិនបើ DL=’A’ នោះត្រូវបង្ហាញ DL លើ Screen ផ្ទុយទៅវិញត្រូវបានបង្ហា្ញញលើ Screen នូវ ‘X’
+ CASE
Case (n)
N=1 ; ការងារ 1
N=2 ; ការងារ 2
;
n=m ; ការងារ m
End case
ឧទាហរណ៏: ប្រសិនបើ AX=0 -> Out put screen “A”
AX<0 -> Out put screen “B”
AX>0 -> Out put screen “C”
, CASE AX
CMP AX , 0
JL NE GATIVE
JE ZERO
JG POSITIVE
NE GATIVE;
MOV DL , ‘B’
ZERO;
MOV DL , “A”
POSITIVE;
MOV DL , “C”
MOV AH , 02h
INT 21h
; ENDCase
+ ការប្រើ ប្រមាណវិធី Logic ក្នុងការគណនាល/ខ
ដូចជា Exp 1 AND Exp2
ឬ
Exp 1 OR Exp2
AND;
ឧទាហរណ៏; យើងប្រៀបធៀកន្សោមរបស់ល/ខ ខាងក្រោម
IF (‘A’ <= ch) AND (ch<= “2”) Then
Display ch
END IF
MOV AL , ch
: ; IF(‘A’ <= AL) and (AL <= ‘Z’) Then
CMP AL , ‘A’
JNGE AL . ‘Z’
JNLE END IF
; Then Display AL
MOV DL , AL
MOV AH , 02h
INT 21h
END-IF;
OR;
ឧទាហរណ៏; យើងប្រៀបធៀបកន្សោមរបស់ល/ខខាងក្រោម
IF (‘A’ <= ch) OR (ch <= ‘Z’) Then
Display ch
END IF
MOV AL , ch
; IF (‘A’ <= AL) OR (AL <= ’Z’) Then
CMP AL , ‘A’
JAE THEN-
CMP AL , ‘Z’ ប្រៀបធៀបល/ខ
JBE THEN-
JMP ELSE-
THEN;
MOV AH , 2h
MOV DL , AL
INT 21h ការងារក្នុង Then
JMP END-IF
ELSE;
MOV AH , 4ch
INT 21h ឬការងារផ្សេង
END-IF;
………….
…………
2> Loop
+ FOR;
For ចំនួនជុំ DO
Standards
END FOR
Syntax;
MOV CX , 80 , CX ជា Reg ប្រើសំរាប់ផ្ទុកចំនួនជុំ=> 80 ជុំ
MOV AH , 2 , Out put screen
MOV DL , ‘#’ , Char for out putting
TOP;
INT 21h ,
LOOP TOP
Loop TOP នេះមានតួនាទីលោតទៅរក Label ដែលនៅផ្នែកខាងលើ ។ ពេលលោតទៅ TOP វាថែមទាំង អនិវត្តន៏ការងារ DEC CX ដោយស្វ័យប្រវត្តិរហូតដល់ពេលដែល CX ផ្ទុកតំលៃ 0 ទើប Loop ឈប់លោតទៅរក TOP និង អនិវត្តន៏បន្ត Statement បន្ទាប់ទៀត។
ក្នុងករណ៏ CX ផ្ទុក 0 -> ពេលជួប Loop នោះ CX ត្រូវបានដក 1 ទៀត => CX ផ្ទុក FFFFh ដែលវានឹងត្រូវ Loopចំនួន 65535 ជុំទៀត ។
Post a Comment