Mô tả:
Chöông 1: TOÅNG QUAN
Một chương trình viết bằng hợp ngữ:
+ Bao gồm: Segment (vuøng nhôù) / Stack (ngaên xeáp)
+ Xöû lyù moät nhoùm byte (ñôn vò döõ lieäu) – goïi laø tröôøng, coù kích thöôùc:
- Töø (Word):
Tröôøng 2 byte (16 bit)
- Töø keùp (Double Word):
Tröôøng 4 byte (32 bit)
- Boán töø (QuadWord):
Tröôøng 8 byte (64 bit)
- Paragraph:
Tröôøng 16 byte
- KiloByte (KB):
Tröôøng 210 byte (1024 byte)
- MegaByte (MB):
Tröôøng 220 byte (1024 KB)
- GigaByte (GB):
Tröôøng 230 byte (1024 MB)
Chöông 1: TOÅNG QUAN
Segment vaø ñònh ñòa chæ
Segment laø:
- Vuøng nhôù cuï theå trong moät chöông trình
- Ñòa chæ baét ñaàu coù giaù trò chia heát 16 (10H)
- Coù 3 loaïi chính:
* Segment maõ
* Segment döõ lieäu
* Segment Stack
- Ñeå ñònh ñòa chæ moät segment: thay ñoåi ñòa chæ chöùa trong caùc
thanh ghi segment töông öùng
SS
Ñòa chæ
DS
Ñòa chæ
CS
Ñòa chæ
Caùc thanh ghi
segment
Segment Stack
Segment döõ lieäu
Segment maõ
Boä nhôù
045F[0]H
(045FH)
Chöông 1: TOÅNG QUAN
Segment vaø ñònh ñòa chæ
Ñòa chæ Offset cuûa segment:
- Khoaûng caùch tính baèng byte töø ñòa chæ baét ñaàu cuûa segment
- Ñòa chæ Offset 2 byte coù taàm khoaûng caùch 0000H FFFFH (0
65535)
- Ñeå tham chieáu moät ñòa chæ trong moät segment: keát hôïp ñòa chæ
segment trong thanh ghi segment vôùi ñòa chæ offset
VD: Thanh ghi segment DS chöùa ñòa chæ segment döõ lieäu: 045F[0]H
Moät chæ thò tham chieáu ñeán oâ nhôù coù ñòa chæ offset 0032H trong
segment döõ lieäu
Ñòa chæ ñöôïc tham chieáu:
045F0H
04622H
+0032H
Segment Stack
---------SS Ñòa chæ
Segment döõ lieäu
04622H
DS Ñòa chæ
045F[0]H
CS
Ñòa chæ
Caùc thanh ghi
segment
Segment maõ
Boä nhôù
(045FH)
Chöông 1: TOÅNG QUAN
Caùc thanh ghi
Thanh ghi segment CS:
- Löu ñòa chæ baét ñaàu cuûa segment maõ cuûa chöông trình
- Tìm – naïp ñòa chæ chæ thò:
CS (ñòa chæ) + Con troû leänh IP (offset) (CS:IP)
Ví duï: Thanh ghi segment CS chöùa 25A4[0]H
Con troû leänh IP chöùa 412H
Ñòa chæ cuûa chæ thò keá tieáp laø:
25A40H
+ 412H
----------25E52H
Chöông 1: TOÅNG QUAN
Caùc thanh ghi
Thanh ghi segment DS:
- Löu ñòa chæ baét ñaàu cuûa segment döõ lieäu cuûa chöông trình
- Tìm vò trí byte cuï theå cuûa chöông trình:
DS (ñòa chæ) + Ñòa chæ offset
Thanh ghi segment SS:
- Löu ñòa chæ baét ñaàu cuûa segment Stack cuûa chöông trình
- Chæ ra töø hieän haønh trong stack:
SS (ñòa chæ) + Con troû Stack SP (offset) (SS:SP)
Ví duï: Thanh ghi segment SS chöùa 27B4[0]H
Con troû stack SP chöùa 312H
Töø hieän haønh trong stack laø:
27B40H
+ 312H
----------27E42H
Chöông 1: TOÅNG QUAN
Ngaên xeáp (Stack)
Khaùi nieäm:
- Vuøng nhôù döï tröõ trong chöông trình goïi laø ngaên xeáp
- Muïc ñích: löu tröõ taïm thôøi caùc ñòa chæ vaø döõ lieäu
- Moãi döõ lieäu trong ngaên xeáp laø moät töø (2 byte)
Khôûi taïo ngaên xeáp:
- Thanh ghi segment stack SS ñöôïc khôûi taïo bôûi DOS chöùa ñòa chæ
baét ñaàu cuûa stack
- Con troû stack SP chöùa kích thöôùc vuøng stack (troû tôùi byte cuoái
stack)
Hoaït ñoäng cuûa ngaên xeáp:
- Döõ lieäu löu tröõ baét ñaàu ôû ñòa chæ cao nhaát
- Löu theo chieàu giaûm daàn noäi dung cuûa con troû stack SP
....
SS
....
....
........
....
....
....
SP
Chöông 1: TOÅNG QUAN
Ngaên xeáp (Stack)
PUSH: - Giaûm noäi dung SP xuoáng 2 Löu giaù trò ôû Stack
POP:
- Traû veà giaù trò taïi Stack Taêng noäi dung SP leân 2
Khi heä thoáng nhaän döõ lieäu ghi vaøo boä nhôù seõ ñaûo trình töï byte ngöôïc laïi:
Byte thaáp ôû ñòa chæ thaáp vaø Byte cao ôû ñòa chæ cao cuûa boä nhôù:
Ví duï: Chuyeån 0401H töø thanh ghi vaøo vò trí nhôù 5612 vaø 5613
Thanh ghi
04
01
(0401)
Boä nhôù
01
04
(0104)
5612
Byte thaáp
5613
Byte cao
Chöông 1: TOÅNG QUAN
Ngaên xeáp (Stack)
Ví duï: Caát noäi dung thanh ghi AX vaø BX leân stack, sau ñoù khoâi phuïc laïi.
Giaû söõ AX chöùa 015AH vaø BX chöùa 03D2H, con troû SP chöùa 28H
1. Vuøng stack ban ñaàu:
SS
....
....
....
........
....
....
....
SP = 28
2. PUSH AX
SS
....
....
....
........
....
....
5A01
SP = 26
3. PUSH BX
SS
....
....
....
........
....
....
....
....
........
....
D203
....
5A01
SP = 26
5. POP AX
SS
5A01
SP = 24
4. POP BX
SS
D203
....
....
........
....
D203
5A01
SP = 28
Chöông 1: TOÅNG QUAN
Chương trình DEBUG của DOS:
- Duøng ñeå kieåm tra vaø gôõ roái chöông trình
- Ñaëc tröng:
* Hieån thò maõ vaø döõ lieäu chöông trình baèng maõ hex
* Cho pheùp thöïc thi chöông trình cheá ñoä töøng böôùc
- Quy luaät:
* Khoâng phaân bieät chöõ HOA vaø chöõ thöôøng
* Xaùc ñònh segment vaø offset bôûi daáu (:) ôû daïng soá hex
segment:offset
Ví duï:
Hieån thò moät vuøng nhôù, baét ñaàu töø offset 200H trong
segment döõ lieäu DS:
D DS:200
d DS:200
D ds:200
Chöông 1: TOÅNG QUAN
Taäp leänh cuûa DEBUG :
Leänh
Chöùc naêng
A (Assembler)
Hôïp dòch caùc chæ thò hôïp ngöõ thaønh maõ maùy
D (Dump)
Hieån thò noäi dung moät vuøng nhôù cuûa boä nhôù
E (Enter)
Ñöa döõ lieäu vaøo boä nhôù, baét ñaàu ôû moät vò trí cuï theå
G (Go)
Chaïy chöông trình thöïc thi trong boä nhôù
N (Name)
Ñaët teân cho moät chöông trình
P (Proceed)
Tieáp tuïc hoaëc thöïc thi moät taäp caùc chæ thò coù lieân quan
Q (Quit)
Thoaùt khoûi debug
R (Register)
Hieån thò noäi dung cuûa moät hoaëc nhieàu thanh ghi
T (Trace)
Chæ ñònh vieäc thöïc thi moät chæ thò
U (Unassembler)
Dòch ngöôïc maõ maùy thaønh chæ thò cuûa hôïp ngöõ
W (Write)
Ghi moät chöông trình leân ñóa
Chöông 1: TOÅNG QUAN
Hieån thò cuûa DEBUG :
- Bao goàm 3 phaàn
- Moãi moät haøng hieån thò 16 byte cuûa boä nhôù
Ñòa chæ soá hex
daïng
segment:offset
cuûa byte
xxxx:xxxx
xxxx:xxxx
xxxx:xxxx
Bieåu dieãn soá hex
cuûa vuøng hieån thò
Bieåu dieãn
ASCII cuûa caùc
byte chöùc kyù töï
hieån thò ñöôïc
xx xx .........xx xx – xx xx ..... xx xx xx......xx
xx xx .........xx xx – xx xx ..... xx xx xx......xx
xx xx .........xx xx – xx xx ..... xx xx xx......xx
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Xem caùc vò trí nhôù
Kieåm tra thieát bò heä thoáng
- Töø traïng thaùi thieát bò ôû caùc vò trí 410H vaø 411H
- Ñoïc ôû ñòa chæ 410H Ñoïc 40:10 40[0]H+10H
Xem noäi dung cuûa töø qua ñòa chæ 2 thaønh phaàn: 40 cho segment vaø 10
cho offset trong segment
Ví duï: Leänh:
Keát quaû:
D 40:10
0040:0010 63 44 .. .. .. ..
Hai byte töø traïng thaùi laø 63 vaø 44 Ñaûo ngöôïc thaønh 44 vaø 63
roài ñoåi qua nhò phaân:
Bit
NP
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Xem caùc vò trí nhôù
Kieåm tra thieát bò heä thoáng
Giaûi thích:
Bit
NP
Bit
15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
0 1 0 0 0 1 0 0 0 1 1 0 0 0 1 1
Thieát bò
15,14
Soá coång maùy in song song ñöôïc caøi ñaët = 1 (01)
11,10,9
Soá coång noái tieáp ñöôïc caøi ñaët =2 (010)
7,6
Soá oå ñóa meàm =2 (00=1,01=2,10=3,11=4)
5,4
Cheá ñoä video ban ñaàu =10 (01=40x25 maøu, 10=80x25
maøu vaø 11=80x25 ñôn saéc)
0
Coù oå ñóa meàm (1=Coù, 0=Khoâng)
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Xem caùc vò trí nhôù
Kieåm tra kích thöôùc boä nhôù
- Töø traïng thaùi ôû caùc vò trí 413H vaø 414H
- Ñoïc ôû ñòa chæ 413H Ñoïc 40:13 40[0]H+13H
Xem noäi dung cuûa töø qua ñòa chæ 2 thaønh phaàn: 40 cho segment vaø 13
cho offset trong segment
Ví duï: Leänh:
Keát quaû:
phaân:
D 40:13
0040:0013 .. .. .. 80 02 .. .. .. ..
Hai byte töø traïng thaùi laø xx xx Ñaûo ngöôïc roài ñoåi qua nhò
Soá hex
02 00
02 80
Giaù trò (KB)
512
640
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Xem caùc vò trí nhôù
Kieåm tra kích thöôùc boä nhôù
- Töø traïng thaùi ôû caùc vò trí 413H vaø 414H
- Ñoïc ôû ñòa chæ 413H Ñoïc 40:13 40[0]H+13H
Xem noäi dung cuûa töø qua ñòa chæ 2 thaønh phaàn: 40 cho segment vaø 13
cho offset trong segment
Ví duï: Leänh:
Keát quaû:
phaân:
D 40:13
0040:0013 .. .. .. 80 02 .. .. .. ..
Hai byte töø traïng thaùi laø xx xx Ñaûo ngöôïc roài ñoåi qua nhò
Soá hex
02 00
02 80
Giaù trò (KB)
512
640
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Ñöa vaøo moät chöông trình hôïp ngöõ
Leänh A (Assembler)
-
Baùo cho debug nhaän chæ thò hôïp ngöõ
Ví duï:
- Khôûi ñoäng ñòa chæ baét ñaàu trong segment maõ ôû offset 100H:
A 100
Debug hieån thò segment:offset daïng: xxxx:0100
- Goõ vaøo töøng chæ thò:
MOV AL, 25
MOV BL,32
ADD AL,BL
NOP
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Ñöa vaøo moät chöông trình hôïp ngöõ
Leänh U (UnAssembler)
-
Hieån thò maõ maùy cuûa caùc chæ thò hôïp ngöõ
Ví duï: U 100,106
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Söû duïng chæ thò ngaét
Laáy ngaøy hieän haønh
-
Chöùc naêng 2AH cuûa INT 21H cho bieát ngaøy hieän haønh
Ví duï:
- Khôûi ñoäng ñòa chæ baét ñaàu trong segment maõ ôû offset 100H:
A 100
- Goõ vaøo töøng chæ thò:
MOV AH, 2A
INT 21H
NOP
- Goõ R ñeå xem noäi dung caùc thanh ghi
- Goõ T ñeå thöïc thi chæ thò MOV
- Goõ P ñeå thöïc thi chæ thò INT
Chöông 1: TOÅNG QUAN
Söû duïng DEBUG – Söû duïng chæ thò ngaét
Laáy ngaøy hieän haønh
-
Chöùc naêng 2AH cuûa INT 21H cho bieát ngaøy hieän haønh
AL: Ngaøy
cuûa tuaàn
(0=Sunday)
CX: Naêm
07DB=2011
DH: Thaùng (Töø 01-12)
DL: Ngaøy cuûa thaùng (Töø 01-31)
Chöông 1: TOÅNG QUAN
Tieáp caän cô baûn veà Assembly
+ Các chương trình bao gồm các dòng lệnh, mỗi dòng lệnh trên một dòng.
+ Một dòng lệnh là một lệnh mà trình biên dịch sẽ dịch ra mã máy hay là
một hướng dẫn biên dịch để chỉ cho trình biên dịch thực hiện một vài
nhiệm vụ
+ Một dòng lệnh thường có 4 phần:
TÊN
TOÁN TỬ
TOÁN HẠNG
LỜI BÌNH
+ Các trường được phân cách nhau bằng ít nhất 1 ký tự trống hay TAB.
Không bắt buộc phải sắp xếp các trường theo cột, nhưng nhất định phải
theo đúng thứ tự
- Xem thêm -