You are on page 1of 36

Phô lôc A.

HÖ lÖnh 80x86 71

PHô LôC
Phô lôc A. HÖ LÖNH 80x86
Chóng ta cã thÓ chia c¸c lÖnh cña 80x86 thµnh 6 nhãm
sau:
1. C¸c lÖnh chuyÓn d÷ liÖu
2. C¸c lÖnh sè häc
3. C¸c lÖnh thao t¸c bit
4. C¸c lÖnh lµm viÖc víi x©u ký tù
5. C¸c lÖnh rÏ nh¸nh
6. C¸c lÖnh cßn l¹i
Tríc khi xem xÐt cô thÓ chøc n¨ng vµ có ph¸p tõng lÖnh,
chóng ta h·y nãi qua vai trß c¸c bit cê, ý nghÜa vµ mét sè
quy ®Þnh.
a. VÞ trÝ c¸c bit cê ®îc bè trÝ nh sau trong thanh ghi
cê:

O D I T S Z A P C
trong ®ã:
O – cê trµn (Overflow flag) S – cê dÊu (Sign flag)
D – cê híng (Direction flag) Z – cê zero (Zero flag)
I – cê ng¾t (Interrupt flag) A – cê trµn phô (Auxiliary
flag)
T – cê bÉy (Trap flag) P – cê ch½n/lÎ (Parity flag)
C – cê carry (Carry flag)
C¸c ký hiÖu qui t¾c vÒ sù thay ®æi tr¹ng th¸i cña c¸c cê
sau mçi lÖnh:
? : kh«ng x¸c ®Þnh
* : cê thay ®æi tïy thuéc vµo kÕt qu¶ cña lÖnh
72 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

0 : gi¸ trÞ cê lµ 0
1 : gi¸ trÞ cê lµ 1
b. Mét sè qui íc vÒ c¸c lo¹i to¸n h¹ng:
SRC to¸n h¹ng nguån
DST to¸n h¹ng ®Ých
reg to¸n h¹ng lµ thanh ghi
reg8/reg16 to¸n h¹ng lµ thanh ghi 8/16 bit
mem to¸n h¹ng lµ biÕn nhí
mem16 to¸n h¹ng lµ biÕn nhí 16 bit
data to¸n h¹ng lµ mét h»ng sè
segreg to¸n h¹ng lµ thanh ghi segment
c. Trong ng«n ng÷ Assembly kh«ng ph©n biÖt ch÷
hoa vµ ch÷ thêng
VÝ dô: MOV AX,BX vµ mov ax,bx ®Òu ®îc.

A.1 Nhãm c¸c lÖnh chuyÓn d÷ liÖu


Nhãm c¸c lÖnh chuyÓn d÷ liÖu cã thÓ t¹m chia thµnh 4
nhãm nhá, ®ã lµ:
 Nhãm c¸c lÖnh chuyÓn d÷ liÖu gi÷a c¸c thanh ghi vµ
vïng nhí (biÕn nhí hoÆc ng¨n xÕp) vµ gi÷a c¸c thanh
ghi víi nhau. Trong nhãm nµy cã c¸c lÖnh sau: MOV,
PUSH, POP, XCHG vµ XLAT.
 Nhãm c¸c lÖnh ®äc d÷ liÖu tõ cæng vµo (port) vµ ®a
d÷ liÖu ra cæng, ®ã lµ c¸c lÖnh : IN vµ OUT.
 Nhãm c¸c lÖnh n¹p ®Þa chØ, ®ã lµ c¸c lÖnh: LEA, LDS
vµ LES.
 Nhãm c¸c lÖnh chuyÓn d÷ liÖu gi÷a thanh ghi cê vµ
ng¨n xÕp vµ gi÷a byte thÊp cña thanh ghi cê víi thanh
ghi AH, ®ã lµ c¸c lÖnh: LAHF, SAHF, PUHF vµ POPF.
Chó ý:
TÊt c¶ c¸c lÖnh trong nhãm nµy sau khi thùc hiÖn kh«ng
lµm thay ®æi tr¹ng th¸i c¸c bit cê.
Phô lôc A. HÖ lÖnh 80x86 73

A.1.1 LÖnh MOV


Chøc n¨ng: ChuyÓn gi¸ trÞ tõ to¸n h¹ng nguån vµo to¸n
h¹ng ®Ých (gi¸ trÞ to¸¹ng nguån kh«ng ®æi). Cã thÓ coi
lÖnh nµy nh phÐp g¸n cña ng«n ng÷ bËc cao.
Có ph¸p: MOV DST, SRC
reg1, reg2 segreg, reg16
reg, data segreg, mem16
mem, reg reg16, segreg
reg, mem mem16, segreg
mem, data

Chó ý:
 data chØ n»m ë to¸n h¹ng nguån (SRC)
 kh«ng ®îc chuyÓn gi¸ trÞ gi÷a c¸c biÕn
nhí (mem) cho nhau:
mov mem1, mem2
lµ kh«ng cho phÐp, song cã thÓ thùc hiÖn mét c¸ch
gi¸n tiÕp, vÝ dô:
mov reg, mem2
mov mem1,reg
 kh«ng ®îc chuyÓn mét h»ng sè vµo
thanh ghi segment, cã nghÜa:
mov segreg, data
lµ kh«ng cho phÐp, song cã thÓ thùc hiÖn mét c¸ch
gi¸n tiÕp th«ng qua mét thanh ghi, vÝ dô:
mov reg16, data
mov segreg, reg16
 khi to¸n h¹ng lµ c¸c thanh ghi BX, SI, DI
vµ BP ®øng trong dÊu ngoÆc vu«ng th× ®ã lµ biÕn
con trá, cã nghÜa lµ néi dung cña thanh ghi lµ ®Þa chØ
OFFSET cña mét « nhí.
VÝ dô: mov AX,[BX]
cã nghÜa lµ ®a néi dung « nhí (2 byte) ®îc trá bëi DS:
[BX] (DS chøa phÇn ®Þa chØ SEGMENT – mÆc ®Þnh,
BX chøa phÇn ®Þa chØ OFFSET) vµo thanh ghi AX.
74 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Muèn dïng thanh ghi ES chøa phÇn ®Þa chØ SEGMENT


th× ph¶i khai b¸o têng minh, cã nghÜa lµ:
mov AX,ES:[BX].

A.1.2 LÖnh PUSH


Chøc n¨ng: CÊt gi¸ trÞ to¸n h¹ng nguån vµo ®Ønh ng¨n
xÕp.
Có ph¸p: PUSH SRC
reg16
mem16
segreg

A.1.3 LÖnh POP


Chøc n¨ng: ChuyÓn gi¸ trÞ 2 byte tõ ®Ønh ng¨n xÕp vµo
to¸n h¹ng ®Ých.
Có ph¸p: POP DST
reg16
mem16
segreg
A.1.4 LÖnh PUSHF
Chøc n¨ng: CÊt gi¸ trÞ thanh ghi cê vµo ®Ønh ng¨n xÕp.
Có ph¸p: PUSHF

A.1.5 LÖnh POPF


Chøc n¨ng: ChuyÓn gi¸ trÞ 2 byte tõ ®Ønh ng¨n xÕp vµo
thanh ghi cê.
Có ph¸p: POPF

A.1.6 LÖnh XCHG


Chøc n¨ng: ChuyÓn chÐo cho nhau gi¸ trÞ to¸n h¹ng nguån
vµ ®Ých.
Có ph¸p: XCHG DST, SRC
reg1, reg2
reg, mem
mem, reg
Phô lôc A. HÖ lÖnh 80x86 75

A.1.7 LÖnh XLAT


Chøc n¨ng: ChuyÓn gi¸ trÞ 1 byte tõ « nhí trá bëi DS:[BX].
[AL] vµo thanh ghi AL (tæng gi¸ trÞ cã trong BX vµ AL lµ
phÇn ®Þa chØ OFFSET cña « nhí).
Có ph¸p: XLAT
Chó ý:
LÖnh nµy thêng ®îc dïng cho trêng hîp gi¸ trÞ trong thanh
ghi BX trá ®Õn ®Çu mét b¶ng vµ gi¸ trÞ trong thanh ghi
AL lµ chØ sè tõng thµnh phÇn cña b¶ng.

A.1.8 LÖnh IN
Chøc n¨ng: §äc gi¸ trÞ 8 hoÆc 16 bit tõ mét cæng vµo
thanh ghi AL (trêng hîp cæng 8 bit) hoÆc AX (trêng hîp
cæng 16 bit).
Có ph¸p: IN AL,®Þa chØ cæng (víi cæng 8 bit)
hoÆc IN AX,®Þa chØ cæng (víi cæng 16 bit)
Chó ý:
NÕu ®Þa chØ cæng nhá h¬n 256 (gi¸ trÞ n»m trong 1
byte) th× cã thÓ ®a ®Þa chØ ®ã trùc tiÕp vµo lÖnh IN,
ngîc l¹i nÕu ®Þa chØ trÞ cæng lín h¬n hoÆc b»ng 256 th×
®Þa chØ cæng ph¶i ®a vµo thanh ghi DX vµ DX sÏ thay
cho ®Þa chØ ®øng trong lÖnh IN.
VÝ dô:
 IN AX,08h(v× ®Þa chØ cæng lµ 8H < 256)
 MOV DX,4f01h (v× ®Þa chØ cæng 4F01H
≥ 256)
IN AX,DX

A.1.9 LÖnh OUT


Chøc n¨ng: ChuyÓn gi¸ trÞ 1 byte cã trong thanh ghi AL
hoÆc 2 byte cã trong thanh ghi AX ra mét cæng.
Có ph¸p: OUT ®Þa chØ cæng,AL
hoÆc OUT ®Þa chØ cæng,AX
Chó ý:
76 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

VÒ ®Þa chØ cæng cña lÖnh nµy gièng nh chó ý ë lÖnh IN


(môc A.1.8).

A.1.10 LÖnh LEA


Chøc n¨ng: §a phÇn ®Þa chØ OFFSET cña to¸n h¹ng nguån
(biÕn nhí) vµo 1 thanh ghi 16 bit.
Có ph¸p: LEA reg16,mem
Chó ý:
reg16 chØ cã thÓ lµ c¸c thanh ghi BX, SI, DI hoÆc BP.

A.1.11 LÖnh LDS


Chøc n¨ng: ChuyÓn gi¸ trÞ 2 byte cña mét biÕn nhí vµo
thanh ghi ®Ých vµ gi¸ trÞ cña 2 byte tiÕp theo (sau vïng
nhí cÊp ph¸t cho biÕn nhí) vµo thanh ghi DS.
Có ph¸p: LDS reg16,mem
Chó ý:
reg16 chØ cã thÓ lµ c¸c thanh ghi BX, SI, DI hoÆc BP.

A.1.12 LÖnh LES


Chøc n¨ng: ChuyÓn gi¸ trÞ 2 byte cña mét biÕn nhí vµo
thanh ghi ®Ých vµ gi¸ trÞ cña 2 byte tiÕp theo (sau vïng
nhí cÊp ph¸t cho biÕn nhí) vµo thanh ghi ES.
Có ph¸p: LES reg16,mem
Chó ý:
reg16 chØ cã thÓ lµ c¸c thanh ghi BX, SI, DI hoÆc BP.

A.1.13 LÖnh LAHF


Chøc n¨ng: ChuyÓn gi¸ trÞ byte thÊp cña thanh ghi cê vµo
thanh ghi AH.
Có ph¸p: LAHF

A.1.14 LÖnh SAHF


Chøc n¨ng: ChuyÓn néi dung cña thanh ghi AH vµo byte
thÊp cña thanh ghi cê.
Có ph¸p: SAHF
Phô lôc A. HÖ lÖnh 80x86 77

A.2 Nhãm c¸c lÖnh sè häc


Nhãm c¸c lÖnh sè häc cã thÓ t¹m chia thµnh 4 nhãm nhá,
®ã lµ:
 Nhãm c¸c lÖnh liªn quan ®Õn phÐp céng: ADD, ADC,
INC, AAA vµ DAA.
 Nhãm c¸c lÖnh liªn quan ®Õn phÐp trõ: SUB, SBB, DEC.
NEG, CMP, AAS vµ DAS.
 Nhãm c¸c lÖnh liªn quan ®Õn phÐp nh©n: MUL, IMUL
vµ AAM.
 Nhãm c¸c lÖnh liªn quan ®Õn phÐp chia: DIV, IDIV,
AAD, CBW vµ CWD.
Chó ý:
HÇu hÕt c¸c lÖnh trong nhãm nµy khi thùc hiÖn cã t¸c
®éng lµm thay ®æi gi¸ trÞ c¸c bit cê. LËp tr×nh b»ng
ng«n ng÷ Assembly rÊt hay dïng tr¹ng th¸i c¸c bit cê lµm
®iÒu kiÖn cho c¸c lÖnh nh¶y cã ®iÒu kiÖn.

A.2.1 LÖnh ADD


Chøc n¨ng: Céng gi¸ trÞ cña to¸n h¹ng nguån víi gi¸ trÞ cña
to¸n h¹ng ®Ých vµ kÕt qu¶ (tæng) ®îc ®a vµo to¸n h¹ng
®Ých. Gi¸ trÞ cña to¸n h¹ng nguån kh«ng thay ®æi.
Có ph¸p: ADD DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
mem, reg

Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *

A.2.2 LÖnh ADC


Chøc n¨ng: Céng gi¸ trÞ cña to¸n h¹ng nguån víi gi¸ trÞ cña
to¸n h¹ng ®Ých vµ gi¸ trÞ cña bit cê CF (Carry). KÕt qu¶
78 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

(tæng) ®îc ®a vµo to¸n h¹ng ®Ých. Gi¸ trÞ cña to¸n h¹ng
nguån kh«ng thay ®æi.
Có ph¸p: ADc DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *

A.2.3 LÖnh INC


Chøc n¨ng: T¨ng gi¸ trÞ cña to¸n h¹ng ®Ých lªn 1.
Có ph¸p: INC DST
reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * *
A.2.4 LÖnh AAA
Chøc n¨ng: HiÖu chØnh kÕt qu¶ cã trong thanh ghi AL
ngay sau khi thùc hiÖn phÐp céng ra d¹ng ASCII. ViÖc
hiÖu chØnh ®îc tiÕn hµnh nh sau:
 NÕu gi¸ trÞ 4 bit thÊp cña thanh ghi AL>9 hoÆc gi¸ trÞ
cña bit cê trµn phô AF=1 th× tiÕn hµnh céng 06h vµo
AL, sau ®ã céng 1 vµo gi¸ trÞ thanh ghi AH vµ dùng cê
trµn phô AF lªn 1. TiÕp ®Õn ®a 4 bit cao cña thanh ghi
AL xuèng 0,
 Ngîc l¹i, nÕu gi¸ trÞ 4 bit thÊp cña thanh ghi AL≤9 hoÆc
gi¸ trÞ cña bit cê trµn phô AF=0 th× chØ cÇn ®a 4 bit
cao cña thanh ghi AL xuèng 0.
Có ph¸p: AAA
Tr¹ng th¸i c¸c bit cê:
Phô lôc A. HÖ lÖnh 80x86 79

O D I T S Z A P C
? ? ? * ? *
VÝ dô:
Gi¶ sö AX=0535h vµ BL=39h th× sau khi céng vµ hiÖu
chØnh, kÕt qu¶ nh sau:
ADD AL,BL 00000101|00110101
|00111001
----------------------------------
00000101|01101110
AH=05h AL=6Eh
Chóng ta nhËn thÊy sau khi thùc hiÖn phÐp céng th× 4 bit
thÊp cña AL>9, nªn nÕu dïng lÖnh AAA sau phÐp trõ trªn
th× phÐp hiÖu chØnh tiÕn hµnh nh sau:
 Céng 06h vµo AL:
AL + 06h = 74h
 Céng 1 vµo thanh ghi AH vµ nh vËy AH=06h
§Æt 4 bit cao cña thanh ghi AL xuèng 0, ta cã AL=04h
KÕt qu¶ sau khi hiÖu chØnh b»ng lÖnh AAA th× AX=0604h

A.2.5 LÖnh DAA


Chøc n¨ng: HiÖu chØnh néi dung cña thanh ghi AL vÒ
d¹ng BCD ngay sau khi thùc hiÖn phÐp céng. LÖnh nµy
chØ cã thÓ ®îc sö dông sau lÖnh céng 2 sè d¹ng BCD.
ThuËt to¸n hiÖu chØnh ®îc tiÕn hµnh nh sau:
 NÕu gi¸ trÞ 4 bit thÊp cña thanh ghi AL>9 hoÆc gi¸ trÞ
cña bit cê trµn phô AF=1 th× tiÕn hµnh céng 06h vµo
AL vµ dùng bit cê trµn phô AF lªn 1,
 NÕu gi¸ trÞ 4 bit cao cña thanh ghi AL>9 hoÆc gi¸ trÞ
cña bit cê CF=1 th× tiÕn hµnh céng 60h vµo AL vµ
dùng cê CF lªn 1.
Có ph¸p: DAA
Tr¹ng th¸i c¸c bit cê:
80 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

O D I T S Z A P C
? * * * * *
VÝ dô:
Gi¶ sö AL=28h vµ BL=68h th× sau khi céng vµ hiÖu
chØnh, kÕt qu¶ nh sau:
ADD AL,BL 0010|1000
0110|1000
------------------
1001|0000 = 90h
vµ sau phÐp céng nµy cê AF lªn 1, do v©y nÕu sau lÖnh
céng nµy sö dông lÖnh DAA th× ph¶i céng néi dung thanh
ghi AL víi 06h, tøc lµ:
AL + 06h =10100000 + 00000110=10100110=96h
KÕt qu¶ AL = 96h chø kh«ng ph¶i 90h

A.2.6 LÖnh SUB


Chøc n¨ng: Trõ gi¸ trÞ cña to¸n h¹ng ®Ých víi gi¸ trÞ cña
to¸n h¹ng nguån vµ kÕt qu¶ (hiÖu) ®îc ®a vµo to¸n h¹ng
®Ých. Gi¸ trÞ cña to¸n h¹ng nguån kh«ng thay ®æi.
Có ph¸p: SUB DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *
A.2.7 LÖnh SBB
Chøc n¨ng: Trõ gi¸ trÞ cña to¸n h¹ng ®Ých cho tæng cña
to¸n h¹ng nguån vµ gi¸ trÞ bit cê Carry (CF). KÕt qu¶
(hiÖu) ®îc ®a vµo to¸n h¹ng ®Ých. Gi¸ trÞ cña to¸n h¹ng
nguån kh«ng thay ®æi.
Có ph¸p: SBB DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
Phô lôc A. HÖ lÖnh 80x86 81

mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *

A.2.8 LÖnh DEC


Chøc n¨ng: Gi¶m gi¸ trÞ cña to¸n h¹ng ®Ých ®i 1.
Có ph¸p: DEC DST
reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * *

A.2.9 LÖnh NEG


Chøc n¨ng: Bï 2 gi¸ trÞ cña to¸n h¹ng ®Ých (thùc chÊt lµ
®æi dÊu gi¸ trÞ cña to¸n h¹ng) . KÕt qu¶ ®îc ®a vµo to¸n
h¹ng ®Ých.
Có ph¸p: NEG DST
reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * *

A.2.10 LÖnh CMP


Chøc n¨ng: So s¸nh gi¸ trÞ cña to¸n h¹ng ®Ých víi gi¸ trÞ
cña to¸n h¹ng nguån. Néi dung hai to¸n h¹ng kh«ng thay
®æi sau khi thùc hiÖn lÖnh nµy. LÖnh nµy cã t¸c dông
dùng c¸c cê phôc vô cho c¸c lÖnh nh¶y cã ®iÒu kiÖn.
82 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Có ph¸p: CMP DST, SRC


reg1, reg2 reg, data
reg, mem mem,data
mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *

A.2.11 LÖnh AAS


Chøc n¨ng: HiÖu chØnh kÕt qu¶ cã trong AL ngay sau khi
thùc hiÖn phÐp trõ ra d¹ng ASCII. ViÖc hiÖu chØnh ®îc
tiÕn hµnh nh sau:
 NÕu gi¸ trÞ 4 bit thÊp cña thanh ghi AL>9 hoÆc gi¸ trÞ
cña bit cê trµn phô AF=1 th× tiÕn hµnh trõ AL cho 06h,
sau ®ã trõ gi¸ trÞ thanh ghi AH ®i 1 vµ dùng cê trµn
phô AF lªn 1. TiÕp ®Õn ®a 4 bit cao cña thanh ghi AL
xuèng 0 vµ ®Æt gi¸ trÞ cê CF b»ng gi¸ trÞ cê AF,
 Ngîc l¹i, nÕu gi¸ trÞ 4 bit thÊp cña thanh ghi AL≤9 hoÆc
gi¸ trÞ cña bit cê trµn phô AF=0 th× chØ cÇn ®a 4 bit
cao cña thanh ghi AL xuèng 0 vµ ®Æt gi¸ trÞ cña cê CF
b»ng gi¸ trÞ cê AF.
Có ph¸p: AAS
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
? ? ? * ? *

VÝ dô:
Gi¶ sö AX=0438h vµ tiÕn hµnh thùc hiÖn phÐp trõ AX cho
mét h»ng sè lµ 35h:
SUB AL,35h 00000100|00111000
|00110101
--------------------------------
Phô lôc A. HÖ lÖnh 80x86 83

00110011
NÕu thùc hiÖn lÖnh AAS ngay sau lÖnh trõ nµy th× phÐp
hiÖu chØnh sÏ nh sau:
V× sau khi thùc hiÖn phÐp trõ, 4 bit thÊp cña AL<9, nªn
phÐp hiÖu chØnh chØ tiÕn hµnh nh sau:
 §a 4 bit cao cña AL xuèng 0, tøc lµ AL = 00000011=03h

VËy kÕt qu¶ AX = 0403h vµ CF = AF

A.2.12 LÖnh DAS


Chøc n¨ng: HiÖu chØnh néi dung cña thanh ghi AL vÒ
d¹ng BCD ngay sau khi thùc hiÖn phÐp trõ. LÖnh nµy chØ
cã thÓ ®îc sö dông sau lÖnh trõ 2 sè d¹ng BCD. ThuËt to¸n
hiÖu chØnh ®îc tiÕn hµnh nh sau:
 NÕu gi¸ trÞ 4 bit thÊp cña thanh ghi AL>9 hoÆc gi¸ trÞ
cña bit cê trµn phô AF=1 th× tiÕn hµnh trõ gi¸ trÞ cña
thanh ghi AL cho 06h vµ dùng bit cê trµn phô AF lªn 1,
 NÕu gi¸ trÞ 4 bit cao cña thanh ghi AL>9 hoÆc gi¸ trÞ
cña cê CF=1 th× tiÕn hµnh trõ gi¸ trÞ cña thanh ghi AL
cho 60h vµ dùng cê CF= 1.
Có ph¸p: DAS
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
? * * * * *
VÝ dô:
Gi¶ sö AL=86h vµ BL=07h th× sau khi thùc hiÖn phÐp
tÝnh trõ gi¸ trÞ cã trong AL cho gi¸ trÞ cã trong BL
SUB AL,BL 0010|1000
0000|0111
------------------
0111|1111 = 7Fh
NÕu thùc hiÖn lÖnh DAS ngay sau lÖnh trõ nµy th× hiÖu
chØnh sÏ nh sau:
V× gi¸ trÞ 4 bit thÊp cña AL>9 do vËy trõ gi¸ trÞ AL cho
06h:
84 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

AL 0111|1111
|0110
-------------------
1111|1001 = 79h
VËy kÕt qu¶ AL = 79h vµ bit cê AF = 1

A.2.13 LÖnh MUL


Chøc n¨ng: Nh©n néi dung cña thanh ghi AL hoÆc AX víi
néi dung to¸n h¹ng nguån. Gi¸ trÞ cña 2 to¸n h¹ng ®Òu lµ
d¹ng sè kh«ng dÊu (bit cao nhÊt cña 2 to¸n h¹ng ®Òu
mang gi¸ trÞ t¹i vÞ trÝ ®ã chø kh«ng mang ý nghÜa cña
dÊu).

PhÐp nh©n ®îc thùc hiÖn nh sau:


 NÕu lµ phÐp nh©n 2 to¸n h¹ng 8 bit th×:
AL*SRC vµ tÝch sÏ ®Æt trong thanh ghi AX
 NÕu lµ phÐp nh©n 2 to¸n h¹ng 16 bit th×:
AX*SRC vµ tÝch sÏ ®Æt trong ®«i thanh ghi DX:AX
Có ph¸p: MUL SRC
reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* ? ? ? ? *

A.2.14 LÖnh IMUL


Chøc n¨ng: Nh©n néi dung cña thanh ghi AL hoÆc AX víi
néi dung to¸n h¹ng nguån. Gi¸ trÞ cña 2 to¸n h¹ng lµ d¹ng
sè cã dÊu (bit cao nhÊt cña 2 to¸n h¹ng mang ý nghÜa vÒ
dÊu chø kh«ng mang gi¸ trÞ t¹i vÞ trÝ ®ã – bit cao nhÊt lµ
1 th× ®ã lµ sè ©m vµ bit cao nhÊt lµ 0 th× ®ã lµ sè d-
¬ng).
PhÐp nh©n ®îc thùc hiÖn nh sau:
 NÕu lµ phÐp nh©n 2 to¸n h¹ng 8 bit th×:
Phô lôc A. HÖ lÖnh 80x86 85

AL*SRC vµ tÝch sÏ ®Æt trong thanh ghi AX


 NÕu lµ phÐp nh©n 2 to¸n h¹ng 16 bit th×:
AX*SRC vµ tÝch sÏ ®Æt trong ®«i thanh ghi DX:AX
Có ph¸p: IMUL SRC
reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* ? ? ? ? *

A.2.15 LÖnh AAM


Chøc n¨ng: HiÖu chØnh néi dung cã trong thanh ghi AL vÒ
d¹ng ASCII ngay sau khi thùc hiÖn phÐp nh©n 2 sè BCD.
ThuËt to¸n hiÖu chØnh nµy sÏ ®îc tiÕn hµnh b»ng c¸ch
chia gi¸ trÞ cña AL cho 0ah. CÊt th¬ng vµo thanh ghi AH
vµ phÇn d vµo thanh ghi AL.
Có ph¸p: AAM
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
? * * ? * ?
VÝ dô:
Gi¶ sö AL = 07h vµ BL = 09h
Thùc hiÖn phÐp nh©n sau:
MUL BL ; KÕt qu¶ AX = 3Fh=63
NÕu sau lÖnh nh©n nµy sö dông lÖnh hiÖu chØnh
AAM
th× phÐp hiÖu chØnh sÏ tiÕn hµnh nh sau:
Chia AL cho 0ah (10), cã nghÜa:
AL=63 chia cho 10 th× th¬ng ®Æt vµo AH=6 vµ d ®Æt
vµo AL=3
VËy sau hiÖu chØnh kÕt qu¶ sÏ lµ AX=0603h.
86 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

A.2.16 LÖnh DIV


Chøc n¨ng: Chia gi¸ trÞ cã trong thanh ghi AX hoÆc DX:AX
cho néi dung to¸n h¹ng nguån. Gi¸ trÞ cña 2 to¸n h¹ng
®Òu lµ d¹ng sè kh«ng dÊu (bit cao nhÊt cña 2 to¸n h¹ng
®Òu mang gi¸ trÞ t¹i vÞ trÝ ®ã chø kh«ng mang ý nghÜa
cña dÊu).
PhÐp chia ®îc thùc hiÖn nh sau:
 NÕu gi¸ trÞ cña to¸n h¹ng bÞ chia lµ 16 bit vµ gi¸ trÞ
cña to¸n h¹ng chia lµ 8 bit th× ph¶i ®Æt gi¸ trÞ sè bÞ
chia vµo thanh ghi AX vµ gi¸ trÞ sè chia vµo to¸n h¹ng
nguån (SRC), sau ®ã míi tiÕn hµnh phÐp chia. KÕt qu¶
nh sau: AL chøa th¬ng vµ AH chøa phÇn d, cô thÓ lµ:
AX vµ kÕt qu¶ AL chøa th¬ng vµ AH chøa phÇn
d SRC

 NÕu gi¸ trÞ cña to¸n h¹ng bÞ chia lµ 32 bit vµ gi¸ trÞ
cña to¸n h¹ng chia lµ 16 bit th× ph¶i ®Æt gi¸ trÞ sè bÞ
chia vµo ®«i thanh ghi DX:AX vµ gi¸ trÞ sè chia vµo to¸n
h¹ng nguån (SRC), sau ®ã míi tiÕn hµnh phÐp chia. KÕt
qu¶ nh sau: AX chøa th¬ng vµ DX chøa phÇn d, cô thÓ
lµ:
DX : AX
vµ kÕt qu¶ AX chøa th¬ng vµ DX chøa
SRC
phÇn d

Có ph¸p: DIV SRC


reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
? ? ? ? ? ?

A.2.17 LÖnh IDIV


Chøc n¨ng: Chia gi¸ trÞ cã trong thanh ghi AX hoÆc DX:AX
cho néi dung to¸n h¹ng nguån. Gi¸ trÞ cña 2 to¸n h¹ng
Phô lôc A. HÖ lÖnh 80x86 87

®Òu lµ d¹ng sè cã dÊu (bit cao nhÊt cña 2 to¸n h¹ng mang
ý nghÜa vÒ dÊu chø kh«ng mang gi¸ trÞ t¹i vÞ trÝ ®ã – bit
cao nhÊt lµ 1 th× ®ã lµ sè ©m vµ bit cao nhÊt lµ 0 th×
®ã lµ sè d¬ng). PhÐp chia ®îc thùc hiÖn nh sau:
 NÕu gi¸ trÞ cña to¸n h¹ng bÞ chia lµ 16 bit vµ gi¸ trÞ
cña to¸n h¹ng chia lµ 8 bit th× ph¶i ®Æt gi¸ trÞ sè bÞ
chia vµo thanh ghi AX vµ gi¸ trÞ sè chia vµo to¸n h¹ng
nguån (SRC), sau ®ã míi tiÕn hµnh phÐp chia. KÕt qu¶
nh sau: AL chøa th¬ng vµ AH chøa phÇn d, cô thÓ lµ:
AX vµ kÕt qu¶ AL chøa th¬ng vµ AH chøa phÇn
d SRC

 NÕu gi¸ trÞ cña to¸n h¹ng bÞ chia lµ 32 bit vµ gi¸ trÞ
cña to¸n h¹ng chia lµ 16 bit th× ph¶i ®Æt gi¸ trÞ sè bÞ
chia vµo ®«i thanh ghi DX:AX vµ gi¸ trÞ sè chia vµo to¸n
h¹ng nguån (SRC), sau ®ã míi tiÕn hµnh phÐp chia. KÕt
qu¶ nh sau: AX chøa th¬ng vµ DX chøa phÇn d, cô thÓ
lµ:
DX : AX vµ kÕt qu¶ AX chøa th¬ng vµ DX chøa
phÇn d
SRC

Có ph¸p: IDIV SRC


reg
mem
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
? ? ? ? ? ?
A.2.18 LÖnh AAD
Chøc n¨ng: HiÖu chØnh néi dung d¹ng BINARY cã trong
thanh ghi AL vÒ 2 byte d¹ng BCD (n»m ë AH vµ AL) ngay
tríc khi thùc hiÖn phÐp chia. ThuËt to¸n hiÖu chØnh ®îc
tiÕn hµnh nh sau:
 Nh©n néi dung cña thanh ghi AH víi 0ah,
 Céng néi dung cña thanh ghi AH víi AL,
88 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

 Sau ®ã ®Æt AH=00h


Có ph¸p: AAD
Tr¹ng th¸i c¸c bit cê:
O D I T S Z A P C
? * * ? * ?
VÝ dô:
Gi¶ sö AX=0604h th× sau khi thùc hiÖn lÖnh AAD gi¸ trÞ
cña AX=0040h

A.2.19 LÖnh CBW


Chøc n¨ng: Khai triÓn phÇn dÊu cña thanh ghi AL sang
thanh ghi AH khi chuyÓn 1 sè d¹ng cã dÊu 8 bit sang sè cã
dÊu d¹ng 16 bit. ThuËt to¸n chuyÓn thùc hiÖn nh sau:
 NÕu bit cao nhÊt (bit dÊu) cña AL lµ 1 (biÓu hiÖn dÊu
©m) th× ®Æt gi¸ trÞ cña thanh ghi AH=FFh,
 Ngîc l¹i nÕu bit cao nhÊt cña AL lµ 0 (biÓu hiÖn sè d-
¬ng) th× ®Æt gi¸ trÞ AH=0h.
Có ph¸p: CBW

A.2.20 LÖnh CWD


Chøc n¨ng: Khai triÓn phÇn dÊu cña thanh ghi AX sang
thanh ghi DX khi chuyÓn 1 sè d¹ng cã dÊu 16 bit sang sè
cã dÊu d¹ng 32 bit. ThuËt to¸n chuyÓn thùc hiÖn nh sau:
 NÕu bit cao nhÊt (bit dÊu) cña AX lµ 1 (biÓu hiÖn dÊu
©m) th× ®Æt gi¸ trÞ cña thanh ghi DX=FFFFh,
 Ngîc l¹i nÕu bit cao nhÊt cña AX lµ 0 (biÓu hiÖn sè d-
¬ng) th× ®Æt gi¸ trÞ DX=0h.
Có ph¸p: CWD

A.3 Nhãm c¸c lÖnh thao t¸c bit


Nhãm c¸c lÖnh thao t¸c bit cã thÓ t¹m chia thµnh 3 nhãm
nhá, ®ã lµ:
 Nhãm c¸c lÖnh l«gic: NOT, AND, OR, XOR vµ TEST.
Phô lôc A. HÖ lÖnh 80x86 89

 Nhãm c¸c lÖnh dÞch: SHL/SAL, SHR/SAR vµ


 Nhãm c¸c lÖnh quay vßng: ROL, ROR, RCL vµ RCR

Chó ý:
HÇu hÕt c¸c lÖnh trong nhãm nµy khi thùc hiÖn cã t¸c
®éng lµm thay ®æi gi¸ trÞ c¸c bit cê.

A.3.1 LÖnh NOT


Chøc n¨ng: Thùc hiÖn chøc n¨ng bï mét to¸n h¹ng ®Ých
(®¶o gi¸ trÞ c¸c bit cña to¸n h¹ng ®ich).
Có ph¸p: NOT DST
reg
mem

A.3.2 LÖnh AND


Chøc n¨ng: Thùc hiÖn chøc n¨ng Vµ L¤GIC gi÷a hai to¸n
h¹ng. KÕt qu¶ ®Æt ë to¸n h¹ng ®Ých.
Có ph¸p: AND DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0 * * ? * 0
Chó ý:
Trong lËp tr×nh b»ng ng«n ng÷ Assembly hay sö dông
lÖnh AND víi 2 môc ®Ých:
 T¸ch bit:
Muèn xem xÐt tr¹ng th¸i (1 hay 0) mét bit nµo ®ã trong
mét to¸n h¹ng th× tèt nhÊt tiÕn hµnh t¸ch bit ®ã ra
b»ng lÖnh AND, vÝ dô:
Néi dung 8 bit cña AL lµ xxxx|xxxx
Muèn xem bit thø 4 cña AL lµ 1 hay 0, thêng lµm nh sau:
AND AL, 0000|1000B
Sau lÖnh nµy 8 bit cña AL sÏ lµ: 0000|x000
90 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Vµ nh vËy, muèn biÕt bit thø 4 cña AL b»ng 1 hay AL


b»ng 0 th× xem xÐt AL=0 hay  0. NÕu AL=0 th× bit thø
4 sÏ lµ 0, cßn AL 0 th× bit thø 4 cña AL lµ 1.
 Dùng cê phôc vô c¸c lÖnh nh¶y cã ®iÒu kiÖn:
Muèn biÕt mét to¸n h¹ng lµ ©m hay d¬ng hoÆc b»ng 0
hay kh¸c 0, sö dông lÖnh AND, vÝ dô muèn biÕt thanh
ghi AX chøa sè ©m hay d¬ng hoÆc b»ng 0 hay kh¸c 0
th×:
AND AX,AX
Sau lÖnh nµy gi¸ trÞ cña AX kh«ng hÒ thay ®æi, song sÏ
dùng cê:
 NÕu AX=0 th× bit cê ZF=0, cßn AX#0 th× bit
cê ZF=1 vµ
 NÕu AX<0 th× bit cê SF=1, cßn AX≥0 th× bit
cê SF=1

A.3.3 LÖnh OR
Chøc n¨ng: Thùc hiÖn chøc n¨ng HOÆC L¤GIC gi÷a hai
to¸n h¹ng. KÕt qu¶ ®Æt ë to¸n h¹ng ®Ých.
Có ph¸p: OR DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0 * * ? * 0

A.3.4 LÖnh XOR


Chøc n¨ng: Thùc hiÖn chøc n¨ng EXCLUSIVE OR gi÷a hai
to¸n h¹ng (bit cña kÕt qu¶ b»ng 1 khi gi¸ trÞ hai bit t¬ng
øng cña hai to¸n h¹ng kh¸c nhau). KÕt qu¶ ®Æt ë to¸n
h¹ng ®Ých.
Có ph¸p: XOR DST, SRC
reg1, reg2 reg, data
Phô lôc A. HÖ lÖnh 80x86 91

reg, mem mem,data


mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0 * * ? * 0
Chó ý:
Trong lËp tr×nh b»ng ng«n ng÷ Assembly hay sö dông
lÖnh XOR ®Ó cho to¸n h¹ng b»ng 0, vÝ dô:
XOR AX,AX
th× gi¸ trÞ cña AX=0.

A.3.5 LÖnh TEST


Chøc n¨ng: So s¸nh néi dung cña hai to¸n h¹ng b»ng c¸ch
thùc hiÖn lÖnh AND (Vµ L¤GIC) gi÷a hai to¸n h¹ng. KÕt
qu¶ cã t¸c dông ®Õn tr¹ng th¸i c¸c bit cê vµ kh¸c víi lÖnh
AND lµ néi dung hai to¸n h¹ng kh«ng thay ®æi sau khi
lÖnh ®îc thùc hiÖn.
Có ph¸p: TEST DST, SRC
reg1, reg2 reg, data
reg, mem mem,data
mem, reg
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0 * * ? * 0

A.3.6 LÖnh SHL/SAL


Chøc n¨ng: DÞch tr¸i c¸c bit cña to¸n h¹ng ®i COUNT lÇn.
CF
0

Có ph¸p: SHL/SAL DST, COUNT


92 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

reg
mem

Chó ý vÒ COUNT:
 NÕu COUNT=1 th× cã thÓ ®Æt sè 1 trùc tiÕp trong
lÖnh, vÝ dô:
SHL/SAL DST,1
ý nghÜa cña viÖc dÞch tr¸i to¸n h¹ng 1 lÇn lµ nh©n ®«i
gi¸ trÞ cña to¸n h¹ng nÕu to¸n h¹ng lµ nguyªn d¬ng.
 Cßn nÕu COUNT≥2 th× ph¶i nhê ®Õn CL/CX, cã nghÜa:
SHL/SAL DST,4 lµ kh«ng ®îc mµ ph¶i thay b»ng 2
lÖnh:
MOV CL,4
SHL/SAL DST,CL
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * ? * *

A.3.7 LÖnh SHR


Chøc n¨ng: DÞch ph¶i c¸c bit cña to¸n h¹ng ®i COUNT lÇn.
CF
0

Có ph¸p: SHR DST, COUNT


reg
mem
Chó ý vÒ COUNT: Gièng lÖnh A.3.6
ý nghÜa cña viÖc dÞch ph¶i to¸n h¹ng 1 lÇn lµ chia ®«i lµm
trßn díi gi¸ trÞ cña to¸n h¹ng nÕu to¸n h¹ng lµ nguyªn d¬ng.
Tr¹ng th¸i c¸c bit cê:
Phô lôc A. HÖ lÖnh 80x86 93

O D I T S Z A P C
* * * ? * *

A.3.8 LÖnh SAR


Chøc n¨ng: DÞch ph¶i c¸c bit cña to¸n h¹ng ®i COUNT lÇn.
Riªng bit cao nhÊt võa dÞch sang ph¶i võa gi÷ nguyªn gi¸
trÞ.
CF

Có ph¸p: SAR DST, COUNT


reg
mem
Chó ý vÒ COUNT: Gièng c¸c lÖnh trªn.
ý nghÜa cña viÖc dÞch ph¶i SAR to¸n h¹ng 1 lÇn lµ chia
®«i lµm trßn díi gi¸ trÞ cña to¸n h¹ng nÕu to¸n h¹ng lµ
nguyªn (c¶ ©m vµ d¬ng).
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * ? * *

A.3.9 LÖnh ROL


Chøc n¨ng: Quay vßng tr¸i c¸c bit cña to¸n h¹ng ®Ých ®i
COUNT lÇn. Trong mçi lÇn quay gi¸ trÞ bit cao nhÊt võa
chuyÓn vµo bit cê CF ®ång thêi chuyÓn vµo bit thÊp nhÊt.

CF

Có ph¸p: ROL DST, COUNT


reg
mem
94 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Chó ý vÒ COUNT: Gièng c¸c lÖnh trªn.


Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* *

A.3.10 LÖnh ROR


Chøc n¨ng: Quay vßng ph¶i c¸c bit cña to¸n h¹ng ®Ých ®i
COUNT lÇn. Trong mçi lÇn quay gi¸ trÞ bit thÊp nhÊt võa
chuyÓn vµo bit cê CF ®ång thêi chuyÓn vµo bit cao nhÊt.

CF

Có ph¸p: ROR DST, COUNT


reg
mem
Chó ý vÒ COUNT: Gièng c¸c lÖnh trªn.
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* *

A.3.11 LÖnh RCL (Rotate through Carry Left)


Chøc n¨ng: Quay vßng tr¸i th«ng qua cê Carry (CF) c¸c bit
cña to¸n h¹ng ®Ých ®i COUNT lÇn. Trong mçi lÇn quay gi¸
trÞ bit cao nhÊt chuyÓn vµo bit cê CF vµ gi¸ trÞ hiÖn thêi
cña cê CF ®îc chuyÓn vµo bit thÊp nhÊt cña to¸n h¹ng.

CF
Có ph¸p: RCL DST, COUNT
reg
Phô lôc A. HÖ lÖnh 80x86 95

mem
Chó ý vÒ COUNT: Gièng c¸c lÖnh trªn.
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* *

A.3.12 LÖnh RCR (Rotate through Carry Right)


Chøc n¨ng: Quay vßng ph¶i th«ng qua cê Carry (CF) c¸c bit
cña to¸n h¹ng ®Ých ®i COUNT lÇn. Trong mçi lÇn quay gi¸
trÞ bit thÊp nhÊt chuyÓn vµo bit cê CF vµ gi¸ trÞ hiÖn thêi
cña cê CF ®îc chuyÓn vµo bit cao nhÊt cña to¸n h¹ng.

CF
Có ph¸p: RCR DST, COUNT
reg
mem
Chó ý vÒ COUNT: Gièng c¸c lÖnh trªn.
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* *

A.4 Nhãm c¸c lÖnh lµm viÖc víi x©u ký tù


Nhãm c¸c lÖnh lµm viÖc víi x©u cã thÓ t¹m chia thµnh 2
nhãm nhá, ®ã lµ:
 Nhãm c¸c lÖnh di chuyÓn vµ so s¸nh x©u ký tù vµ
 C¸c tiÒn tè lÆp víi c¸c lÖnh lµm viÖc víi x©u ký tù.

A.4.1 LÖnh MOVSB(W)


96 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Chøc n¨ng: ChuyÓn mét ký tù cña mét x©u theo tõng byte
(MOVSB) hay theo 2 byte (MOVSW) cã trong vïng nhí ®îc
trá bëi DS:SI sang vïng nhí ®îc trá bëi ES:DI. Sau mçi lÇn
chuyÓn mét (hoÆc hai byte) th× gi¸ trÞ cña SI vµ DI tù
®éng t¨ng lªn 1 (hoÆc 2) khi gi¸ trÞ cê híng DF=0 (chuyÓn
theo chiÒu t¨ng ®Þa chØ) hoÆc gi¶m ®i 1 (hoÆc 2) khi
gi¸ trÞ cê híng DF=1 (chuyÓn theo chiÒu gi¶m ®Þa chØ).
Có ph¸p: MOVSB
hoÆc
MOVSW
Chó ý: Tríc khi thùc hiÖn lÖnh nµy cÇn ph¶i:
 Trá DS:SI ®Õn ®Çu vïng nhí chøa x©u cÇn chuyÓn ®i,
 Trá ES:DI ®Õn ®Çu vïng nhí mµ x©u sÏ chuyÓn ®Õn,

 X¸c lËp DF=0 hay DF=1 ®Ó biÕt viÖc chuyÓn c¸c ký tù
®îc thùc hiÖn theo chiÒu t¨ng hay gi¶m ®Þa chØ.

A.4.2 LÖnh LODSB(W)


Chøc n¨ng: ChuyÓn mét ký tù cña mét x©u theo tõng byte
(LODSB) hay theo 2 byte (LODSW) cã trong vïng nhí ®îc
trá bëi DS:SI vµo thanh ghi AL hay vµo thanh ghi AX. Sau
mçi lÇn chuyÓn mét (hoÆc hai byte) th× gi¸ trÞ cña SI vµ
DI tù ®éng t¨ng lªn 1 (hoÆc 2) khi gi¸ trÞ cê híng DF=0
(chuyÓn theo chiÒu t¨ng ®Þa chØ) hoÆc gi¶m ®i 1 (hoÆc
2) khi gi¸ trÞ cê híng DF=1 (chuyÓn theo chiÒu gi¶m ®Þa
chØ).
Có ph¸p: LODSB
hoÆc
LODSW
Chó ý: Tríc khi thùc hiÖn lÖnh nµy cÇn ph¶i:
 Trá DS:SI ®Õn ®Çu vïng nhí chøa x©u cÇn chuyÓn ®i,
 X¸c lËp DF=0 hay DF=1 ®Ó biÕt chuyÓn c¸c ký tù ®îc
thùc hiÖn theo chiÒu t¨ng hay gi¶m ®Þa chØ.

A.4.3 LÖnh STOSB(W)


Phô lôc A. HÖ lÖnh 80x86 97

Chøc n¨ng: ChuyÓn mét ký tù cña x©u theo tõng byte


(STOSB) cã trong thanh ghi AL hoÆc 2 ký tù cã trong AX
(STOSW) ®Õn vïng nhí ®îc trá bëi ES:DI. Sau mçi lÇn
chuyÓn mét (hoÆc hai ký tù) th× gi¸ trÞ cña SI vµ DI tù
®éng t¨ng lªn 1 (hoÆc 2) khi gi¸ trÞ cê híng DF=0 (chuyÓn
theo chiÒu t¨ng ®Þa chØ) hoÆc gi¶m ®i 1 (hoÆc 2) khi
gi¸ trÞ cê híng DF=1 (chuyÓn theo chiÒu gi¶m ®Þa chØ).
Có ph¸p: STOSB
hoÆc
STOSW
Chó ý: Tríc khi thùc hiÖn lÖnh nµy cÇn ph¶i:
 Trá ES:DI ®Õn ®Çu vïng nhí sÏ chøa x©u cÇn chuyÓn
®Õn,
 X¸c lËp DF=0 hay DF=1 ®Ó biÕt viÖc chuyÓn c¸c ký tù
®îc thùc hiÖn theo chiÒu t¨ng hay gi¶m ®Þa chØ.

A.4.4 LÖnh CMPSB(W)


Chøc n¨ng: So s¸nh x©u ký tù theo tõng byte (CMPSB) hay
theo 2 byte (CMPSW) cã trong vïng nhí ®îc trá bëi DS:SI víi
x©u ký tù ®îc trá bëi ES:DI. Sau mçi lÇn so s¸nh mét
(hoÆc hai byte) th× gi¸ trÞ cña SI vµ DI tù ®éng t¨ng lªn 1
(hoÆc 2) khi gi¸ trÞ cê híng DF=0 (so s¸nh theo chiÒu t¨ng
®Þa chØ) hoÆc gi¶m ®i 1 (hoÆc 2) khi gi¸ trÞ cê híng
DF=1 (so s¸nh theo chiÒu gi¶m ®Þa chØ).
Có ph¸p: CMPSB
hoÆc
CMPSW
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *
Chó ý: Tríc khi thùc hiÖn lÖnh nµy cÇn ph¶i:
 Trá DS:SI ®Õn ®Çu vïng nhí thø nhÊt,
 Trá ES:DI ®Õn ®Çu vïng nhí thø hai, vµ
98 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

 X¸c lËp DF=0 hay DF=1 ®Ó biÕt viÖc so s¸nh ®îc thùc
hiÖn theo chiÒu t¨ng hay gi¶m ®Þa chØ.

A.4.5 LÖnh SCASB(W)


Chøc n¨ng: So s¸nh x©u ký tù theo tõng byte (SCASB)
hoÆc theo 2 byte (SCASW) cã trong vïng nhí ®îc trá bëi
ES:DI víi néi dung cã trong AL hoÆc AX. Sau mçi lÇn so
s¸nh th× gi¸ trÞ cña DI tù ®éng t¨ng lªn 1 (hoÆc 2) khi gi¸
trÞ cê híng DF=0 (so s¸nh theo chiÒu t¨ng ®Þa chØ) hoÆc
gi¶m ®i 1 (hoÆc 2) khi gi¸ trÞ cê híng DF=1 (so s¸nh theo
chiÒu gi¶m ®Þa chØ).
Có ph¸p: SCASB
hoÆc
SCASW
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *
Chó ý: Tríc khi thùc hiÖn lÖnh nµy cÇn ph¶i:
 Trá ES:DI ®Õn ®Çu vïng nhí sÏ chøa x©u cÇn so s¸nh,
 X¸c lËp DF=0 hay DF=1 ®Ó biÕt viÖc so s¸nh ®îc thùc
hiÖn theo chiÒu t¨ng hay gi¶m ®Þa chØ.
A.4.6 C¸c tiÒn tè lÆp REP
REPE/REPNE/REPNZ/REPZ
TiÒn tè REP
Chøc n¨ng: TiÒn tè REP thùc hiÖn lÖnh lµm viÖc víi x©u ký
tù ®øng sau nã mét sè lÇn cã trong thanh ghi CX cho ®Õn
khi CX=0. Sau mçi lÇn thùc hiÖn, néi dung thanh ghi CX tù
®éng gi¶m ®i 1.
Có ph¸p: REP lÖnh lµm viÖc víi x©u ký tù
VÝ dô:
MOV SI,OIBUF
MOV DI,ADDR
MOV CX,COUNT
CLD
Phô lôc A. HÖ lÖnh 80x86 99

REP MOVSB
LÖnh MOVSB sÏ ®îc thùc hiÖn COUNT lÇn
TiÒn tè REPE hoÆc REPZ
Chøc n¨ng: TiÒn tè REPE hoÆc REPZ thùc hiÖn lÖnh lµm
viÖc víi x©u ký tù ®øng sau nã mét sè lÇn cã trong thanh
ghi CX cho ®Õn khi CX=0 vµ cê ZF=0. Sau mçi lÇn thùc
hiÖn, néi dung thanh ghi CX tù ®éng gi¶m ®i 1.
Có ph¸p: REPE/REPZ lÖnh lµm viÖc víi x©u ký tù
TiÒn tè REPNE hoÆc REPNZ
Chøc n¨ng: TiÒn tè REPNE hoÆc REPNZ thùc hiÖn lÖnh
lµm viÖc víi x©u ký tù ®øng sau nã mét sè lÇn cã trong
thanh ghi CX cho ®Õn khi CX=0 vµ cê ZF=1. Sau mçi lÇn
thùc hiÖn, néi dung thanh ghi CX tù ®éng gi¶m ®i 1.
Có ph¸p: REPE/REPZ lÖnh lµm viÖc víi x©u ký tù

A.5 Nhãm c¸c lÖnh rÏ nh¸nh


Nhãm c¸c lÖnh rÏ nh¸nh cã thÓ t¹m chia thµnh 4 nhãm
nhá, ®ã lµ:
 Nhãm c¸c lÖnh rÏ nh¸nh kh«ng ®iÒu kiÖn,
 Nhãm c¸c lÖnh nh¶y cã ®iÒu kiÖn,
 Nhãm c¸c lÖnh lÆp: LOOP, LOOPE/LOOPZ,
LOOPNE/LOOPNZ vµ JCXZ, vµ
 Nhãm c¸c lÖnh ng¾t mÒm, INT, INTO vµ IRET.

A.5.1 LÖnh CALL


Chøc n¨ng: Gäi ch¬ng tr×nh con.
Có ph¸p: Call addr
label
tªn ch¬ng tr×nh con
reg (chøa ®Þa chØ ®Çu ch¬ng tr×nh con)
mem (chøa ®Þa chØ ®Çu ch¬ng tr×nh con)

A.5.2 LÖnh RET


Chøc n¨ng: Quay vÒ ch¬ng tr×nh ®· gäi nã tõ ch¬ng
tr×nh con.
Có ph¸p: RET
100 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

A.5.3 LÖnh INT


Chøc n¨ng: Thùc hiÖn ng¾t mÒm.
Có ph¸p: INT sè ng¾t
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0 0

A.5.4 LÖnh IRET


Chøc n¨ng: Trë vÒ ch¬ng tr×nh ®· kÝch ho¹t nã sau khi
thùc hiÖn ch¬ng tr×nh con phôc vô ng¾t.
Có ph¸p: IRET
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
* * * * * *

A.5.5 LÖnh JMP


Chøc n¨ng: Nh¶y kh«ng ®iÒu kiÖn.
Có ph¸p: JMP addr
label
tªn ch¬ng tr×nh con
reg (chøa mét ®Þa chØ)
mem (chøa mét ®Þa chØ)
Chó ý: Bíc nh¶y cña lÖnh JMP kh«ng qu¸ 64k.
A.5.6 C¸c lÖnh nh¶y cã ®iÒu kiÖn
Chøc n¨ng: Thùc hiÖn viÖc nh¶y nÕu tháa m·n ®iÒu kiÖn.
Có ph¸p:
 JE/JZ label/addr
Nh¶y nÕu cê ZF=1 hoÆc hai to¸n h¹ng trong phÐp so
s¸nh b»ng nhau.
 JNE/JNZ label/addr
Phô lôc A. HÖ lÖnh 80x86 101

Nh¶y nÕu cê ZF=0 hoÆc hai to¸n h¹ng trong phÐp so


s¸nh kh¸c nhau.
 JL/JNGE label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST) < gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn; gi¸
trÞ cê CF=1.
 JB/JNAE/JC label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST) < gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn d-
¬ng; gi¸ trÞ cê SFOF.
 JLE/JNG label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST) ≤ gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn; gi¸
trÞ cê SFOF hoÆc gi¸ trÞ cê ZF=1.
 JBE/JNA label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST) ≤ gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn d-
¬ng; gi¸ trÞ cê CF=1 hoÆc gi¸ trÞ cê SF=1.
 JG/JNLE label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST) > gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn.
 JA/JNBE label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST) > gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn d-
¬ng; gi¸ trÞ cê CF=0 vµ cê ZF=0.
 JGE/JNL label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST)  gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn; gi¸
trÞ cê SF=OF.
 JAE/JNB/JNC label/addr
Nh¶y nÕu gi¸ trÞ to¸n h¹ng bªn tr¸i (DST)  gi¸ trÞ to¸n
h¹ng bªn ph¶i (SRC) cña phÐp so s¸nh 2 sè nguyªn d-
¬ng; gi¸ trÞ cê CF=0.
 JP/JPE label/addr
Nh¶y nÕu parity lµ ch½n; gi¸ trÞ cê PF=1.
 JNP/JPO label/addr
102 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Nh¶y nÕu parity lµ lÎ hoÆc kh«ng cã parity; gi¸ trÞ cê


PF=0.
 JO label/addr
Nh¶y nÕu trµn; gi¸ trÞ cê OF=1.
 JNO label/addr
Nh¶y nÕu kh«ng trµn; gi¸ trÞ cê OF=0.
 JS label/addr
Nh¶y nÕu cê dÊu SF=1 (sè ©m).
 JNS label/addr
Nh¶y nÕu cê dÊu SF=0 (sè d¬ng).
 JCXZ label/addr
Nh¶y nÕu gi¸ trÞ thanh ghi CX=0.
Chó ý: Bíc nh¶y cña lÖnh nh¶y cã ®iÒu kiÖn kh«ng vît qu¸
128 byte.

A.5.7 C¸c lÖnh lÆp


Chøc n¨ng: Thùc hiÖn vßng lÆp.
Có ph¸p:
LÖnh lÆp LOOP
Chøc n¨ng: LÆp viÖc thùc hiÖn khèi lÖnh Assembly n»m
gi÷a nh·n vµ LOOP nh·n cho ®Õn khi gi¸ trÞ thanh ghi CX=0.
Mçi khi thùc hiÖn xong mét vßng lÆp gi¸ trÞ thanh ghi CX
tù ®éng gi¶m ®i 1.
Có ph¸p:
CX chøa sè lÇn lÆp (CX≥1)
nh·n:
khèi lÖnh ASM cÇn lÆp
LOOP nh·n
LÖnh LOOPZ/LOOPE
Chøc n¨ng: LÆp viÖc thùc hiÖn khèi lÖnh Assembly n»m
gi÷a nh·n vµ LOOPZ/LOOPE nh·n cho ®Õn khi gi¸ trÞ
thanh ghi CX=0 vµ bit cê Zero (ZF)=1. Mçi khi thùc hiÖn
xong mét vßng lÆp gi¸ trÞ thanh ghi CX tù ®éng gi¶m ®i
1.
Có ph¸p:
CX chøa sè lÇn lÆp (CX≥1)
Phô lôc A. HÖ lÖnh 80x86 103

nh·n:
khèi lÖnh ASM cÇn lÆp
LOOPZ/LOOPE nh·n
LÖnh LOOPnZ/LOOPnE
Chøc n¨ng: LÆp viÖc thùc hiÖn khèi lÖnh Assembly n»m
gi÷a nh·n vµ LOOPNZ/LOOPNE nh·n cho ®Õn khi gi¸ trÞ
thanh ghi CX=0 vµ bit cê Zero (ZF)=0. Mçi khi thùc hiÖn
xong mét vßng lÆp gi¸ trÞ thanh ghi CX tù ®éng gi¶m ®i
1.
Có ph¸p:
CX chøa sè lÇn lÆp (CX≥1)
nh·n:
khèi lÖnh ASM cÇn lÆp
LOOPNZ/LOOPNE nh·n

A.6 Nhãm c¸c lÖnh cßn l¹i


C¸c lÖnh trong nhãm nµy cã thÓ t¹m chia nh sau:
 Nhãm c¸c lÖnh thao t¸c víi c¸c bit cê: CLC, STC, CMC,
CLD, STD, CLI vµ STI,
 LÖnh ®ång bé qu¸ tr×nh xö lý: HLT vµ
 LÖnh kh«ng thùc hiÖn: NOP

A.6.1 LÖnh CLC


Chøc n¨ng: Xãa gi¸ trÞ cê CF vÒ 0 (CF=0).
Có ph¸p: CLC
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0

A.6.2 LÖnh STC


Chøc n¨ng: §a gi¸ trÞ cê CF lªn 1 (CF=1).
Có ph¸p: STC
Tr¹ng th¸i c¸c bit cê:
104 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

O D I T S Z A P C
1

A.6.2 LÖnh CMC


Chøc n¨ng: §¶o gi¸ trÞ bit cê CF.
Có ph¸p: CMC
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
*

A.6.4 LÖnh CLD


Chøc n¨ng: Xãa gi¸ trÞ cê DF vÒ 0 (DF=0).
Có ph¸p: CLD
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0
Chó ý:
Víi c¸c lÖnh lµm viÖc víi x©u ký tù (c¸c lÖnh trong nhãm
A.4) th× viÖc thùc hiÖn sÏ ®îc tiÕn hµnh theo chiÒu t¨ng
®Þa chØ nÕu DF=0.

A.6.5 LÖnh STD


Chøc n¨ng: §a gi¸ trÞ cê DF lªn 1 (DF=1).
Có ph¸p: STD
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
1
Phô lôc A. HÖ lÖnh 80x86 105

Chó ý:
Víi c¸c lÖnh lµm viÖc víi x©u ký tù (c¸c lÖnh trong nhãm
A.4) th× viÖc thùc hiÖn sÏ ®îc tiÕn hµnh theo chiÒu gi¶m
®Þa chØ nÕu DF=1.

A.6.6 LÖnh CLI


Chøc n¨ng: Xãa gi¸ trÞ cê IF vÒ 0 (IF=0). CÊm toµn bé c¸c
ng¾t cøng trõ MNI (Non Maskable Interrupt - Ng¾t kh«ng
che).

Có ph¸p: CLI
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
0

A.6.7 LÖnh STI


Chøc n¨ng: §a gi¸ trÞ cê IF lªn 1 (IF=1). Cho phÐp c¸c ng¾t
cøng ng¾t.
Có ph¸p: STI
Tr¹ng th¸i c¸c bit cê:

O D I T S Z A P C
1

A.6.8 LÖnh HLT


Chøc n¨ng: Dõng m¸y.
Có ph¸p: HLT

A.6.9 LÖnh NOP


Chøc n¨ng: LÖnh kh«ng thùc hiÖn g× c¶.
Có ph¸p: NOP
Chó ý:
106 c¸c bµi tËp lËp tr×nh b»ng ng«n ng÷ assembly

Tuy lÖnh NOP kh«ng thùc hiÖn mét thao t¸c nµo song nã
vÉn cã ý nghÜa, vÝ dô cã thÓ dïng lÖnh NOP ®Ó t¹o vßng
trÔ theo yªu cÇu hoÆc dïng lÖnh NOP ®Ó t¹o vßng lÆp v«
tËn chê tÝn hiÖu ng¾t tõ bªn ngoµi.
VÝ dô:
T¹o mét vßng lÆp v« tËn ®Ó chê ng¾t.
LAP:
NOP
JMP LAP

You might also like