intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Hợp ngữ - Chương 1: Tổng quan

Chia sẻ: Tran Van Dinh | Ngày: | Loại File: PDF | Số trang:63

75
lượt xem
12
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Để điạ chỉ một segment: thay đổi địa chỉ chứa trong các thanh ghi segment tương ứng...

Chủ đề:
Lưu

Nội dung Text: Hợp ngữ - Chương 1: Tổng quan

  1. 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)
  2. 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 Segment Stack SS Ñòa chæ Segment döõ lieäu DS Ñòa chæ 045F[0]H Segment maõ (045FH) CS Ñòa chæ Caùc thanh ghi Boä nhôù segment
  3. 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 Segment maõ (045FH) CS Ñòa chæ Caùc thanh ghi Boä nhôù segment
  4. 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
  5. 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
  6. 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
  7. 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 5613 Byte thaáp Byte cao
  8. 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 .... .... .... ........ .... .... 5A01 SS SP = 26 3. PUSH BX .... .... .... ........ .... D203 5A01 SS SP = 24 4. POP BX .... .... .... ........ .... D203 5A01 SS SP = 26 5. POP AX .... .... .... ........ .... D203 5A01 SS SP = 28
  9. 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
  10. 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
  11. 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ôù Bieåu dieãn Ñòa chæ soá hex ASCII cuûa caùc daïng Bieåu dieãn soá hex byte chöùc kyù töï segment:offset cuûa vuøng hieån thò hieån thò ñöôïc cuûa byte xxxx:xxxx xx xx .........xx xx – xx xx ..... xx xx xx......xx xxxx:xxxx xx xx .........xx xx – xx xx ..... xx xx xx......xx xxxx:xxxx xx xx .........xx xx – xx xx ..... xx xx xx......xx
  12. 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: D 40:10 Keát quaû: 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NP 0 1 0 0 0 1 0001100011
  13. 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 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 NP 0 1 0 0 0 1 0001100011 Bit 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)
  14. 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: D 40:13 Keát quaû: 0040:0013 .. .. .. 80 02 .. .. .. ..  Hai byte töø traïng thaùi laø xx xx Ñaûo ngöôïc roài ñoåi qua nhò phaân: Soá hex Giaù trò (KB) 02 00 512 02 80 640
  15. 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: D 40:13 Keát quaû: 0040:0013 .. .. .. 80 02 .. .. .. ..  Hai byte töø traïng thaùi laø xx xx Ñaûo ngöôïc roài ñoåi qua nhò phaân: Soá hex Giaù trò (KB) 02 00 512 02 80 640
  16. 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
  17. 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
  18. 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
  19. 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 CX: Naêm DH: Thaùng (Töø 01-12) cuûa tuaàn 07DB=2011 DL: Ngaøy cuûa thaùng (Töø 01-31) (0=Sunday)
  20. 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: TOÁN TỬ TOÁN HẠNG LỜI BÌNH TÊN + 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ự
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2