Download as doc, pdf, or txt
Download as doc, pdf, or txt
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