Đăng ký Đăng nhập
Trang chủ Công nghệ thông tin Kỹ thuật lập trình Assembly Language (ASM) Hợp ngữ tổng quan ...

Tài liệu Assembly Language (ASM) Hợp ngữ tổng quan

.PDF
63
416
87

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 -

Tài liệu liên quan