Bài giảng Cấu trúc máy tính và hợp ngữ - Chương 1: Tổ chức hệ thống máy tính

Bài5 TỔ CHỨC LOGIC CỦA ĐĨA Mục đích: Nắm được cơ chế tò chức LOGIC cùa đĩa cứng và đĩa mềm hệ điều hành phổ biến nhâ't là DOS và Windows. Nội dung: • Khào sát hoạt động, phân tích, tính toán tổ chức logic cùa đìa như MBR. Boot Sector. Root Directory’. FAT 12. FAT 1Ố. FAT32 bằng các phần mềm hệ thống. Bài 6 KHẮC PHỤC MỘT số Lỗi cơ BẢN Mục đích: Nhận biết được các lồi cơ bàn thường gặp ờ máy tính nhằm giúp sinh viên có được kinh nghiệm trong việc bào trì và sừa chừa máy tính. Nội dung: • Thực hiện một sò thao tác nhằm tạo ra lồi trên máy tính đê' thây được biểu hiện cùa máy tính khi gặp lỗi (Lòng chân cùa Ram.Card, Ram hư. Card hư. các thao tác khác trên đìa mềm đĩa cứng.). Kiểm tra Virus các thao tác quét Virus, các trường hợp máy tính không nhận được HDD.FDD, không khởi động từ HDD. • Thực hiện thao tác khôi phục lại bàng Partition Table và phẩn mà định dạng trong trường hợp chia đĩa cứng thành l,2,3.đĩa Logic khác nhau trong trường hợp Virus xoá mat Matter Boot Record và máy không nhận được đĩa cứng.

pdf109 trang | Chia sẻ: thucuc2301 | Lượt xem: 567 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Bài giảng Cấu trúc máy tính và hợp ngữ - Chương 1: Tổ chức hệ thống máy tính, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
: + Neáu Destination laø 8 bit thì tích coù trò giaù 16 bit = AX = AL x Destination Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 71 + Neáu Destination laø 16 bit thì tích coù thò giaù 32 bit ñöôïc löu ôû hai thanh ghi DX-AX = AX x Destination. Coù nghóa laø DX chöùa 16 bit cao cuûa keát quaû vaø AX chöùa 16 bit thaáp cuûa keát quaû. Thí duï beân döôùi seõ laøm roõ ñieàu naøy: MOV BL, 12H MOV AL,7H MUL BL Do BL laø thanh ghi 8 bit neân pheùp toaùn nhaân 8 bit ñöôïc thöïc hieän. Keát quaû: BL = 12H, AX = 7EH Xeùt thí duï khaùc: MOV AX,1000H MUL AX Do AX laø thanh ghi 16 bit neân pheùp toaùn nhaân 16 bit ñöôïc thöïc hieän. Keát quaû laø 1000000H, do ñoù DX = 100H vaø AX = 0000H. - Leänh DIV: (Unsigned divide) Chia 2 soá khoâng daáu Cuù phaùp: DIV Destination YÙ nghóa: Tuyø theo kích thöôùc cuûa Destination maø coù hai tröôøng hôïp chia xaûy ra. + Neáu Destination laø 8 bit thì soá bò chia laø soá khoâng daáu 16 bit chöaù trong AX, keát quaû goàm 2 phaàn, thöông chöùa trong AL vaø soá dö chöùa trong AH. + Neáu Destination laø 16 bit thì soá bò chia laø soá khoâng daáu 32 bit chöaù trong caëp thanh ghi DXAX, keát quaû goàm 2 phaàn, thöông chöùa trong AX vaø soá dö chöùa trong DX. Thí duï beân döôùi seõ laøm roõ caùc tình huoáng naøy: MOV BL, 10 MOV AX, 48 DIV BL Do thanh ghi BL laø 8 bit neân soá bò chia laø AX, keát quaû: AL = thöông = 4, AH = soá dö = 8. Moät thí duï khaùc: MOV BX, 10H MOV DX,1H MOV AX,2H DIV BX Do thanh ghi BX laø 16 bit neân soá bò chia laø soá 32 bit chöùa trong DXAX = 00010002H, keát quaû laø AX = thöông = 1000H, DX = soá dö = 2H. Caùc leänh Logic cô baûn Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 72 - Leänh AND : Thöïc hieän pheùp AND theo töøng bit cuûa 2 toaùn haïng Cuù phaùp: AND Destination, Source YÙ nghóa: Destination AND Source ® Destination Thí duï: MOV AL,23H AND AL,0FH Keát quaû: AL = 03H. - Leänh OR: Thöïc hieän pheùp OR theo töøng bit cuûa 2 toaùn haïng Cuù phaùp: OR Destination, Source YÙ nghóa: Destination OR Source ® Destination - Leänh XOR: Thöïc hieän pheùp XOR theo töøng bit cuûa 2 toaùn haïng Cuù phaùp: XOR Destination, Source YÙ nghóa: Destination XOR Source ® Destination - Leänh NOT: Thöïc hieän ñaûo bit toaùn haïng Cuù phaùp: AND Destination YÙ nghóa: Ñaûo bit cuûa Destination ® Destination - Leänh NEG: Ñaûo daáu cuûa moät toaùn haïng (Buø 2) Cuù phaùp: NEG Destination YÙ nghóa: Laáy buø 2 cuûa Destination ® Destination Thí duï: MOV AL,1 NEG AL Keát quaû: AL = - 1 ( = FFH). Caùc leänh dòch chuyeån: - Leänh SHL: Dòch traùi logic Cuù phaùp: SHL Destination, 1 YÙ nghóa: Dòch sang traùi Destination 1 laàn. Cuù phaùp: SHL Destination, CL YÙ nghóa: Dòch sang traùi Destination, soá laàn dòch chöùa trong thanh ghi CL - Leänh SHR: Dòch phaûi logic Cuù phaùp: SHR Destination, 1 MSB LSB CF 0 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 73 YÙ nghóa: Dòch sang phaûi Destination 1 laàn. Cuù phaùp: SHR Destination, CL YÙ nghóa: Dòch sang phaûi Destination, soá laàn dòch chöùa trong thanh ghi CL - Leänh SAL: Xem leänh SHL - Leänh SAR: Dòch phaûi soá hoïc Cuù phaùp: SAR Destination, 1 YÙ nghóa: Dòch phaûi soá hoïc Destination 1 laàn. Cuù phaùp: SAR Destination, CL YÙ nghóa: Dòch phaûi soá hoïc Destination, soá laàn dòch chöùa trong thanh ghi CL Caùc leänh quay voøng: - Leänh ROL: Quay voøng sang traùi Cuù phaùp: ROL Destination, 1 YÙ nghóa: Quay voøng sang traùi Destination 1 laàn. Cuù phaùp: ROL Destination, CL YÙ nghóa: Quay voøng sang traùi Destination vôùi soá laàn quay chöùa trong thanh ghi CL - Leänh ROR: Quay voøng sang phaûi Cuù phaùp: ROR Destination, 1 YÙ nghóa: Quay voøng sang phaûi Destination 1 laàn. Cuù phaùp: ROR Destination, CL YÙ nghóa: Quay voøng sang phaûi Destination, soá laàn quay chöùa trong thanh ghi CL. - Leänh RCL: Quay traùi thoâng qua côø nhôù Cuù phaùp: RCL Destination, 1 MSB LSB CF MSB LSB CF MSB LSB CF 0 MSB LSB CF 0 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 74 YÙ nghóa: Quay traùi Destination thoâng qua côø nhôù 1 laàn. Cuù phaùp: RCL Destination, CL YÙ nghóa: Quay traùi Destination thoâng qua côø nhôù, soá laàn quay chöùa trong thanh ghi CL - Leänh RCR: Quay phaûi thoâng qua côø nhôù Cuù phaùp: RCR Destination, 1 YÙ nghóa: Quay phaûi Destination thoâng qua côø nhôù 1 laàn. Cuù phaùp: RCR Destination, CL YÙ nghóa: Quay phaûi Destination thoâng qua côø nhôù, soá laàn quay chöùa trong thanh ghi CL. c. Caùc leänh ñieàu khieån chöông trình Nhoùm leänh nhaûy: - Leänh nhaûy khoâng ñieàu kieän JMP Leänh naøy khieán cho vi xöû lyù thöïc hieän moät leänh môùi taïi ñòa chæ ñöôïc moâ taû trong doøng leänh, bao goàm caùc daïng leänh sau: + JMP NHAN Leänh môùi baét ñaàu taïi vò trí ñaùnh nhaõn laø NHAN. Caên cöù vaøo khoaûng caùch giöõa vò trí cuûa NHAN vaø leänh nhaûy maø trình bieân dòch seõ xaùc ñònh xem leänh naøy seõ thuoäc moät trong ba leänh sau: · Nhaûy ngaén (Short Jmp): Trong tröôøng hôïp naøy NHAN naèm caùch xa trong phaïm vi -128 +127 byte so vôùi leänh tieáp theo sau leänh JMP. Ñeå ñònh höôùng cho chöông trình dòch neân vieát leänh döôùi daïng JMP SHORT NHAN · Nhaûy gaàn (Near jmp): Trong tröôøng hôïp naøy, NHAN naèm caùch xa trong phaïm vi -32768 +32767 byte so vôùi leänh tieáp theo naèm sau leänh JMP. Ñeå höôùng daãn cho chöông trình dòch neân vieát JMP NEAR NHAN · Nhaûy xa (Far jmp): Trong tröôøng hôïp naøy, NHAN naèm ôû ñoaïn maõ khaùc so vôùi leänh tieáp theo sau leänh JMP. Ñeå höôùng daãn chöông trình dòch neân vieát leänh döôùi daïng JMP FAR NHAN vaø nhaõn trong tröôøng hôïp naøy phaûi ñöôïc khai baùo laø NHAN LABEL FAR. Caùc tình huoáng naøy coù theå minh hoïa nhö sau: MSB LSB CF MSB LSB CF Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 75 Opcode Disp JMP SHORT NHAN (EBH) 1 byte Opcode IP low IP high JMP NEAR NHAN (E9H) 2 byte Opcode IP low IP high CS low CS high JMP FAR NHAN (EAH) 4 byte + Nhaûy vôùi thanh ghi laøm toaùn haïng (thí duï JMP BX): Trong tröôøng hôïp naøy thanh ghi ( trong thí duï laø BX) chöùa thaønh phaàn offset (cho IP) cuûa vò trí leänh ñònh nhaûy ñeán trong ñoaïn CS. Khi thöïc hieän leänh naøy thì thanh ghi (trong ví duï laø BX)® IP + JMP [BX]: Trong tröôøng hôïp naøy DS: BX vaø DS:BX+1 chöùa thaønh phaàn offset (cho IP) cuûa vò trí leänh ñònh nhaûy ñeán trong ñoaïn CS. Khi thöïc hieän leänh naøy neân duøng leänh ôû daïng JMP WORD PTR [BX} + JMP DWORD PTR [BX]: Trong tröôøng hôïp naøy DS: BX vaø DS:BX+1 chöùa thaønh phaàn offset (cho IP), DS:BX+2 vaø DS:BX+3 chöùa thaønh phaàn Segment (cho CS) cuûa vò trí leänh ñònh nhaûy ñeán trong ñoaïn CS. Thí duï beân döôùi nhaèm minh hoaï leänh nhaûy khoâng ñieàu kieän: MOV AL,8 MOV CL,5 JMP TRU ADD AL,CL TRU: SUB AL,CL Keát quaû laø AL = 3. CL =5. - Leänh nhaûy coù ñieàu kieän: Caùc leänh nhaûy coù ñieàu kieän laø caùc leänh nhaûy ngaén, phaïm vi nhaûy naèm trong khoaûng -128 +127 byte so vôùi leänh tieáp theo sau leänh nhaûy coù ñieàu kieän. Ñieàu kieän nhaûy tuøy thuoäc vaøo caùc côø: S (côø daáu), Z (côø Zero), C (côø nhôù), P (côø Parity) vaø côø traøn (Overflow). Caùc leänh naøy thöôøng ñöôïc duøng sau caùc leänh so saùnh. Caùc leänh nhaûy coù ñieàu kieän ñöôïc minh hoïa trong baûng sau: Leänh Ñieàu kieän kieåm tra YÙ nghóa JA C = 0 vaø Z = 0 Nhaûy neáu lôùn hôn Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 76 JAE C = 0 Nhaûy neáu lôùn hôn hoaëc baèng JB C = 1 Nhaûy neáu nhoû hôn JBE C =1 hoaëc Z –1 Nhaûy neáu nhoû hôn hoaëc baèng JC C =1 Nhaûy neáu côø nhôù (Carry) thieát laäp JE hoaëc JZ Z = 1 Nhaûy neáu baèng JG Z =0 vaø S = 0 Nhaûy neáu lôùn hôn JGE S = 0 Nhaûy neáu lôùn hôn hoaëc baèng JL S ¹ 0 Nhaûy neáu nhoû hôn JLE Z =1 hoaëc S =0 Nhaûy neáu nhoû hôn hoaëc baèng JNC C = 0 Nhaûy neáy côø nhôù (Carry) bò xoaù JNE hoaëc JNZ Z = 0 Nhaûy neáu khoâng baèng JNO O = 0 Nhaûy neáu khoâng traøn JNS S = 0 Nhaûy neáu côø daáu khoâng thieát laäp JNP P = 0 Nhaûy neáu côø Parity khoâng thieát laäp JO O = 1 Nhaûy neáu côû traøn thieát laäp JP P = 1 Nhaûy neáu côø parity thieát laäp JS S = 1 Nhaûy neáu côø daáu thieát laäp JCXZ CX = 0 Nhaûy neáu thanh ghi CX = 0 Löu yù laø caùc leänh JA, JAE, JE, JNE, JB vaø JBE duøng cho caùc soá khoâng daáu. JG, JGE, JE, JNE vaø JLE duøng cho caùc soá coù daáu. Thí duï beân döôùi minh hoïa leänh nhaûy coù ñieàu kieän: MOV CX,AX CMP AX, BX JB TONG SUB CX,BX JMP THOAT TONG: ADD CX,BX THOAT: Neáu AX < BX thì CX = AX + BX khoâng thì CX = AX –BX. - Caùc leänh laëp (Loop): + Leänh LOOP: Laëp laïi ñoaïn chöông trình cho ñeán khi CX =0 Cuù phaùp: LOOP NHAN Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 77 YÙ nghóa: CX = CX –1; Neáu CX ¹ 0 thì nhaûy ñeán vò trí ñöôïc ñaùnh nhaõn laø NHAN löu yù laø NHAN phaûi caùch xa trong khoaûng –128 + 127 so vôùi leänh tieáp theo sau leänh LOOP. Thí duï: MOV CX,10 MOV AL,0 MOV BL,0 LAP: ADD AL,BL INC BL LOOP LAP Keát quaû: AL = 0 + 1 + + 9 = 45 + Leänh REP: Laëp laïi leänh vieát sau ñoù ñeán khi CX = 0 Ví duï: REP MOVSB YÙ nghóa: Laëp laïi leänh MOVSB cho ñeán khi CX = 0. - Caùc leänh laëp coù ñieàu kieän: + Leänh LOOPE: Laëp laïi ñoaïn chöông trình cho ñeán khi CX = 0 hoaëc ZF = 0. + Leänh LOOPNE: Laëp laïi ñoaïn chöông trình cho ñeán khi CX = 0 hoaëc ZF = 1. + Leänh LOOPZ gioáng LOOPE + Leänh LOOPNZ gioáng LOOPNE - Caùc leänh thao taùc vôùi chöông trình con: + Leänh CALL Coù caùc tröôøng hôïp sau: · Goïi chöông trình con ôû gaàn (Near Call), töùc goïi chöông trình con trong cuøng ñoaïn maõ leänh. Trong tröôøng hôïp naøy CPU thöïc hieän caùc leänh: PUSH IP IP = Offset cuûa chöông trình con Khi gaëp leänh RET ôû cuoái chöông trình con thì thöïc hieän leänh POP IP · Goïi chöông trình con ôû xa (Far Call) töùc goïi chöông trình con ôû ñoaïn maõ leänh khaùc. Trong tröôøng hôïp naøy: PUSH CS Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 78 PUSH IP IP = Offset cuûa chöông trình con; CS = Segment cuûa chöông trình con Khi gaëp leänh RET ôû cuoái chöông trình con thì thöïc hieän leänh POP IP, POP CS. Khi ñoù chöông trình con phaûi ñöôïc khai baùo laø ten_ctc proc far. · Goïi chöông trình con vôùi thanh ghi chöùa ñòa chæ: Thí duï: CALL BX luùc naøy BX ® IP (Gaàn gioáng vôùi vôùi Near Call) · CALL WORD PTR [BX}: Goïi chöông trình con naèm trong cuøng ñoaïn maõ, chöông trình con coù ñòa chæ CS:IP thì hai oâ nhôù DS: BX vaø DS:BX+1 chöùa ñòa chæ IP cuûa chöông trình con coøn trò CS thì khoâng ñoåi. · JMP DWORD PTR [BX]: Goïi chöông trình con khoâng naèm trong cuøng ñoaïn maõ, chöông trình con coù ñòa chæ CS:IP vaø trò giaù gaùn cho IP löu ôû hai oâ nhôù DS: BX vaø DS:BX+1, trò giaù gaùn cho CS löu ôû hai oâ nhôù DS: BX+2 vaø DS:BX+3. - Leänh trôû veà töø chöông trình con: RET hoaëc RET n, (n laø soá nguyeân döông). Leänh RET naøy ñöôïc ñaët ôû cuoái chöông trình con ñeå CPU laáy laïi ñòa chæ trôû veà töø ngaên xeáp (xem theâm leänh CALL). Ñoái vôùi leänh RET n thì sau khi laáp ñòa chæ traû veà thì SP = SP + n (nhaûy qua n byte trong ngaên xeáp). 1.3 Khaùi nieäm veà ngaét : - Khaùi nieäm: Caát caùc thanh ghi Khoâi phuïc caùc thanh ghi IRET gaëp ngaét Chöông trình chính Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 79 - Phaân loaïi: Trong vi xöû lyù 8088/8086 coù theå chia caùc nguyeân nhaân gaây ra ngaét trong CPU thaønh 3 loaïi: - Baûng Vector ngaét: Ñòa chæ Boä nhôù YÙ nghóa 00000H IP-0 00002H CS-0 Vector 0 : Divide - error 00004H IP-1 00006H IP-1 Vector 1: Single – step 003FC H IP-255 003FE H CS-255 Vector 255 : daønh cho ngöôøi laäp trình Thí duï: Chöông trình con goïi ngaét 40 ñöôïc caøi ñaët ôû ñòa chæ 28000H. Vieát ñoaïn chöông trình caøi ñaët vaøo baûng Vector ngaét ñeå xöû lyù ngaét naøy? Giaûi: Ñeå xaùc ñònh ñòa chæ trong baûng Vector ngaét ñöôïc duøng bôûi moät ngaét laø nhaân soá ngaét vôùi 4. Nhaân 40 vôùi 4 chuyeån thaønh soá Hexa laø 000A0H, ñaây laø ñòa chæ baét ñaàu cuûa Vector ngaét 40 trong baûng Vector ngaét. Ñòa chæ cuûa chöông trình con phuïc vuï ngaét coù theå tính ra baèng nhieàu caùch khaùc nhau, ñôn giaûn nhaát laø cho CS = 2000H vaø IP = 8000H (2000H x 16 + 8000H = 28000H)Nhö vaäy, ta caàn phaûi vieát hai giaù trò ñòa chæ naøy vaøo boä nhôù baét ñaàu ôû ñòa chæ 000A0H. Ñoaïn chöông trình beân döôùi laøm coâng vieäc naøy: PUSH DS ;Caát DS XOR AX,AX ; AX =0 MOV DS,AX ;DS = 0 MOV DI,00A0H ;DI = 00A0H MOV WORD PTR [DI],8000H ;Ñöa 8000H vaøo 2 oâ nhôù DS:DI vaø DS:DI+1 MOV WORD PTR [DI+2], 2000H; Ñöa 2000H vaøo 2 oâ nhôù DS:DI +2 vaø DS:DI+3 POP DS; Laáy laïi DS Ñaùp öùng cuûa CPU khi coù yeâu caàu ngaét: Moät soá ví duï: + Haøm AH = 01 cuûa INT 21H: Ñoïc moät kyù töï töø baøn phím, maõ ASCII cuûa phím nhaán löu tröõ trong thanh ghi AL. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 80 Thí duï: MOV AH,01 INT 21H Khi chaïy chöông trình, heä thoáng seõ chôø ngöôøi söû duïng nhaán 1 phím, thí duï nhaán phím ‘A’ thì AL = 41H. + Haøm AH = 02 cuûa INT 21H: Xuaát moät kyù töï ra maøn hình, maõ ASCII cuûa kyù töï xuaát löu tröõ trong thanh ghi DL. Thí duï: MOV AH,02 MOV DL,42H INT 21H Khi chaïy chöông trình thì maøn hình seõ hieån thò kyù töï ‘B’. + Haøm AH = 09 cuûa INT 21H: Hieån thò chuoãi kyù töï ra maøn hình, vôùi DS:DX troû ñeán vò trí ñaàu cuûa chuoãi (töùc DS chöùa Segment cuûa chuoãi vaø DX chöùa Offset cuûa chuoãi) vaø chuoãi kyù töï keát thuùc baèng kyù töï ‘$’. + Haøm AH = 4CH cuûa INT 21H: Keát thuùc chöông trình .exe. + INT 20H keát thuùc chöông trình .com. 2. Caáu truùc cuûa chöông trình hôïp ngöõ. 2.1 Caáu truùc cuûa chöông trình .COM Offset Moâ taû 0000H PSP 0100H JMP: Begin Döõ lieäu naèm ôû ñaây Begin: FFFEH Maõ leänh tieán töø treân xuoáng Ngaên xeáp tieán töø döôùi leân Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 81 2.2 Caáu truùc cuûa chöông trình .EXE - Khoâng bò haïn cheá bôûi 1 ñoaïn 64 KB. Chöông trình EXE chöùa caùc ñoaïn phaân bieät cho maõ, döõ lieäu, ngaên xeáp vaø caùc ñoaïn naøy coù theå xuaát hieän trong moät traät töï baát kyø. - Khi heä thoáng naïp chöông trình .EXE, noù bieát ñöôïc ñòa chæ caùc oâ nhôù chöaù caùc ñòa chæ ñoaïn caàn phaûi söûa ñoåi laïi cho phuø hôïp, noù vieát laïi caùc giaù trò naøy baèng caùch coäng giaù trò ñoù vôùi ñòa chæ ñoaïn baét ñaàu ( PSP + 10H). Thao taùc naøy laøm cho vieäc goïi vaø khôûi ñoäng chöông trình EXE laâu hôn chöôngtrình COM vaø kích thöôùc cuûa file EXE bao giôø cuõng lôùn hôn kích thöôùc cuûa file COM töông ñöông. 2.3 Caáu truùc cuûa moät doøng leänh hôïp ngöõ: Teân Maõ leänh Caùc toaùn haïng töông öùng cuûa leänh Chuù thích Ví duï: CONG: ADD BX,CX; BX + CX ® BX 2.4 Khai baùo bieán cho chöông trình: - Caùc quy ñònh veà khai baùo döõ lieäu cho chöông trình. - Khai baùo bieán kieåu byte Ten DB trò giaù khôûi ñaàu Ví duï: V1 DB 4 V2 DB 12H - Khai baùo bieán kieåu Word Ten DW trò giaù khôûi ñaàu Ví duï: V1 DW 1234H V2 DW 12H - Khai baùo maûng: Teân kieåuTrò giaù khôûi ñaàu. Ví duï: M1 DB 1,2,3,4 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 82 M2 DB 100 Dup (?) - Khai baùo chuoãi. Teân DB noäi dung chuoåi Ví duï: Chuoi1 DB “Hello!$” - Haèng coù teân Teân EQU trò Ví duï: CR EQU 0DH 2.5 Khung cuûa moät chöông trình hôïp ngöõ - Khai baùo quy moâ söû duïng boä nhôù: - Khai baùo ñoaïn ngaên xeáp: - Khai baùo ñoaïn döõ lieäu: - Khai baùo ñoaïn maõ: - Khung cuûa chöông trình dòch ra .EXE: - Khung cuûa chöông trình dòch ra .COM: - Quaù trình taïo vaø dòch chöông trình: 3. Caùc caáu truùc laäp trình cô baûn baèng hôïp ngöõ: a. Caáu truùc tuaàn töï. Leänh 1 Leänh 2 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 83 Leänh N Ví duï: Ñoaïn chöông trình tính AX = 2 x BX MOV AX,BX SHL AX,1 b. Caáu truùc IF – THEN. Ví duï: Vieát ñoaïn chöông trình tính Neáu BX = CX thì xoùa noäi dung cuûa AX (AX = 0 ) cmp bx,cx jnz thoat xor ax,ax thoat: c. Caáu truùc IF – THEN – ELSE Ñieàu kieän? Thöïc hieän Y N Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 84 Ví duï: Vieát ñoaïn chöông trình tính AX = MAX (BX, CX). cmp bx,cx jb luu_cx mov ax,bx jmp thoat luu_cx: mov ax,cx thoat: d. Caáu truùc CASE. Case:bieåu thöùc Trò giaù 1: Coâng vieäc 1. Trò giaù 2 Coâng vieäc 2. Trò giaù n Coâng vieäc n. End case Ví duï: Vieát ñoaïn chöông trình thöïc hieän coâng vieäc sau: Neáu CL < 0 thì AX = -1 Neáu CL = 0 thì AX = 0 Neáu CL > 0 thì AX = 1 Ñoaïn chöông trình nhö sau: cmp cl,0 Ñieàu kieän? Y N Coâng vieäc 1 Coâng vieäc 2 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 85 js nho_0 jz bang mov ax,1 jmp thoat nho_0: mov ax,-1 jmp thoat bang: mov ax,0 thoat: e. Caáu truùc laëp FOR –DO Thí duï: Vieát ñoaïn chöông trình hieån thò 2000 kyù töï A ra maøn hình: mov cx,2000 mov dl,'A' mov ah,02 in_ra: int 21h loop in_ra Boä ñeám = 0? Y N Khôûi taïo boä ñeám Coâng vieäc Giaûm boä ñeám ñi 1 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 86 f. Caáu truùc laëp WHILE – DO Ví duï: Vieát ñoaïn chöông trình ñeám soá laàn nhaán phím (lö trong thanh ghi CX) cho ñeán khi nhaán phím enter (maõ ASCII = 13) thì döøng. Ñoaïn chöông trình thöïc hieän nhö sau: xor cx,cx mov ah,01 lap: int 21h cmp al,13 jz thoat inc cx jmp lap thoat: g. Caáu truùc laëp REPEAT – UNTIL Ñieàu kieän? Thöïc hieän Y N Ñieàu kieän? Thöïc hieän Y N Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 87 Ví duï: Vieát ñoaïn chöông trình ñoïc phím cho ñeán khi gaëp phím enter (maõ ASCII = 13) thì döøng. Ñoaïn chöông trình thöïc hieän nhö sau: mov ah,01 lap: int 21h cmp al,13 nz lap h. Moät soá chöông trình cuï theå. Ví duï 1: Vieát chöông trình hieån thò 256 kyù töï coù maõ ASCII ra maøn hình, ñeå ñôn giaûn, duøng int 21h vôùi Ah = 02. Höôùng daãn: - Duøng thanh ghi CX chöùa soá laàn laëp. - Khôûi taïo thanh ghi DL baèng 0, in kyù töï coù maõ ASCII trong thanh ghi DL. - Sau moãi laàn laëp thì taêng thanh ghi DL leân 1. Maõ nguoàn cuûa chöông trình naøy nhö sau: (Daïng dòch ra file .exe) .model small .stack 100h .code main proc near mov cx,256 xor dl,dl mov ah,02 lap: int 21h inc dl loop lap int 21h mov ah,4ch int 21h Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 88 main endp end main Ví duï 2: Vieát chöông trình nhaäp moät chuoãi kyù töï töø baøn phím, sau ñoù in ra chuoãi ngöôïc töông öùng, keát thuùc nhaäp baèng phím Enter (maõ ASCII laø 13). Ví duï nhaäp 123 roài nhaán phím Enter thì maøn hình hieån thò 321. Höùôùng daãn: - Duøng ngaên xeáp (Stack). - Khôûi ñoäng CX (bieán ñeám ) baèng Zero. - Sau moãi laàn nhaäp kyù töï thì kieåm tra kyù töï ñoù, neáu khaùc 13 thì löu kyù töï ñoù vaøo Stack, taêng CX (bieán ñeám) leân 1. - Neáu kyù töï nhaäp laø 13 (phím Enter) thì in caùc giaù trò trong Stack vôùi soá laàn laáy tra trong thanh ghi CX. Maõ nguoàn cuûa chöông trình nhö sau: (Daïng dòch ra file .exe) .model small .stack 100h .data tb1 db "Nhap vao chuoi, ket thuc bang phim Enter:",'$' tb2 db 13,10,"Chuoi dao cua chuoi vua nhap:",'$' .code main proc near mov ax,@data mov ds,ax lea dx,tb1 call write_mss xor cx,cx mov ah,01 nhap: int 21h cmp al,13 jz kiemtra inc cx push ax jmp nhap Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 89 kiemtra: cmp cx,0 jz thoat lea dx,tb2 call write_mss mov ah,02 in_ra: pop dx int 21h loop in_ra thoat: mov ah,4ch int 21h main endp write_mss proc push ax mov ah,09 int 21h pop ax ret write_mss endp end main Ví duï 3: Vieát chöông trình hieån thò noäi dung thanh ghi BX ra maøn hình daïng Hexa. Höôùng daãn: - Vieát ñoïan chöông trình hieån thò trò giaù Hexa 4 bit (töùc coù trò giaù töø 0H ñeán FH). Baèng caùch kieåm tra neáu name khong khoaûng 0 ñeán 9 thì coäng vôùi 30H khoâng thì coäng vôùi 37H. - Duøng ñoïan chöông trình ôû treân hieån thò 4 bit cao trong thanh ghi BX. Laëp laïi boán laàn (sau moãi laàn in thì phaûi dòch sang traùi 4 bit). Maõ nguoàn cuûa chöông trình nhö sau: (Daïng dòch ra file .exe) .model small .386 .stack 100h .data Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 90 tb db 13,10,"Gia tri trong thanh ghi bx, dang thap luc phan:",'$' .code main proc near mov ax,@data mov ds,ax mov dx, offset tb mov ah,09 int 21h mov bx,1234h; Tri gia thu mov cx,4 mov ah,2 lap: rol bx,4 mov dl,bl and dl,0fh cmp dl,9 ja la_chu add dl,'0' jmp xuat la_chu: add dl,'A'-10 xuat: int 21h loop lap mov ah,4ch int 21h main endp end main 4. Truyeàn tham soá giöõa caùc chöông trình : Caùc ví duï beân döôùi trình baøy vieäc truyeàn tham soá giöõa caùc chöông trình. Nhaèm muïc ñích minh hoïa phöông phaùp truyeàn tham soá neân chöông trình nguoàn ñöôïc thöïc hieän ôû möùc ñoä ñôn giaûn nhaát maø boû qua moät soá raøng buoäc khoâng caàn thieát. a. Truyeàn tham soá qua thanh ghi. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 91 Trong phöông phaùp naøy, tham soá ñöôïc truyeàn ñi giöõa chöông trình chính vaø chöông trình con ñöôïc löu tröõ trong thanh ghi. Ví duï beân döôùi trình baøy quaù trình truyeàn tham soá qua thanh ghi: - Chöông trình chính goïi chöông trình con “nhap” ñeå nhaän trò giaù thaäp phaân töø baøn phím löu vaøo thanh ghi BX. - Sau ñoù chöông trình chính goïi chöông trình con “xnp” ñeån hieån thò trò giaù trong thanh ghi BX daïng nhò phaân. .model small .386 .stack 100h .data tb0 db "Nhap so thap phan vao thanh ghi bx (tri tu 0 den 65535):",'$' tb1 db 13,10,"Gia tri trong thanh ghi bx, dang nhi phan:",'$' .code main proc near mov ax,@data mov ds,ax call nhap call xnp mov ah,4ch int 21h main endp ;--------------------------------------------- ;Nhap so thap phan 16 bit vao thanh ghi bx ;--------------------------------------------- nhap proc mov dx,offset tb0 call write_mss mov si,10 xor bx,bx lap0: mov ah,01 int 21h cmp al,13 jz thoat cmp al,'0' jb lap0 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 92 cmp al,'9' ja lap0 sub al,'0' xor ah,ah xchg ax,bx mul si add ax,bx xchg ax,bx jmp lap0 thoat: ret nhap endp ;----------------------------------------------- ;Xuat gia tri trong thanh ghi bx, dang nhi phan ;----------------------------------------------- xnp proc pusha mov dx,offset tb1 call write_mss mov cx,16 mov ah,02 lap1: xor dl,dl rol bx,1 adc dl,'0' int 21h loop lap1 popa ret xnp endp ;----------------------------------------------- ;Doan chuong trinh xuat chuoi tro boi ds:dx ;----------------------------------------------- write_mss proc push ax mov ah,09 int 21h pop ax ret Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 93 write_mss endp ;----------------------------- end main b. Truyeàn tham soá qua oâ nhôù, bieán. Trong phöông phaùp naøy, tham soá laø noäi dung cuûa oâ nhôù ñöôïc duøng ñeå truyeàn ñi giöõa chöông trình chính vaø chöông trình con. Trong ví duï beân döôùi, noäi dung cuûa hai oâ nhôù so1 vaø so2 ñöôïc truyeàn ñi cho chöông trình con coäng. Sau ñoù hieån thò trò giaù naøy ra maøn hình daïng nhò phaân. .model small .386 .stack 100h .data so1 dw ? so2 dw ? .code main proc near mov ax,@data mov ds,ax mov so1,8 mov so2,10 call cong mov ah,4ch int 21h main endp cong proc pusha mov bx,so1 add bx,so2 mov cx,16 mov ah,02 lap1: xor dl,dl rol bx,1 adc dl,'0' int 21h loop lap1 Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 94 popa ret cong endp ;----------------------------- end main c. Truyeàn tham soá qua oâ nhôù coù ñòa chæ do thanh ghi chæ ra. Trong phöông phaùp naøy, caùc thanh ghi seõ chöùa ñòa chæ cuûa tham soá caàn truyeàn ñi giöõa chöông trình chính vaø chöông trình con. Ví duï beân döôùi trình baøy quaù trình truyeàn tham soá vôùibaèng caùch coäng hai oâ nhôù sau ñoù hieån thò ra maøn hình daïng nhò phaân. Trong ñoù, DS:SI troû ñeán soá thöù nhaát, DS:DI troû ñeán soá thöù 2. .model small .386 .stack 100h .data so1 db 2 so2 db 3 .code main proc near mov ax,@data mov ds,ax mov si, offset so1 mov di, offset so2 call cong mov ah,4ch int 21h main endp ;----------------------------------------------- ;Xuat gia tri trong thanh ghi bx, dang nhi phan ;----------------------------------------------- cong proc pusha mov bl,[si] add bl,[di] mov cx,8 mov ah,02 lap1: Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 95 xor dl,dl rol bl,1 adc dl,'0' int 21h loop lap1 popa ret cong endp ;----------------------------- end main d. Truyeàn tham soá qua ngaên xeáp. Trong tröôøng hôïp naøy, caùc tham soá caàn truyeàn ñi ñöôïc löu trong ngaên xeáp. Ví duï beân döôùi minh hoïa phöông phaùp truyeàn naøy. Chöông trình naøy thöïc hieän pheùp coäng 2 soá nhaäp töø baøn phím, vôùi söï ngaàm ñònh laø toång cuûa 2 soá < 10 nhaèm ñôn giaûn hoùa chöông trình. Caàn löu yù laø tröôùc khi thöïc hieän chöông trình con thì CPU seõ thöïc hieän leänh PUSH IP (ñoái vôùi chöông trình daïng Near). .model small .386 .stack 100h .data tb1 db "Truyen tham so qua ngan xep",'$' tb2 db 13,10, "Nhap vao 2 so co tong nho hon 10",'$' tb3 db 13,10, "Nhap so thu 1:",'$' tb4 db 13,10, "Nhap so thu 2:",'$' tb5 db 13,10, "Tong 2 so:",'$' sum db 0 .code main proc near mov ax,@data mov ds,ax lea dx,tb1 call write_msg lea dx,tb2 call write_msg lea dx,tb3 call write_msg Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 96 mov ah,01 int 21h push ax lea dx,tb4 call write_msg int 21h push ax call cong lea dx,tb5 call write_msg mov dl,[sum] mov ah,02 int 21h mov ah,4ch int 21h main endp ;------------------------------------------------------------------------ ;Doan chuong trinh mot chuoi vao vung dem cho boi ds:bx, ket thuc nhap ;bang phim enter ;------------------------------------------------------------------------ cong proc push bp mov bp,sp mov ax,[bp+6] add ax,[bp+4] sub al,30h mov [sum],al pop bp ret 4 cong endp ;------------------------------------------------------------------------ ;Doan chuong trinh hien thi thong bao, ds:dx tro den seg:off cua thong bao ;------------------------------------------------------------------------ write_msg proc push ax mov ah,09 int 21h pop ax Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 97 ret write_msg endp end main 5. Caùc baøi taäp toång hôïp Baøi 1. Hieån thò thoâng tin trong Boot Sector cuûa ñóa meàm (Giaû söû ñóa meàm ñöôïc Format vôùi windows 9x). Höôùng daãn: - Ñoïc Sector 0 ( Head 0, Cylinder 0, Sector 1) treân ñóa meàm. - Thoâng dòch laïi noäi dung naøy döïa treân caáu truùc cuûa Boot Sector. Caùc haøm ñoïc, ghi sector: Int 13h, ah=02h : Ñoïc sector : Goïi vôùi : ah = 02h Al = soá sector Ch = Cylinder Cl = Sector Dh = head Dl = oå ñóa : 00 Ñóa meàm. 80h Ñóa cöùng. Es:bx = Seg:pff cuûa buffer Traû veà : Thaønh coâng : ZF = 0, ah =0, al = soá sector ñoïc. Khoâng thaønh coâng : ZF =1, ah = maõ loãi. Baøi 2. Chöông trình sao cheùp file. Höôùng daãn: - Xem caùc haøm thao taùc treân file. - Trình töï ñoïc ghi file nhu7u sau: Môû file (trong tröôøng hôïp ñoïc hoaëc ghi) vaø taïo file(trong tröôøng hôïp ghi). Neáu thaønh coâng ta ñöôïc File Handle. - Caên cöù vaøo caùc File Handle thöïc hieän caùc thao taùc ñoïc, ghi file. - Ñoùng file. Caùc haøm ñoïc ghi file : Int 21h. ah=3dh : Môû file Goïi vôùi : Ah = 3dh. Al = cheá ñoä truy xuaát. Ta chæ xeùt 3 bit 0,1, 2 : 000 : read, 001 write, 010 read and write. Ds:dx segment : offset cuûa ñöôøng daãn, keát thuùc baèng 0. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 98 Traû veà : Thaønh coâng : ZF = 0, ax = file handle. Khoâng thaønh coâng : ZF =1, ax = maõ loãi. Int 21h. ah=3eh : Ñoùng file. Goïi vôùi : Ah = 3eh. Bx = handle Traû veà : Thaønh coâng : ZF = 0. Khoâng thaønh coâng : ZF =1, ax = maõ loãi. Int 21h. ah=3ch :Taïo file Goïi vôùi : Ah = 3bh. cx = thuoäc tính file : 0: read only 1: hidden 2: system 3: Volume lable 4: Ñeå daønh. 5: Archive 6 - 15: Ñeå daønh. Ds:dx segment : offset cuûa ñöôøng daãn, keát thuùc baèng 0. Traû veà : Thaønh coâng : ZF = 0, ax = file handle. Khoâng thaønh coâng : ZF =1, ax = maõ loãi. Int 21h. ah=3fh :Ñoïc file Goïi vôùi : Ah = 3fh. bx = Handle. Cx = Soá byte ñoïc. DS:dx = segment : offset cuûa vuøng ñeäm ñoïc. Traû veà : Thaønh coâng : ZF = 0, ax = soá byte truyeàn. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 99 Khoâng thaønh coâng : ZF =1, ax = maõ loãi. Int 21h. ah=40h :Ghi file. Goïi vôùi : Ah = 40h. bx = handle: Ds:dx segment : offset cuûa vuøng ñeäm. Traû veà : Thaønh coâng : ZF = 0, ax = soá byte truyeàn. Khoâng thaønh coâng : ZF =1, ax = maõ loãi. Baøi 3: Chöông trình chaën ngaét baøn phím (coù thöôøng truù ), khi ñaùnh phím ‘a’ thì ñoåi thaønh ‘b’, ñaùnh phím ‘A’ thì ñoåi thaønh ‘B’. Höôùng daãn: - Cheùp Vector ngaét 16H vaøo Vector ngaét 62H. - Taïo Vector ngat 16H môùi vôùi chöùc naêng: Goïi laïi vector ngaét 16H cuõ (töùc Vector ngaét 62H) vaø kieåm tra phím. - Thöôøng truù ñoaïn chöông trình naøy. Ghi chuù: Ñeå coù chöông trình nguoàn cuûa caùc ví duï naøy sinh vieân coù theå lieân laïc vôùi giaùo vieân qua e-mail. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 100 Chöông 4. PHAÀN THÖÏC HAØNH PHAÀN LAÄP TRÌNH HÔÏP NGÖÕ Phaàn 1 CAÙC BAØI TAÄP CÔ BAÛN Baøi 1: Söû duïng chöông trình Debug, thöïc hieän caùc coâng vieäc sau: - Xem, thay ñoåi noäi dung cuûa caùc oâ nhôù. - Thao taùc treân Sector cuûa ñóa. - Taïo chöông trình .COM - Xem, thay ñoåi noäi dung cuûa caùc thanh ghi. - Chaïy töøng böôùc caùc leänh trong chöông trình - Caùc chöùc naêng khaùc. Baøi 2: Vieát chöông trình hieån thò thoâng baùo “Programming In ASM” ra maøn hình, chöông trình ôû daïng .EXE. Baøi 3: Vieát chöông trình hieån thò thoâng baùo “Programming In ASM” ra maøn hình, chöông trình ôû daïng .COM. Baøi 4. Vieát chöông trình copy 2000 laàn giaù trò 8f20h vaøo vuøng nhôù coù ñòa chæ vaät lyù baét ñaàu laø b8000h. Baøi 5. Vieát chöông trình copy 2000 laàn giaù trò 0f20h vaøo vuøng nhôù coù ñòa chæ vaät lyù b8000h. Baøi 6. Vieát chöông trình ñoåi thuoäc tính cuûa 7 kyù töï taïi haønh 4, coät 4 vôùi thuoäc tính chöõ ñen neàn traéng. Baøi 7. Vieát chöông trình nhaäp moät chuoãi vaøo vuøng nhôù coù ñòa chæ ñaàu laø buffer, sau ñoù chuyeån sang chuoãi hoa töông öùng roài in ra maøn hình. Giaû söû chuoãi daøi toái ña 100 kyù töï. Baøi 8. Vieát chöông trình nhaäp moät trò giaù töø 1 ñeán 7, sau ñoù in ra maøn hình teân thöù töông öùng (thu hai, thu ba,, chuû nhaät) Baøi 9. Vieát chöông trình nhaäp moät trò giaù töø 1 ñeán 2, sau ñoù in ra maøn hình teân thaùng töông öùng (thang gieng, thang hai, , thang möôøi hai). Baøi 10.Vieát chöông trình xoùa maøn hình coù duøng ngaét. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 101 Baøi 11.Vieát chöông trình xoùa maøn hình maø khoâng duøng moät ngaét naøo, keå caû ngaét duøng ñeå keát thuùc chöông trình. Baøi 12.Vieát chöông trình nhaäp moät chuoãi vaøo vuøng nhôù coù ñòa chæ ñaàu laø buffer, sau ñoù chuyeån sang chuoãi thöôøng töông öùng roài in ra maøn hình. Giaû söû chuoãi daøi toái ña 100 kyù töï. Baøi 13.Vieát chöông trình copy chuoãi 1 coù ñòa chæ ñaàu laø buffer1 vaøo chuoãi 2 coù ñòa chæ ñaàu laø buff2, bieát raèng chieàu daøi toái ña cuûa chuoãi laø 100 kyù töï, vaø caùc chuoãi keát thuùc baèng kyù töï ‘$;’. Baøi 14.Vieát chöông trình copy n kyù töï ñaàu tieân cuûa chuoãi 1 coù ñòa chæ ñaàu laø buffer1 vaøo chuoãi 2 coù ñòa chæ ñaàu laø buff2 vôùi trò n nhaäp töø baøn phím daïng thaäp phaân, bieát raèng chieàu daøi toái ña cuûa chuoãi (keå caû khi gheùp) laø 100 kyù töï vaø caùc chuoãi keát thuùc baèng kyù töï ‘$’. Baøi 15.Vieát chöông trình nhaäp 1 chuoãi vaøo vuøng nhôù coù ñòa chæ ñaàu laø buffer, sau ñoù ñeám soá laàn xuaát hieän cuûa kyù töï a coù trong chuoãi, in ra maøn hình daïng thaäp luïc phaân. Giaû söû chuoãi daøi toái ña 100 kyù töï. Baøi 16.Vieát chöông trình nhaäp vaøo moät chuoãu roài in ra chuoãi ngöôïc töông öùng, giaû söû chuoãi daøi toài ña 100 kyù töï vaø khoâng duøng stack. Baøi 17.Cho hai vuøng nhôù coù ñòa chæ ñaàu laàn löôït laø mem1 vaø mem2, kyù töï keát thuùc chuoãi laø kyù töï ‘$’ vieát chöông trình hoùan ñoåi noäi dung cuûa hai chuoãi naøy. Baøi 18.Vieát chöông trình nhaäp 1 chuoãi vaøo vuøng nhôù coù ñòa chæ ñaàu laø buffer, sau ñoù in ra vò trí xuaát hieän ñaàu tieân cuûa kyù töï a (neáu co)ù trong chuoãi ñeám, in ra maøn hình daïng thaäp luïc phaân. Giaû söû chuoãi daøi toái ña 100 kyù töï. Baøi 19.Vieát chöông trình hieån thò noäi dung thanh ghi ax, cs cuûa CPU ra maøn hình daïng thaäp luïc phaân. Baøi 20. Bieát ñòa chæ cuûa LPT1 löu ôû 2 oâ nhôù laàn löôït coù ñòa chæ ñaàu laø 408h, 409h. Vieát chöông trình hieån thò noäi dung cuûa LPT1 ra maøn hình daïng thaäp luïc phaân vaø daøng nhò phaân. Baøi 21. Vieát chöông trình hieån thò ñòa chæ cô baûn cuûa coång COM1 ra maøn hình daïng Hexa. Baøi 22. Vieát chöông trình hieån thò noäi dung thanh ghi BX ra maøn hình daïng nhò phaân. Baøi 23. Vieát chöông trình hieån thò noäi dung thanh ghi BX ra maøn hình daïng thaäp phaân. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 102 Baøi 24. Vieát chöông trình hieån thò noäi dung thanh ghi BX ra maøn hình daïng thaäp luïc phaân. Baøi 25. Vieát chöông trình nhaäp giaù trò 16 bit vaøo thanh ghi BX daïng nhò phaân. Baøi 26. Vieát chöông trình nhaäp giaù trò 16 bit vaøo thanh ghi BX daïng thaäp phaân. Baøi 27. Vieát laïi chöông trình treân nhöng vôùi soá coù daáu. Baøi 28.Vieát chöông trình nhaäp moät trò giaù 16 bit vaøo maøn hình daïng thaäp luïc phaân, sau ñoù in ra maøn hình trò thaäp phaân coù daáu töông öùng. Baøi 29. Vieát chöông trình nhaäp giaù trò 16 bit vaøo thanh ghi BX daïng thaäp luïc phaân. Baøi 30.Vieát chöông trình chuyeån ñoåi qua laïi giöõa caùc soá heä hai. möôøi vaø möôøi saùu. Baøi 31.Vieát chöông trình hieån thò noäi dung cuûa taát caû caùc thanh ghi trong CPU ra maøn hình daïng thaäp luïc phaân. Baøi 32.Trong caùc CPU sau naøy cuûa Intel coù caùc thanh ghi 32 bit ñöôïc môû roäng töø caùc thanh ghi 16 bit ( ví duï thanh ghi AX seõ coù thanh ghi môû roäng töông öùng laø EAX) vieát chöông trình hieån thò noäi dung cuûa thanh ghi EBX ra maøn hình daïng thaäp luïc phaân. Baøi 33.Vieát chöông trình so saùnh hai soá 16 bit nhaäp töø baøn phím, hieån thò keát quaû ra maøn hình. Baøi 34.Vieát chöông trình coäng, tröø hai soá 16 bit nhaäp töø baøn phím sau ñoù hieån thò keát quaû ra maøn hình daïng thaäp phaân. Baøi 35.Vieát chöông trình nhaäp moät soá thaäp phaân N 16 bit töø baøn phím, sau ñoù in ra maøn hình toång 1 + 2 + ... + N. Baøi 36.Vieát chöông trình nhaäp moät soá thaäp phaân 16 bit töø baøn phím, sau ñoù in ra maøn hình toång n!. Baøi 37.Vieát chöông trình nhaân soá 16 bit nhaäp töø baøn phím sau ñoù hieån thò keát quaû ra maøn hình daïng thaäp phaân. Baøi 38.Vieát chöông trình chia hai soá 16 bit nhaäp töø baøn phím sau ñoù hieån thò keát quaû ra maøn hình daïng thaäp phaân. Baøi 39. Vieát chöông trình hieån thò noäi dung thanh ghi BX ra maøn hình daïng nhò phaân. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 103 Baøi 40.Vieát chöông trình tìm soá lôùn nhaát, nhoû nhaát trong ba soá thaäp phaân khoâng daáu 16 bit nhaäp töø baøn phím. Baøi 41.Vieát chöông trình ñoåi moät chuoãi kyù töï coù trò giaù töø ‘0’ ñeán ‘9’ ra daïng thaäp phaân. Vôùi caùc löu yù: - Xöû lyù loãi trong tröôøng hôïp soá lôùn hôn 16 bit (soá coù daáu). - Xöû lyù trong tình huoáng coù daáu tröø vaø khoâng coù daáu tröø phía tröôùc. Phaàn 2. CAÙC BAØI TAÄP NAÂNG CAO Baøi 1. Vieát chöông trình taïo file coù teân nhaäp töø baøn phím, coù noäi dung laø “Toi ñi hoc”. Baøi 2. Vieát chöông trình xoaù file coù coù teân nhaäp töø baøn phím. Baøi 3. Vieát chöông trình ñoïc file coù teân nhaäp töø baøn phím, sau ñoù hieån thò ra maøn hình. Baøi 4. Vieát chöông trình dôøi 7 kyù töï taïi vò trí haøng 5 coät 5 sang vò trí haøng 7 coät 7 treân maøn hình. Baøi 5. Vieát chöông trình nhaäp vaøo moät vò trí toïa ñoä goàm hai tham soá haøng vaø coät, sau ñoù chuyeån Cursor ñeán vò trí naøy. Baøi 6. Vieát chöông trình ñoåi noäi dung cuûa maøn hình vôùi caùc chuõ thöôøng thaønh chöõ hoa. Baøi 7. Vieát chöông trình cho moät chöõ rôi töø doøng ñaàu ñeán doøng cuoái. Baøi 8. Vieát chöông trình ñoïc sector C: 0, H: 1, S: 2, cuûa ñóa meàm. Hieån thò 8 byte ñaàu tieân daïng maõ Ascii. Baøi 9. Vieát chöông trình ñoïc sector C: 0, H: 0, S: 1, cuûa ñóa meàm. Löu vaøo file coù teân laø bott_sec.dat cuûa oå D. Baøi 10.Vieát chöông trình xoùa sector C: 0, H: 0, S: 1, cuûa ñóa meàm veà caùc giaù trò 00h. Chuù yù raèng luùc naøy döõ lieäu treân ñóa bò maát. Baøi 11.Vieát chöông trình ñoïc boot_sec.dat cuûa oå D (ñaõ laøm ôû caâu treân) ghi vaøo sector sector C: 0, H: 0, S: 1, cuûa ñóa meàm. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 104 Baøi 12.Vieát chöông trình moâ phoûng leänh dir cuûa Dos. Baøi 13.Vieát chöông trình nhaäp vaøo teân cuûa moät file, sau ñoù kieåm tra File naøy coù toàn taïi treân ñóa khoâng. Baøi 14.Vieát chöông trình nhaäp vaøo teân cuûa moät file treân ñóa meàm, sau ñoù kieåm tra File naøy coù toàn taïi treân ñóa khoâng, neáu coù thì hieån thò caùc Cluster maø file naøy chieám. Baøi 15.Vieát chöông trình kieåm tra xem oå ñóa C treân maùy tính hieän taïi (hoaëc moät ñóa cöùng khaùc) ñang duøng heä thoáng file naøo? (ví duï FAT 12, FAT 16, FAT 32, NTFS) Baøi 16.Vieát chöông trình thöôøng truù hieån thò thôøi gian cuûa maùy tính ra maøn hình. Baøi 17.Vieát chöông trình giaûi maõ leänh MOV. Baøi 18.Vieát chöông trình thöïc hieän pheùp coäng, tröø cho hai soá 32 bit nhaäp töø baøn phím vaø in ra keát quaû nhöng chæ duøng caùc thanh ghi 16 bit. Baøi 19.Vieát chöông trình thöïc hieän pheùp nhaân, chia cho hai soá 32 bit nhaäp töø baøn phím vaø in ra keát quaû nhöng chæ duøng caùc thanh ghi 16 bit. Baøi 20.Vieát chöông trình tìm USCLN cuûa hai soá thaäp phaân khoâng daáu 16 bit nhaäp töø baøn phím. Baøi 21.Vieát chöông trình so saùnh hai chuoãi coù noäi dung nhaäp töø baøn phím. Giaû söû chuoãi daøi toái ña 100 kyù töï. Baøi 22.Vieát chöông trình gioáng nhö phaàn kieåm tra password cuûa BIOS, vôùi PASSWORD ñöôïc ñònh nghóa tröôùc trong chöông trình. Baøi 23.Vieát chöông trình hieån thò noäi dung 256 byte cuûa moät vuøng nhôù baát kyø vôùi ñòa chæ ñaàu coù daïng segment: offset ñöôïc nhaäp töø baøn phím. Vuøng beân traùi hieån thò daïng Hexa vaø vuøng beân phaûi laø daïng maõ ASCII. Baøi 24.Vieát chöông trình ñoåi moät chuoãi kyù töï coù trò giaù töø ‘0’ ñeán ‘9’ ra daïng thaäp phaân. Vôùi caùc löu yù: - Xöû lyù loãi trong tröôøng hôïp soá lôùn hôn 32 bit (soá coù daáu). - Xöû lyù trong tình huoáng coù daáu tröø vaø khoâng coù daáu tröø phía tröôùc. Baøi 25.Vieát chöông trình moâ phoûng leänh type, vaø leänh copy con cuûa Dos. Baøi 26.Vieát chöông trình hieån thò Entry ñaàu tieân trong baûng artition ñaàu tieân treân ñóa cöùng. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 105 Baøi 27.Vieát chöông trình lieät keâ taát caû caùc thieát bò PCI coù treân maùy tính. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 106 PHAÀN CAÁU TRUÙC MAÙY TÍNH Baøi 1 CAÁU TRUÙC MAINBOARD VAØ THAO TAÙC LAÉP RAÙP MAÙY TÍNH Muïc ñích: Sinh vieân naém ñöôïc nguyeân taét hoaït ñoäng xaùc ñònh ñöôïc vai troø, chöùc naêng vaø nhaän daïng caùc linh kieän treân caùc Mainboard khaùc nhau. Caáu hình ñöôïc moät Main board khi coù User Manual. Thöïc hieän caùc kyõ naêng laép raùp maùy tính, gaén theâm thieát bò. Noäi dung: Khaûo saùt caùc thaønh phaàn treân Mainboard bao goàm: · ROM BIOS: Xaùc ñònh vò trí, maõ cuûa Bios. Naém ñöôïc vai troø cuûa Bios, thöïc hieän caùc Jumper lieân quan ñeán Bios. · RAM CMOS: Nhö treân. · Boä nhôù heä thoáng: (DRAM-Dynamic RAM ) xaùc ñònh vò trí cuûa Dram xaùc ñònh loaïi khe caém laø DIMM hay SIMM, loaïi 30,72 hay 168 chaân dung löôïng cuûa moãi thanh RAM, maõ cuûa moäi thanh RAM, Toác ñoä truy xuaát cuûa RAM. · Boä nhôù CACHE ngoaïi ( External Cache): Xaùc ñònh vò trí cuûa CACHE ngoaïi, maõ cuûa Cache, dung löôïng cuûa Cache. · CPU: Quan saùt CPU, daïng chaân, ñieän aùp cung caáp cho CPU, toác ñoä CPU, haõng cheá taïo CPU. · Caùc Jumper hay Switch: Xaùc ñònh caùc Jumper treân Main board vai troø cuûa caùc Jumper trong vieät thieát laäp caáu hình cuûa maùy tính: Toác ñoä CPU, ñieän aùp CPU, loaïi CPU, Reser Cmos, Reset Switch, Speaker...Minh hoïa baèng User manual. · Thaïch anh: Vai troø cuûa thaïch anh, xaùc ñònh caùc thaïch anh dao ñoäng ñoïc thoâng soá cuûa thaïch anh. · Kieán truùc BUS: khaûo saùt caùc loaïi khe caém môû roäng(ISA,EISA,MCA,VL bus, PCI). Moái lieân heä vôùi System Bus. · Nguoàn: xaùc ñònh nguoàn treân Main Board laø AT hay ATX. So saùnh söï khaùc nhau vaø gioáng nhau veà nguyeân taét hoaït ñoäng cuûa 2 loaïi nguoàn naøy. · Caùch ñoïc moät User manual cuûa moät Main board. Lieân heä vôùi thöïc tieãn caùc loaïi Mainboard, CPU, RAM. · Xaùc ñònh caùc Cable döõ lieäu nguoàn, quy öôùc veà caùch ñaáu daây cho HDD,FDD. · Thieát laäp Master, Slave cho caùc ñóa cöùng quy ñònh veà A,B cuûa ñóa meàm. Lieân heä vôùi caùc thieát laäp ID cho chuaån SCSI. · Caùch ñaáu daây cho nguoàn, ñieän theá cuûa nguoàn. Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 107 · Caùc thao taùc vaø quy öôùc gaén CPU, quaït vaøo Main board. · Thöïc hieän thao taùc laép raùp maùy tính. · Xaùc ñònh caùc thoâng baùo loãi thöôøng gaëp trong quaù trình thaùo laép maùy tính nhö loãi ñóa meàm, ñóa cöùng, Ram, Cmos, Mainboard,Card... Baøi 2 THIEÁT LAÄP BIOS VAØ KIEÅM TRA CAÁU HÌNH MAÙY TÍNH BAÈNG PHAÀN MEÀM Muïc ñích: Naém ñöôïc caùc thao taùc trong vieäc thay ñoåi caáu hình heä thoáng cô sôû vaø caùc tham soá phaàn cöùng thoâng qua chöông trình Setup cuûa BIOS. Kieåm tra caáu hình cuûa maùy tính baèng caùc chöông trình phaàn meàm. Noäi dung: Thöïc hieân caùc thao taùc treân caùc Menu coù saün cuûa chöông trình tieän ích bao goàm: · Standard CMOS SETUP: Xem vaø thay ñoåi ngaøy thaùng, thôøi gian, caùc thoâng soá cuûa ñóa cöùng, ñóa meàm, ( Giaûi thích caáu truùc cuûa ñóa) cho pheùp hay khoâng cho pheùp caùc oå ñóa hoaït ñoäng. Thieát laäp cheá ñoä maøn hình, cheá ñoä treo maùy khi gaëp loãi, sô ñoà toå chöùc boä nhôù. · Bios Feature Setup: Thöïc hieän taát caû caùc thao taùc vaø naém baét ñöôïc yù nghóa cuûa töøng tuøy choïn trong caùc muïc. (Trong phaàn naøy ñeà caëp sô löôït ñeán toå chöùc cuûa ñóa cöùng khi thöïc hieän cheá ñoä virus warning thöïc chaát cuûa quaù trình khi virus thaâm nhaäp vaøo Boot Sector hay Partiotion Table, ñeà caëp ñeán cheá ñoä kieåm tra Parity, cô cheá thöïc söï khi môû ñöôøng A20 treân CPU). · Power managerment setup: Thöïc hieän caùc thao taùc thay ñoåi caùc thoâng soá caáu hình vaø tuøy choïn trong muïc naøy ñeå thaáy ñöôïc caùc cheá ñoä HDD standby mode, Doze mode, Standby mode.. vaø caùc kích hoaït. Thaáy ñöôïc quaù trình heä thoáng chuyeån töø cheá doä naøy sang cheá ñoä khaùc. · Load setup defaut vaø load bios defaul: Thöïc hieän quaù trình naïp caùc giaù trò maëc ñònh cuûa heä thoáng xem söï thay ñoåi caáu hình töông öùng cuûa heä thoáng. · Password setting: Thöïc hieän thieát laëp Password, xoaù vaø thay ñoåi Password. · IDE HDD Autodetection: Thöïc hieän thao taùc tìm oå cöùng töï ñoäng so saùnh vôùi cheá ñoä nhaïp baèng tay · Save & exit setup: Thoaùt vaø löu. · Exit without saving:Thoaùt vaø khoâng löu. · Giôùi thieäu theâm moät soá chöùc naêng cao caáp treân caùc maùy tính môùi khaùc nhau nhö: Chip feature setup, PNP /PCI Configuration, HDD low level format, Intergrated peripherals, Supervisor Password... Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 108 Duøng caùc chöông trình kieåm tra maùy nhö PCCheck 2002, DR Hardware, Sis Sandra... nhaèm phuïc vuï caùc yeâu caàu sau: · Vi xöû lyù ? Toác ñoä? Ñoàng xöû lyù? · Boä nhôù bao nhieâu? Boä nhôù quy öôùc (Base memory) boä nhôù môû roäng? Sô ñoà toå chöùc cuûa boä nhôù. · Cache noäi (Internal Cache)? Cache ngoaïi (External Cache)? · Ngaøy taïo BIOS, loaïi BIOS · Caùc thieát bò ngoaïi vi: Ñóa cöùng dung löôïng? Head, Cylinder, Sector, Ñóa meàm dung löôïng? Sao Card? Card maøn hình bao nhieâu Mram? Chuaån gì, cheá ñoä söû duïng? · Ñòa chæ cuûa caùc coång vaøo ra cuûa COM1,COM2,LPT Test vi xöû lyù, ñoàng xöû lyù, RAM, Mainboard, HDD,FDD, Keyboard, Display Adapter, Card maïng Ghi laïi keát quaû. Baøi 3 QUAÙ TRÌNH KHÔÛI ÑOÄNG MAÙY TÍNH Muïc ñích: Naém ñöôïc töøng böôùc hoaït ñoäng cuûa quaù trình khôûi ñoäng cuûa maùy tính. Töø ñoù bieát ñöôïc maùy tính gaëp söï coá ôû böôùc naøo ñeå khaéc phuïc cuõng nhö ngöôøi duøng coù theå can thieäp vaøo maùy tính ôû giai ñoaïn naøo. Noäi dung: Thöïc hieän vieäc kieåm tra quaù trình khôûi ñoäng cuûa maùy tính · Giai ñoaïn CPU ñoïc leänh vaø chuyeån quyeàn ñieàu khieån cho BIOS · Giai ñoaïn khôûi taïo thieát bò, caùc vector ngaét cuûa BIOS. · Thöû nghieäm vaø kieåm tra caùc maõ loãi. · Giai ñoaïn ROM SCAN, quaù trình kieåm tra moät ROM hôïp leä khi naøo BIOS trao quyeàn ñieàu khieån cho ROM. · Giai ñoaïn ñoïc ñóa. Thöïc hieän caùc taäp tin khôûi ñoäng IO.SYS vaø MSDOS.SYS. Quaù trình khôûi taïo baûng vector ngaét cuûa DOS. · Quaù trình naïp Config.sys, Command.com vaø Autoexec.bat. Caùc thao taùc boû qua hay thöïc hieän töøng böôùc caùc leänh trong hai File naøy. Thöïc hieän moät soá leänh caáu hình trong Config.sys vaø Autoexec.bat chuû yeáu laø caùc leänh lieân quan ñeán quaûn lyù boä nhôù vaø toác ñoä truy xuaát cuûa maùy tính. · Khaûo saùt hoaït ñoäng cuûa MBR vaø Boot Sector trong quaù trình khôûi ñoäng. Baøi 4 KHAÛO SAÙT -PHAÂN CHIA VAØ ÑÒNH DAÏNG ÑÓA CÖÙNG - CAØI ÑAËT THIEÁT BÒ VAØ PHAÀN MEÀM Tröôøng ÑH DL KTCN Baøi giaûng moân Caáu truùc maùy tính vaø hôïp ngöõ 109 Muïc ñích: Naém ñöôïc thao taùc phaân chia vaø cô cheá phaân chia ñóa cöùng cuõng nhö ñònh daïng ñóa. Noäi dung:Thöïc hieän thao taùc: · Chia ñóa baèng chuông trình Fdisk theo caùc yeâu caàu khaùc nhau ( Phaàn DOS, Non DOS, chia thaønh 1 hay nhieàu volumes ) · Ñònh daïng caùc Volume vôùi caùc heä ñieàu haønh vaø caùc tuyø choïn khaùc nhau. · Duøng caùc chöông trình heä thoáng (nhö NU - chöông trình Diskedit) ñeå xem caùc thoâng tin vöøa ñònh daïng (Baûng Partition Table, Boot sector) Thaáy ñöôïc thöïc teá yù nghóa caùc tröôøng System, Boot, Starting Location, Ending Location, Relative Sector, Number of Sector. Tính toaùn laïi caùc Entry trong baûng Partition trong caùc truôøng hôïp phaân chia khaùc nhau keå caûc trong phaàn Extend. · Thöïc hieän caøi ñaëc troïn veïn moät maùy tính vaø caùc phaàn meàm öùng duïng, caùc phaàn cöùng hieän coù treân maùy (nhö card sound...) caøi nhieàu heä ñieàu haønh. Baøi5 TOÅ CHÖÙC LOGIC CUÛA ÑÓA Muïc ñích: Naém ñöôïc cô cheá toå chöùc LOGIC cuûa ñóa cöùng vaø ñóa meàm heä ñieàu haønh phoå bieán nhaát laø DOS vaø Windows. Noäi dung: · Khaûo saùt hoaït ñoäng, phaân tích, tính toaùn toå chöùc logic cuûa ñóa nhö MBR, Boot Sector, Root Directory, FAT 12, FAT 16, FAT32 baèng caùc phaàn meàm heä thoáng. Baøi 6 KHAÉC PHUÏC MOÄT SOÁ LOÃI CÔ BAÛN Muïc ñích: Nhaän bieát ñöôïc caùc loãi cô baûn thöôøng gaëp ôû maùy tính nhaèm giuùp sinh vieân coù ñöôïc kinh nghieäm trong vieäc baûo trì vaø söõa chöõa maùy tính. Noäi dung: · Thöïc hieän moät soá thao taùc nhaèm taïo ra loãi treân maùy tính ñeå thaáy ñöôïc bieåu hieän cuûa maùy tính khi gaëp loãi (Loûng chaân cuûa Ram,Card, Ram hö, Card hö, caùc thao taùc khaùc treân ñóa meàm ñóa cöùng). Kieåm tra Virus caùc thao taùc queùt Virus, caùc tröôøng hôïp maùy tính khoâng nhaän ñöôïc HDD,FDD, khoâng khôûi ñoäng töø HDD... · Thöïc hieän thao taùc khoâi phuïc laïi baûng Partition Table vaø phaàn maõ ñònh daïng trong tröôøng hôïp chia ñóa cöùng thaønh 1,2,3ñóa Logic khaùc nhau trong tröôøng hôïp Virus xoaù maát Matter Boot Record vaø maùy khoâng nhaän ñöôïc ñóa cöùng.

Các file đính kèm theo tài liệu này:

  • pdfv_bai_giang_kien_truc_may_tinh_va_hop_ngu_1961_2021090.pdf