ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINHÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ ðIỆN TỬKHOA CÔNG NGHỆ ðIỆN TỬ
BỘ MÔN ðIỆN TỬ CÔNG NGHIỆPBỘ MÔN ðIỆN TỬ CÔNG NGHIỆP
BÀI GIẢNG LÝ THUYẾTBÀI GIẢNG LÝ THUYẾT
VI XỬ LÝVI XỬ LÝ
TP. HỒ CHÍ MINHTP. HỒ CHÍ MINH
THÁNG 09THÁNG 09 20092009
VI XỬ LÝVI XỬ LÝ
GiáoGiáo viên: PHẠM QUANG TRÍviên: PHẠM QUANG TRÍ
ÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINHÐẠI HỌC CÔNG NGHIỆP TP. HỒ CHÍ MINH
KHOA CÔNG NGHỆ ðIỆN TỬKHOA CÔNG NGHỆ ðIỆN TỬ
BỘ MÔN ðIỆN TỬ CÔNG NGHIỆPBỘ MÔN ðIỆN TỬ CÔNG NGHIỆP
CHƯƠNG 3CHƯƠNG 3
LẬP TRÌNH HỢP NGỮLẬP TRÌNH HỢP NGỮ
CHO 8051CHO 8051
NgônNgôn ngữngữ lậplập trìnhtrình cấpcấp thấpthấp
NgônNgôn ngữngữ lậplập trìnhtrình cấpcấp caocao
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
(Low(Low
level programming language)level programming language)
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
GIỚI THIỆU CHUNGGIỚI THIỆU CHUNG
Ngôn ngữ lập trình cấp caoNgôn ngữ lập trình cấp cao
(High(High level programming language)level programming language)
(Low(Low
level programming language)level programming language)
NgônNgôn ngữngữ lậplập trìnhtrình cấpcấp thấpthấp::
NgônNgôn ngữngữ máymáy::
NgônNgôn ngữngữ nhịnhị phânphân tựtự nhiênnhiên màmà CPUCPU cócó thểthể
nhậnnhận biếtbiết vàvà thựcthực hiệnhiện
MỗiMỗi câucâu lệnhlệnh ñượcñược biểubiểu diễndiễn bằngbằng chuỗichuỗi cáccác
concon sốsố 00 vàvà 11
KhóKhó ñọcñọc hiểuhiểu vàvà khókhó sửsử dụngdụng ñốiñối vớivới concon
ngườingười
HợpHợp
ngữngữ
::
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
(Low(Low
level programming language)level programming language)
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
GIỚI THIỆU CHUNGGIỚI THIỆU CHUNG
Ngôn ngữ lập trình cấp caoNgôn ngữ lập trình cấp cao
(High(High level programming language)level programming language)
Hợp ngữHợp ngữ
(Assembly language)(Assembly language)
HợpHợp
ngữngữ
::
ThayThay thếthế cáccác mãmã nhịnhị phânphân bằngbằng cáccác mãmã gợigợi
nhớnhớ giúpgiúp dễdễ nhớnhớ vàvà dễdễ lậplập trìnhtrình hơnhơn soso vớivới
ngônngôn ngữngữ máymáy
MỗiMỗi câucâu lệnhlệnh tươngtương ứngứng vớivới mộtmột chỉchỉ lệnhlệnh
màmà CPUCPU cócó thểthể thựcthực hiệnhiện ñượcñược
ðượcðược thiếtthiết kếkế chocho cáccác khảkhả năngnăng vàvà tậptập lệnhlệnh
cụcụ thểthể củacủa mộtmột loạiloại CPUCPU nhấtnhất ñịnhñịnh
SoSo vớivới ngônngôn ngữngữ cấpcấp caocao:: chươngchương trìnhtrình viếtviết
khókhó vàvà nhiềunhiều lệnhlệnh hơnhơn
SoSo vớivới ngônngôn ngữngữ cấpcấp caocao:: câucâu lệnhlệnh ngắnngắn
gọn,gọn, chươngchương trìnhtrình hoạthoạt ñộngñộng tốctốc ñộñộ nhanhnhanh
hơn,hơn, hiệuhiệu suấtsuất tốttốt vàvà chiếmchiếm ítít bộbộ nhớnhớ
(Low(Low
level programming language)level programming language)
Ngôn ngữ máyNgôn ngữ máy
(Machine language)(Machine language)
NgônNgôn ngữngữ lậplập trìnhtrình cấpcấp caocao::
SửSử dụngdụng cáccác từtừ vàvà phátphát biểubiểu gầngần giốnggiống vớivới ngônngôn
ngữngữ concon ngườingười
MỗiMỗi câucâu lệnhlệnh tươngtương ứngứng vớivới nhiềunhiều chỉchỉ lệnhlệnh trongtrong
ngônngôn ngữngữ cấpcấp thấpthấp
SoSo vớivới ngônngôn ngữngữ cấpcấp thấpthấp:: chươngchương trìnhtrình viếtviết dễ,dễ,
nhanhnhanh vàvà ítít lệnhlệnh hơnhơn
SoSo vớivới ngônngôn ngữngữ cấpcấp thấpthấp:: câucâu lệnhlệnh dài,dài, chươngchương
trìnhtrình hoạthoạt ñộngñộng tốctốc ñộñộ chậmchậm hơn,hơn, hiệuhiệu suấtsuất
khôngkhông
caocao
vàvà
chiếmchiếm
nhiềunhiều
bộbộ
nhớnhớ
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
(Low(Low
level programming language)level programming language)
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
GIỚI THIỆU CHUNGGIỚI THIỆU CHUNG
Ngôn ngữ lập trình cấp caoNgôn ngữ lập trình cấp cao
(High(High level programming language)level programming language)
Hợp ngữHợp ngữ
(Assembly language)(Assembly language)
khôngkhông
caocao
vàvà
chiếmchiếm
nhiềunhiều
bộbộ
nhớnhớ
(Low(Low
level programming language)level programming language)
Ngôn ngữ máyNgôn ngữ máy
(Machine language)(Machine language)
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
GIỚI THIỆU CHUNGGIỚI THIỆU CHUNG
Ngôn ngữ lập trình cấp caoNgôn ngữ lập trình cấp cao
(High(High level programming language)level programming language)
CPU thực thi chương trìnhCPU thực thi chương trình
Các công ñoạn ñể thực thi một chương trìnhCác công ñoạn ñể thực thi một chương trình
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
GIỚI THIỆU CHUNGGIỚI THIỆU CHUNG
Hợp ngữHợp ngữ
(Assembly language)(Assembly language)
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
(Low(Low level programming language)level programming language)
CPU thực thi chương trìnhCPU thực thi chương trình
Các công ñoạn ñể thực thi một chương trìnhCác công ñoạn ñể thực thi một chương trình
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
GIỚI THIỆU CHUNGGIỚI THIỆU CHUNG
Ngôn ngữ lập trình cấp caoNgôn ngữ lập trình cấp cao
(High(High level programming language)level programming language)
Hợp ngữHợp ngữ
(Assembly language)(Assembly language)
Ngôn ngữ lập trình cấp thấpNgôn ngữ lập trình cấp thấp
(Low(Low level programming language)level programming language)
Ngôn ngữ máyNgôn ngữ máy
(Machine language)(Machine language)
CPU thực thi chương trìnhCPU thực thi chương trình
Các công ñoạn ñể thực thi một chương trìnhCác công ñoạn ñể thực thi một chương trình
KhuôngKhuông dạngdạng củacủa mộtmột dòngdòng lệnhlệnh::
[[LabelLabel::]] MnemonicMnemonic [[OperandOperand][][,Operand,Operand][][,Operand,Operand]] [[CommentComment]]
NhãnNhãn (Label)(Label):: BiểuBiểu thịthị ñịañịa chỉchỉ củacủa dòngdòng lệnhlệnh ((hoặchoặc dữdữ liệuliệu)) theotheo sau,sau,
ñượcñược dùngdùng trongtrong trườngtrường toántoán hạnghạng củacủa lệnhlệnh rẽrẽ nhánhnhánh
VíVí dụdụ::
MAINMAIN::
MOVMOV A,A, ##2020HH
LOOPLOOP
::
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
KHUÔNG DẠNG CỦA CHƯƠNG TRÌNHKHUÔNG DẠNG CỦA CHƯƠNG TRÌNH
LOOPLOOP
::
ADDADD A,A, ##0101HH
CJNECJNE A,A, ##3535H,H, LOOPLOOP
SJMPSJMP $$
LưuLưu ýý vềvề nhãnnhãn::
DoDo ngườingười lậplập trìnhtrình tựtự ñặtñặt (không(không ñượcñược trùngtrùng vớivới từtừ khoá,khoá, mãmã gợigợi nhớ,nhớ,
chỉchỉ dẫn,dẫn, toántoán tửtử hoặchoặc kýký hiệuhiệu tiềntiền ñịnhñịnh nghĩa)nghĩa)
BắtBắt ñầuñầu bằngbằng kýký tựtự chữ,chữ, dấudấu chấmchấm hỏihỏi (?),(?), dấudấu gạchgạch dướidưới (_)(_)
DàiDài tốitối ñaña 3131 kýký tựtự
KếtKết thúcthúc bằngbằng dấudấu haihai chấmchấm ((::))
KýKý hiệuhiệu $$ dùngdùng ñểñể thamtham chiếuchiếu ñếnñến vịvị trítrí hiệnhiện tạitại củacủa dòngdòng lệnhlệnh
KhuôngKhuông dạngdạng củacủa mộtmột dòngdòng lệnhlệnh::
[[LabelLabel::]] MnemonicMnemonic [[OperandOperand][][,Operand,Operand][][,Operand,Operand]] [[CommentComment]]
•• MãMã gợigợi nhớnhớ (Mnemonic)(Mnemonic):: BiểuBiểu diễndiễn cáccác lệnhlệnh hoặchoặc cáccác chỉchỉ dẫndẫn củacủa
chươngchương trìnhtrình dịchdịch hợphợp ngữngữ
VíVí dụdụ::
ORGORG 00000000HH
PARPAR EQUEQU 100100
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
KHUÔNG DẠNG CỦA CHƯƠNG TRÌNHKHUÔNG DẠNG CỦA CHƯƠNG TRÌNH
ACALLACALL BBBBBB
CJNECJNE A,A, ##3535H,H, LOOPLOOP
JNBJNB PP33 11,, TEST_TEST_11
KhuôngKhuông dạngdạng củacủa mộtmột dòngdòng lệnhlệnh::
[[LabelLabel::]] MnemonicMnemonic [[OperandOperand][][,Operand,Operand][][,Operand,Operand]] [[CommentComment]]
•• ToánToán hạnghạng (Operand)(Operand):: ChứaChứa ñịañịa chỉchỉ hoặchoặc dữdữ liệuliệu màmà lệnhlệnh sẽsẽ sửsử dụngdụng
SốSố lượnglượng toántoán hạnghạng trongtrong mộtmột dòngdòng lệnhlệnh phụphụ thuộcthuộc vàovào từngtừng dòngdòng lệnhlệnh
VíVí dụdụ::
RETRET –– khôngkhông toántoán hạng,hạng,
INCINC AA –– mộtmột toántoán hạng,hạng,
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
KHUÔNG DẠNG CỦA CHƯƠNG TRÌNHKHUÔNG DẠNG CỦA CHƯƠNG TRÌNH
ADDADD AA,, RR00 –– haihai toántoán hạng,hạng,
CJNECJNE AA,, ##1212HH,, ABCABC –– baba toántoán hạnghạng
LưuLưu ýý vềvề toántoán hạnghạng::
NếuNếu lệnhlệnh cócó nhiềunhiều toántoán hạnghạng thìthì cáccác toántoán hạnghạng nàynày cáchcách nhaunhau bằngbằng dấudấu
phẩyphẩy (,)(,)
TrongTrong cáccác lệnhlệnh cócó 22 toántoán hạnghạng thìthì toántoán hạnghạng ñầuñầu tiêntiên ñượcñược gọigọi làlà toántoán
hnghng ñíchñích ((DestinationDestination)),, toántoán hạnghạng thứthứ haihai ñượcñược gọigọi làlà toántoán hnghng
ngunngun ((SourceSource))
KhuôngKhuông dạngdạng củacủa mộtmột dòngdòng lệnhlệnh::
[[LabelLabel::]] MnemonicMnemonic [[OperandOperand][][,Operand,Operand][][,Operand,Operand]] [[CommentComment]]
•• ChúChú thíchthích (Comment)(Comment):: LàmLàm chocho rõrõ nghĩanghĩa chocho chươngchương trìnhtrình
VíVí dụdụ::
SJMPSJMP AAAAAA ;; LenhLenh nhaynhay khongkhong dieudieu kienkien denden AAAAAA
ACALLACALL BBBBBB ;; LenhLenh goigoi chuongchuong trinhtrinh concon BBBBBB
CJNECJNE A,A, ##3535H,H, LOOPLOOP ;; LenhLenh soso sanhsanh
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
KHUÔNG DẠNG CỦA CHƯƠNG TRÌNHKHUÔNG DẠNG CỦA CHƯƠNG TRÌNH
JNBJNB PP33 11,, TEST_TEST_11 ;; LenhLenh kiemkiem tratra giagia tritri bitbit PP33 11
LưuLưu ýý vềvề chúchú thíchthích::
BắtBắt ñầuñầu bằngbằng dấudấu chấmchấm phẩyphẩy ((;;))
CácCác chúchú thíchthích phảiphải nằmnằm trêntrên cùngcùng mộtmột dòngdòng
CácCác chúchú thíchthích nếunếu nằmnằm trêntrên nhiềunhiều dòngdòng thìthì mỗimỗi dòngdòng cũngcũng phảiphải bắtbắt ñầuñầu
bằngbằng dấudấu chấmchấm phẩyphẩy ((;;))
CáchCách biểubiểu diễndiễn cáccác giágiá trịtrị vàvà hằnghằng sốsố::
•• DùngDùng mộtmột cáchcách tườngtường minhminh::
VíVí dụdụ::
MOVMOV 2020H,H, EE00HH
•• DùngDùng kýký hiệuhiệu tiềntiền ñịnhñịnh nghĩanghĩa::
VíVí dụdụ::
MOVMOV 2020H,H, AA
SETBSETB
ACCACC
77
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
SETBSETB
ACCACC
77
•• DùngDùng mộtmột biểubiểu thứcthức::
VíVí dụdụ::
MOVMOV A,A, ##2525 MODMOD 77
MOVMOV A,A, #HIGH(#HIGH(12341234H)H)
MOVMOV A,A, ##1010 ++ 1010HH
CơCơ sốsố chocho cáccác hằnghằng sốsố::
•• SốSố nhịnhị phânphân (Binary)(Binary):: phảiphải kèmkèm theotheo kýký hiệuhiệu BB
VíVí dụdụ::
MOVMOV A,A, ##1001110110011101BB
•• SốSố bátbát phânphân (Octal)(Octal):: phảiphải kèmkèm theotheo kýký hiệuhiệu OO hoặchoặc QQ
VíVí dụdụ::
MOVMOV A,A, ##235235OO
MOVMOV
A,A,
##
235235
QQ
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
MOVMOV
A,A,
##
235235
QQ
•• SốSố thậpthập phânphân (Decimal)(Decimal):: phảiphải kèmkèm theotheo kýký hiệuhiệu DD hoặchoặc khôngkhông cócó
VíVí dụdụ::
MOVMOV A,A, ##157157DD
MOVMOV A,A, ##157157
•• SốSố thậpthập lụclục phânphân (Hexa(Hexa Decimal)Decimal):: phảiphải kèmkèm theotheo kýký hiệuhiệu HH
VíVí dụdụ::
MOVMOV A,A, ##99DDHH
CơCơ sốsố chocho cáccác hằnghằng sốsố::
•• LuLu ýý:: CácCác giágiá trịtrị tứctức thờithời nếunếu cócó thànhthành phầnphần chữchữ ((A,A, B,B, C,C, ……,, FF)) ñứngñứng
ñầuñầu thìthì cầncần phảiphải thêmthêm ss 00 vàovào trướctrước thànhthành phầnphần chữchữ vàvà sausau kýký hiệuhiệu “#”“#”
VíVí dụdụ::
MOV A, #BHMOV A, #BH ;Thiếu số 0 ;Thiếu số 0 →→ gây lỗi khi biên dịch.gây lỗi khi biên dịch.
MOV A, #MOV A, #00BHBH ;Thêm số 0 ;Thêm số 0 →→ ñúng.ñúng.
MOV A, #F9HMOV A, #F9H ;Thiếu số 0 ;Thiếu số 0 →→ gây lỗi khi biên dịch.gây lỗi khi biên dịch.
MOV A, #MOV A, #
00
F9HF9H
;Thêm số 0 ;Thêm số 0
→→
ñúng.ñúng.
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
MOV A, #MOV A, #
00
F9HF9H
;Thêm số 0 ;Thêm số 0
→→
ñúng.ñúng.
CácCác chuỗichuỗi kýký tựtự::
•• ChuỗiChuỗi kýký tựtự ñượcñược ñặtñặt trongtrong dấudấu nháynháy ñơnñơn (‘(‘……‘)‘)
•• ChuỗiChuỗi cócó 11 kýký tựtự ((88 bit)bit) hoặchoặc 22 kýký tựtự ((1616 bit)bit) ñượcñược sửsử dụngdụng làmlàm toántoán
hạnghạng
•• CácCác kýký tựtự ñượcñược biếnbiến ñổiñổi thànhthành mãmã nhịnhị phânphân (chuẩn(chuẩn ASCII)ASCII) khikhi thựcthực hiệnhiện
VíVí dụdụ::
CJNECJNE A,A, ## ’b’’b’,, LOOPLOOP ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ CJNECJNE A,A, ##6262HH,, LOOPLOOP
SUBBSUBB
A,A,
##
’B’’B’
⇔
⇔⇔
⇔⇔
⇔⇔
⇔
SUBBSUBB
A,A,
##
4242
HH
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
SUBBSUBB
A,A,
##
’B’’B’
⇔
⇔⇔
⇔⇔
⇔⇔
⇔
SUBBSUBB
A,A,
##
4242
HH
MOVMOV A,A, ## ‘‘22’’ ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##3232HH
MOVMOV DPTR,DPTR, ## ‘AB’‘AB’ ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV DPTR,DPTR, ##41424142HH
MOVMOV A,A, ## ‘AB’‘AB’ ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ KhôngKhông hợphợp lệlệ
CácCác toántoán tửtử sốsố họchọc::
•• CộngCộng ++
•• TrừTrừ
•• NhânNhân **
•• ChiaChia // (Phép(Phép chiachia lấylấy thươngthương số)số)
•• ModuloModulo MODMOD (Phép(Phép chiachia lấylấy sốsố dư)dư)
VíVí dụdụ::
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
MOVMOV A,A, ##1010 ++ 1010HH ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##11AHAH
MOVMOV A,A, ##1010HH 1010 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##0606HH
MOVMOV A,A, ##2020 ** 22 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##2828HH
MOVMOV A,A, ##2525 // 77 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##0303HH
MOVMOV A,A, ##2525 MODMOD 77 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##0404HH
CácCác toántoán tửtử logiclogic::
•• CácCác toántoán tửtử gồmgồm:: AND,AND, OR,OR, XORXOR vàvà NOTNOT
•• CácCác thaothao táctác ñượcñược thựcthực hiệnhiện trêntrên từngtừng bitbit củacủa toántoán hạnghạng
VíVí dụdụ::
MOVMOV A,A, ## ‘‘99’’ ANDAND 00FHFH ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##0909HH
MOVMOV A,A, ## ‘‘99’’ OROR 00FHFH ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##33FHFH
MOVMOV A,A, ## ‘‘99’’ XORXOR 00FHFH ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##3636HH
MOVMOV
A,A,
##
NOTNOT
55
CHCH
⇔
⇔⇔
⇔⇔
⇔⇔
⇔
MOVMOV
A,A,
##
00
AA
33
HH
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
MOVMOV
A,A,
##
NOTNOT
55
CHCH
⇔
⇔⇔
⇔⇔
⇔⇔
⇔
MOVMOV
A,A,
##
00
AA
33
HH
MOVMOV A,A, ##NOTNOT 33 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##00FCHFCH
CácCác toántoán tửtử ñặcñặc biệtbiệt::
•• DịchDịch phảiphải SHRSHR (Thêm(Thêm bitbit 00 vàovào bênbên tráitrái sausau khikhi dịch)dịch)
•• DịchDịch tráitrái SHLSHL (Thêm(Thêm bitbit 00 vàovào bênbên phảiphải sausau khikhi dịch)dịch)
•• LấyLấy bytebyte caocao HIGHHIGH
•• LấyLấy bytebyte thấpthấp LOWLOW
•• ðượcðược ñánhñánh giágiá trướctrước ()()
VíVí dụdụ::
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
MOVMOV A,A, ##0808HH SHLSHL 11 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##1010HH
MOVMOV A,A, ##0808HH SHRSHR 11 ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##0404HH
MOVMOV A,A, ##HIGHHIGH 12341234HH ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##1212HH
MOVMOV A,A, ##LOWLOW 12341234HH ⇔
⇔⇔
⇔⇔
⇔⇔
⇔ MOVMOV A,A, ##3434HH
CácCác toántoán tửtử quanquan hệhệ::
•• KếtKết quảquả trảtrả vềvề làlà 0000HH (quan(quan hệhệ SAISAI)) hoặchoặc FFHFFH (quan(quan hệhệ ðÚNGðÚNG))
•• BằngBằng EQEQ ==
•• KhôngKhông bằngbằng NENE <><>
•• NhỏNhỏ hơnhơn LTLT <<
•• NhỏNhỏ hơnhơn hoặchoặc bằngbằng LELE <=<=
••
LớnLớn
hơnhơn
GTGT
>>
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
••
LớnLớn
hơnhơn
GTGT
>>
•• LớnLớn hơnhơn hoặchoặc bằngbằng GEGE >=>=
VíVí dụdụ::
MOVMOV A,A, ##55 == 55
MOVMOV A,A, ##55 NENE 44
MOVMOV A,A, ## ’X’’X’ LTLT ‘Z’‘Z’
MOVMOV A,A, ## ’X’’X’ >=>= ‘Z’‘Z’
MOVMOV A,A, ##100100 GEGE 5050
CácCác lệnhlệnh trêntrên ñềuñều trảtrả vềvề kếtkết quảquả ñúngñúng nênnên sẽsẽ tươngtương ñươngñương vớivới lệnhlệnh
MOVMOV A,#0FFHA,#0FFH
MứcMức ưuưu tiêntiên củacủa cáccác toántoán tửtử::
•• ThứThứ tựtự ưuưu tiêntiên củacủa cáccác toántoán tửtử từtừ caocao xuốngxuống thấpthấp::
(( ))
HIGHHIGH LOWLOW
** // MODMOD SHLSHL SHRSHR
++
EQEQ NENE LTLT LELE GTGT GEGE == <><> <=<= >=>=
NOTNOT
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨCCÁC QUI LUẬT CHO VIỆC ðÁNH GIÁ BIỂU THỨC
NOTNOT
ANDAND
OROR XORXOR
•• KhiKhi cáccác toántoán tửtử cócó cùngcùng mứcmức ưuưu tiêntiên thìthì chúngchúng ñượcñược ñánhñánh giágiá theotheo thứthứ
tựtự từtừ tráitrái sangsang phảiphải
VíVí dụdụ::
HIGHHIGH (( ‘A’‘A’ SHLSHL 88)) KếtKết quảquả làlà 4141HH
HIGHHIGH ‘A’‘A’ SHLSHL 88 KếtKết quảquả làlà 0000HH
NOTNOT ‘A’‘A’ –– 11 KếtKết quảquả làlà BFHBFH
‘A’‘A’ OROR ‘A’‘A’ SHLSHL 88 KếtKết quảquả làlà 4141HH
ChỉChỉ dẫndẫn ñiềuñiều khiểnkhiển trạngtrạng tháithái::
•• ORG,ORG, END,END, USINGUSING
ChỉChỉ dẫndẫn ñịnhñịnh nghĩanghĩa kýký hiệuhiệu::
•• SEGMENT,SEGMENT, EQU,EQU, SET,SET, DATA,DATA, IDATA,IDATA, XDATA,XDATA, BIT,BIT, CODECODE
ChỉChỉ dẫndẫn dànhdành trướctrước vùngvùng nhớnhớ // khởikhởi ñộngñộng vùngvùng nhớnhớ::
•• DS,DS, DBIT,DBIT, DB,DB, DWDW
ChỉChỉ
dẫndẫn
liênliên
kếtkết
chươngchương
trìnhtrình
::
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC CHỈ DẪN TRONG LẬP TRÌNHCÁC CHỈ DẪN TRONG LẬP TRÌNH
ChỉChỉ
dẫndẫn
liênliên
kếtkết
chươngchương
trìnhtrình
::
•• PUBLIC,PUBLIC, EXTRN,EXTRN, NAMENAME
ChỉChỉ dẫndẫn lựalựa chọnchọn phânphân ñoạnñoạn::
•• PSEG,PSEG, CSEG,CSEG, DSEG,DSEG, ISEG,ISEG, BSEG,BSEG, XSEGXSEG
ChỉChỉ dẫndẫn ñiềuñiều khiểnkhiển trạngtrạng tháithái::
•• ORGORG,, ENDEND,, USINGUSING
ChỉChỉ dẫndẫn ñịnhñịnh nghĩanghĩa kýký hiệuhiệu::
•• SEGMENT,SEGMENT, EQUEQU,, SET,SET, DATA,DATA, IDATA,IDATA, XDATA,XDATA, BITBIT,, CODECODE
ChỉChỉ dẫndẫn dànhdành trướctrước vùngvùng nhớnhớ // khởikhởi ñộngñộng vùngvùng nhớnhớ::
•• DS,DS, DBIT,DBIT, DBDB,, DWDW
ChỉChỉ
dẫndẫn
liênliên
kếtkết
chươngchương
trìnhtrình
::
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC CHỈ DẪN TRONG LẬP TRÌNHCÁC CHỈ DẪN TRONG LẬP TRÌNH
ChỉChỉ
dẫndẫn
liênliên
kếtkết
chươngchương
trìnhtrình
::
•• PUBLIC,PUBLIC, EXTRN,EXTRN, NAMENAME
ChỉChỉ dẫndẫn lựalựa chọnchọn phânphân ñoạnñoạn::
•• PSEG,PSEG, CSEG,CSEG, DSEG,DSEG, ISEG,ISEG, BSEG,BSEG, XSEGXSEG
ChỉChỉ dẫndẫn ORGORG::
•• CúCú pháppháp:: ORGORG expressionexpression (expression(expression:: biểubiểu thức)thức)
•• ThiếtThiết lậplập mộtmột gốcgốc mớimới củacủa chươngchương trìnhtrình chocho cáccác phátphát biểubiểu theotheo sausau
VíVí dụdụ::
ORGORG 100100HH ;; ThiếtThiết lậplập (PC)(PC) == 100100HH chocho lệnhlệnh theotheo sausau
ChỉChỉ dẫndẫn ENDEND::
••
CúCú
pháppháp
::
ENDEND
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC CHỈ DẪN TRONG LẬP TRÌNHCÁC CHỈ DẪN TRONG LẬP TRÌNH
••
CúCú
pháppháp
::
ENDEND
•• LàLà phátphát biểubiểu kếtkết thúcthúc củacủa chươngchương trìnhtrình nguồnnguồn
•• MọiMọi phátphát biểubiểu theotheo sausau phátphát biểubiểu ENDEND ñềuñều khôngkhông hợphợp lệlệ
ChỉChỉ dẫndẫn USINGUSING::
•• CúCú pháppháp:: USINGUSING expressionexpression
•• ThôngThông báobáo chocho trìnhtrình dịchdịch vềvề dãydãy thanhthanh ghighi tíchtích cựccực hiệnhiện tạitại
•• ChoCho phépphép dùngdùng kýký hiệuhiệu tiềntiền ñịnhñịnh ARAR00 –– ARAR77 thaythay thếthế chocho kýký hiệuhiệu thanhthanh
ghighi RR00 –– RR77
•• ChỉChỉ dẫndẫn nàynày khôngkhông cócó táctác dụngdụng chuyểnchuyển ñổiñổi cáccác dãydãy thanhthanh ghighi tíchtích cựccực
VíVí dụdụ:: LưuLưu giágiá trịtrị trongtrong thanhthanh ghighi RR77 vàovào ngănngăn xếpxếp
TrườngTrường
hợphợp
khôngkhông
dùngdùng
USINGUSING
::
LẬP TRÌNH HỢP NGỮ CHO 8051 LẬP TRÌNH HỢP NGỮ CHO 8051
CÁC CHỈ DẪN TRONG LẬP TRÌNHCÁC CHỈ DẪN TRONG LẬP TRÌNH
TrườngTrường
hợphợp
khôngkhông
dùngdùng
USINGUSING
::
NếuNếu dãydãy thanhthanh ghighi tíchtích cựccực làlà DãyDãy 33,, tata dùngdùng lệnhlệnh:: PUSHPUSH 11FHFH
NếuNếu dãydãy thanhthanh ghighi tíchtích cựccực làlà DãyDãy 11,, tata dùngdùng lệnhlệnh:: PUSHPUSH 00FHFH
TrườngTrường hợphợp dùngdùng USINGUSING::
NếuNếu dãydãy thanhthanh ghighi tíchtích cựccực làlà DãyDãy 33,, tata dùngdùng lệnhlệnh::
USINGUSING 33
PUSHPUSH ARAR77
NếuNếu dãydãy thanhthanh ghighi tíchtích cựccực làlà DãyDãy 11,, tata dùngdùng lệnhlệnh::
USINGUSING 11
PUSHPUSH ARAR77