You are on page 1of 7

PHN 1: LP TRNH HP NG CHO H x86

BI 1: CN BN V HP NG
1. MC CH
Lm quen vi ngn ng lp trnh Assembly
Bit cch vit, dch, chy mt vi chng trnh n gin trn chng trnh m phng
Emu8086

2. TM TT L THUYT
Hp ng (assembler) l ngn ng bc thp, gip cho ngi lp trnh khng phi ghi nh
m my (opcode) m s dng cc t ng gi nh (pseudo-code) gn vi ngn ng t nhin
miu t cng vic cn thc hin. Tuy vy, assembler rt gn vi ngn ng my, i hi
ngi lp trnh phi hiu bit tng i y v cu trc phn cng my tnh.
Vi mi kiu kin trc ca b vi x l, c mt b lnh ring, do , c mt ngn ng
assembler ring cho n. y, chng ta nghin cu assembler cho cc b vi x l Intel thuc
h x86. Cc chng trnh s c vit trn chng trnh m phng Emu8086. Tuy chng
trnh m phng khng th hin c y cc tp lnh c trong h 8086. Ngc li,
chng trnh m phng gip ta tm hiu v hp ng mt cch trc quan v d hiu.
2.1. Cu trc thng thng ca mt chng trnh hp ng c vit trn
Emu8086:
#make_COM# <Khai bo chng trnh dang .com>
.stack
<Khai bo kch thc ngn xp>
.data
<Khai bo d liu>
.code
ORG 100h
; COM file is loaded at CS:0100h
<Cc lnh>
End
Chng ta c b qua cc khai bo v .model, .stack, .data, .code v end khi chy trn
chng trnh m phng.
V d: Chng trnh sau in ra mn hnh dng ch Hello, World!
#make_COM#
; Standard header
ORG 100H
JMP START ; Jump to start:
msg DB 13, 10, 'Hello, World!$
; Data
START:
LEA DX, msg
; Load address of msg to DX register
MOV AH, 9
INT 21h

; Print using DOS interrupt

MOV AH, 4Ch


INT 21h

; Exit to operating system

Lu :
- Mi chng trnh u phi c on code thot khi chng trnh, nu khng
chng trnh s khng dng khi ht chng trnh ca mnh.
2.2. Khai bo bin trong hp ng
C php:
<tn bin>
hoc
<tn bin>
to>)

D<Kiu DL>

<gi tr khi to>

D<Kiu DL>

<s phn t>

dup(<gi tr khi

Cc kiu d liu: B (1 byte), W (2 bytes), D (4 bytes)


Nu khng khi to, dng du hi ?
V d:
Khai bo trong C
char ch;
char ch = a;
char ch = 5;
char s[]=\nhello world!
int i=100;
long l;
char a[] = {1,2,3};
char a[100];
char a[100][50];

Khai bo trong hp ng
ch DB ?
ch DB a
ch DB 5
s DB 10,13,hello world!$
i DW 100
l DD ?
a DB 1,2,3
a DB 100 dup(?)
a DB 100 dup(50 dup(?))

2.3. Dch, lin kt, chy v chn li chng trnh t du nhc DOS
to mt chng trnh dng .com, ta chn File/New/COM Template nh hnh 1.1

Hnh 1.1: Cch tao chng trnh trn Emu8086


bin dch chng trnh, ta chn Compile. Ta c th m phng trc tip bng cch
chn Emulate. Mn hnh s hin th ln nh hnh 1.2

Hnh 1.2: Giao din chng trnh m phng


Trn chng trnh m phng, ta c th quan st c ni dng cc thanh ghi, d liu lu
trong b nh, mn hnh, b ALU, Stack, thanh ghi c Ngoi ra, ta c th chy chng trnh
(chn Run) hoc thc hin tng lnh (Single Step).
2.4. Mt s lnh c bn
MOV
INC
DEC
ADD
SUB
INT

des,src
des
des
des,src
des,src
num

: chp d liu t src sang des


: tng des mt n v
: gim des mt n v
: des = des + src
: des = des src
: gi ngt

3. THC HNH
3.1. Bi tp
Bi 1. Vit CT nhp vo 1 k t, xut ra k t
V d:
Nhap 1 ky tu: b
Ky tu vua nhap: b
Bi 2. Vit chng trnh xut ra mn hnh mt s dng ch
V d:
Dai hoc Quoc gia Thanh pho Ho Chi Minh
Truong Dai hoc Khoa hoc tu nhien
Khoa Dien tu Vien thong
Bi 3. Vit CT nhp vo 1 k t, xut ra k t lin trc v lin sau.

V d:
Moi ban nhap 1 ky tu: b
Ky tu lien truoc: a
Ky tu lien sau: c
Bi 4. Vit CT nhp vo 1 k t thng. In ra k t Hoa
V d:
Moi ban nhap 1 ky tu: b
Ky tu hoa la: B
Bi 5. Vit CT nhp vo 1 k t hoa. In ra k t thng
V d:
Moi ban nhap 1 ky tu: B
Ky tu thuong la: b
Bi 6. Vit chng trnh nhp vo 2 s nguyn dng x1, x2 (1 x2 < x1 < 9). Xut ra kt
qu cc php tnh: 3x1 + 5x2
V d:
x1 = 3
x2 = 4
3x1 + 5X2 = 32

3.2. Hng dn
Bi 1. nhp 1 mt k t s dng hm 1 ca ngt 21h, xut, s dng hm 2.
V d:
mov AH,1
int 21h
; kt qu trong AL
mov DL,AL ; k t cn xut trong DL
mov AH,2
int 21h
Bi 2. Cp k t xung dng l 10,13. C th khai bo nhiu xu k t hoc chung mt xu.
V d:
Msg1
DB 10,13,9, Dai hoc Quoc gia Thanh pho Ho Chi
Minh
Msg2
DB 10,13,9, Truong Dai hoc Khoa hoc tu nhien
Hoc
Msg12
Minh

DB 10,13,9, Dai hoc Quoc gia Thanh pho Ho Chi


DB 10,13,9, Truong Dai hoc Khoa hoc tu nhien

Bi 3, 4. K t hoa v k t thng ca cng mt ch ci ting Anh cch nhau 20h. Do ,


chuyn i ch hoa thnh ch thng v ngc li, ch cn dng lnh ADD, SUB.
Bi 5. chuyn i cc k t 0 9 thnh s 0 9 ch cn thc hin php tr i 48 (m
ca 0). Sau khi thc hin php tnh, chuyn i thnh k t v in ra mn hnh (c th dng
biu din Hex).

BI 2: CC CH TH LOGIC V IU KHIN
1. MC CH
Hiu cch so snh hai s trong hp ng
Hiu cch thay i th t thc hin cc lnh
Bit cch s dng cc lnh so snh, nhy v lp
2. TM TT L THUYT
2.1. Lnh so snh
Trong hp ng, mun so snh hai s, ta phi thc hin mt php ton s hc hoc logic
trn hai s v cn c vo cc bit trong thanh ghi c ri a ra kt lun. lm vic ny, c
th dng lnh CMP v TEST.
Bn cht ca lnh CMP Des,Src l lnh SUB Des,Src (thc hin php tnh Des Src)
nhng kt qu ca php tnh khng c lu vo Des nh trong lnh SUB.
V d: so snh hai s nguyn dng
MOV AH,1
MOV AL,2
CMP AH,AL
Sau khi thc hin hai lnh trn, c Carry (CF) bt, bo hiu rng AH < AL
Bn cht ca lnh TEST Des,Src l lnh AND Des,Src (thc hin php tnh Des AND
Src) nhng kt qu ca php tnh khng c lu vo Des nh trong lnh AND.
V d: kim tra hai bit cui cng ca AL
TEST AL,3 ; 3h = 11b
Nu c Zero (ZF) bt, c ngha l c hai bit 0 v 1 ca AL u bng 0.
2.2. Lnh nhy
Thng thng, khi mt lnh (instruction) c thc hin, gi tr ca thanh ghi IP
(instruction pointer) c t ng cp nht tr n lnh k tip. Ngoi ra, ni dung ca
thanh ghi IP ch c th b thay i thng qua mt s lnh c bit. l: cc lnh nhy (J*),
lnh lp (LOOP*), lnh gi hm (call, ret), lnh gi ngt (int, iret). Cc lnh ny c xp
vo nhm Lnh iu khin lung (Program flow control instructions). Trong bi thc hnh
ny, chng ta s hc cch s dng cc lnh nhy v cc lnh lp.
Lnh nhy khng iu kin
JMP <target>
C cc trng hp sau:
JMP SHORT <tn nhn> (short jump). Khi trong m lnh lu 1 byte
khong cch (offset) gia v tr hin ti v v tr cn nhy n. Kiu ny ch
nhy trong phm vi t 128 n +127 byte so vi v tr hin ti.
V d:
JMP SHORT Calculate

JMP <tn nhn> (near jump). Khi trong m lnh lu 2 byte khong
cch (offset) gia v tr hin ti v v tr cn nhy n. Kiu ny nhy ty
trong phm vi segment.

V d:

JMP Calculate

JMP FAR PTR <tn nhn> (far jump). Khi trong m lnh lu offset
v segment ca v tr cn nhy n. Kiu ny nhy n bt k ch no.
V d:
JMP FAR PTR Calculate
JMP <con tr 2 byte> (near indirect jump). Khi trong m lnh lu
a ch offset ca mt nh. Khi thc hin, IP s c gn bng gi tr lu ti
a ch ny. C th kt hp dng vi nh v ch s.
V d:
myPointer DW
Prepare, Calculate, Check, Output
...
MOV bx,2
; ch s trong mng con tr
SHL bx,1
; nhn i
JMP myPointer[bx]
...
Prepare:
; cng vic 0
...
Calculate:
; cng vic 1
...
Check:
; cng vic 2 ni cn nhy
n
...
Output:
; cng vic 3
...

JMP <con tr 4 byte> (far indirect jump). Tng t trng hp trn,


nhng con tr gm c segment v offset. Ch khc khai bo con tr
V d:
myPointer DD
Prepare, Calculate, Check, Output
...
MOV bx,1
; ch s trong mng con tr
MOV cl,2
SHL bx,cl
; nhn 4
JMP myPointer[bx]
...
Prepare:
; cng vic 0
...
Calculate:
; cng vic 1 ni cn nhy
n
...

JMP <thanh ghi 2 byte> (indirect jump via regs). Nhy n a ch lu


trong thanh ghi AX.
V d:
MOV ax, offset Calculate
...
JMP ax
; (IP AX)

Lnh nhy c iu kin


J....

<Label>

Cc lnh nhy c iu kin bt u bng ch J sau l cc ch ci biu th iu kin


(v d JGE ah,5: Jump if Greater than or Equal, nhy nu AH ln hn hay bng 5), tip sau l
mt tn nhn. Ty thuc vo trng thi cc c hiu m b vi x l c thc hin vic nhy
n nhn hay khng.
i vi b vi x l 80286 tr xung, lnh nhy c iu kin c di 2 byte, byte u
tin cha m lnh, byte th hai cha khong cch tng i t lnh n nhn, v vy
<Label> trong lnh nhy c iu kin phi nm trong khong t -128 n 127 so vi v tr
lnh nhy. Mun nhy xa hn ta phi dng kt hp lnh nhy khng iu kin JMP
T 80386 tr ln, b lnh c b sung, cho php s dng lnh nhy c iu kin c
di 4 byte, do <Label> c quyn nm ty trong cng phm vi segment.
Khi s dng lnh nhy c iu kin sau khi thc hin php so snh, phi c bit lu
ton hng trong php so snh l s c du (signed) hay khng c du (unsigned) la chn
lnh cho ph hp.
V d:
MOV AH,AL
; AL hin bng 128
CMP AH,1
JGE Greater
; AH > 1 nhng khng nhy ????
. . .
Greater:
C ba nhm lnh nhy c bn l: kim tra c du, kim tra mt s c du v kim tra mt
s khng du.
Cc lnh nhy kim tra c du:

You might also like