Bài giảng Kiến trúc máy tính - Chương 2: Ngôn ngữ của máy tính (Assembly) - Phần 2.4
Bạn đang xem 20 trang mẫu của tài liệu "Bài giảng Kiến trúc máy tính - Chương 2: Ngôn ngữ của máy tính (Assembly) - Phần 2.4", để tải tài liệu gốc về máy bạn click vào nút DOWNLOAD ở trên
Tài liệu đính kèm:
- bai_giang_kien_truc_may_tinh_chuong_2_ngon_ngu_cua_may_tinh.ppt
Nội dung text: Bài giảng Kiến trúc máy tính - Chương 2: Ngôn ngữ của máy tính (Assembly) - Phần 2.4
- KIẾN TRÚC MÁY TÍNH Giảng viên: Ths Phạm Thanh Bình Bộ môn Kỹ thuật máy tính & mạng Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 1
- 2.6.8 Mảng và các chế độ địa chỉ Khai báo mảng một chiều Các phần tử của mảng một chiều Các chế độ địa chỉ Các lệnh thao tác với chuỗi Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 2
- Khai báo mảng một chiều Mảng một chiều gồm một chuỗi liên tiếp các byte hay word trong bộ nhớ. Ở Chương 2 ta đã từng sử dụng khai báo: .DATA ChuoiKT DB ‘KHOA CONG NGHE THONG TIN$’ Thực chất khai báo này sẽ chiếm một vùng 25 ô nhớ trong đoạn dữ liệu và đặt vào đó các kí tự tương ứng: Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 3
- ‘K’ ‘H’ ‘O’ ‘A’ ‘ ’ ‘C’ Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 4
- Cách khai báo như trên tương đương với cách khai báo sau đây: .DATA ChuoiKT DB ‘K’, ‘H’, ‘O’, ‘A’, ‘CONG’, ‘NGHE’, ‘THONG TIN$’ Và cũng tương đương với: .DATA ChuoiKT DB 4Bh, 48h, 4Fh, 41h, ‘CONG’, ‘NGHE’, ‘THONG TIN$’ Các khai báo đó được gọi là khai báo liệt kê, tức là sẽ tạo ra trong bộ nhớ một mảng có số lượng phần tử xác định, đồng thời khởi tạo luôn giá trị cho từng phần tử Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 5
- Các phương pháp khai báo tổng quát Khai báo mảng Byte: Mảng Byte là mảng mà mỗi phần tử có kích thước 1 byte. Cách 1: DB Ví dụ: A DB 10h, 12h, 30, 40 Khai báo trên tạo ra mảng A có 4 phần tử, mỗi phần tử chiếm 1 byte nhớ Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 6
- Cách 2: DB DUP (Giá trị khởi tạo) Ví dụ 1: A DB 50 DUP (0) Khai báo trên tạo ra mảng A có 50 phần tử, giá trị ban đầu của các phần tử bằng 0. Ví dụ 2: B DB 100 DUP (?) Khai báo trên tạo ra mảng B có 100 phần tử, không khởi tạo giá trị ban đầu cho các phần tử Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 7
- Khai báo mảng Word: Mảng Word là mảng mà mỗi phần tử có kích thước 1 word. Cách 1: DW Cách 2: DW DUP (Giá trị khởi tạo) Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 8
- Ví dụ 1: A DW 10h, 12h, 30, 40 Khai báo trên tạo ra mảng A có 4 phần tử, mỗi phần tử dài 16 bít. Ví dụ 2: B DW 50 DUP (?) Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 9
- Các phần tử của mảng một chiều Tên mảng chính là một biến ứng với phần tử đầu tiên của mảng. Các phần tử tiếp theo có thể được xác định bằng cách lấy địa chỉ phần tử đứng trước cộng với kích thước của nó. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 10
- Ví dụ 1: M DB 10, 20, 30, 40 Các phần tử của mảng có thể kí hiệu như sau (chú ý: kích thước của mỗi phần tử trong mảng này là 1 byte): Kí hiệu Giá trị Phần tử 1 M 10 Phần tử 2 M + 1 20 Phần tử 3 M + 2 30 Phần tử 4 M + 3 40 Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 11
- Ví dụ 2: N DW 1, 6, 20, 10, 15 Các phần tử của mảng có thể kí hiệu như sau (chú ý: kích thước của mỗi phần tử trong mảng này là 2 byte): Kí hiệu Giá trị Phần tử 1 N 1 Phần tử 2 N + 2 6 Phần tử 3 N + 4 20 Phần tử 4 N + 6 10 Phần tử 5 N + 8 15 Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 12
- Ví dụ 3: Cho mảng A gồm 12 phần tử, các phần tử có kiểu là Byte. Hãy đổi chỗ phần tử đầu tiên và phần tử cuối cùng của mảng cho nhau. Giải: Phần tử đầu tiên là: A Phần tử cuối cùng là: A + 11 MOV AL, A MOV BL, A + 11 MOV A, BL MOV A+11, AL Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 13
- Các chế độ địa chỉ Việc truy nhập trực tiếp tới các phần tử của mảng thông qua cách viết: + gây rất nhiều bất tiện trong lập trình. Một phương pháp khác, mềm dẻo hơn, là sử dụng các thanh ghi để chứa hoặc chứa địa chỉ của từng phần tử. Bằng việc thay đổi nội dung các thanh ghi → có thể truy nhập vào các phần tử khác nhau của mảng. Các thanh ghi có thể được sử dụng là BX, BP, SI, DI Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 14
- Dùng thanh ghi chứa địa chỉ của phần tử: Giả sử thanh ghi SI đang chứa địa chỉ offset của một ô nhớ nào đó, cách viết: [SI] sẽ trả về nội dung của ô nhớ đó. Nếu sử dụng các thanh ghi BX, DI và SI để chứa địa chỉ offset thì địa chỉ segment sẽ được chứa trong DS. Còn nếu sử dụng thanh ghi BP thì SS sẽ chứa segment Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 15
- Ví dụ: Cho mảng sau: A DB 10, 12, 3, 4, 9, 5, 7, 6 Hãy tính tổng các phần tử của mảng (cất tổng vào AL). Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 16
- Giải: Ta sẽ sử dụng thanh ghi SI lần lượt trỏ tới từng phần tử của mảng để thực hiện phép tính tổng. XOR AL, AL ;Xoá AL để chuẩn bị chứa tổng LEA SI, A ;SI chứa địa chỉ offset phần tử đầu ; tiên của mảng MOV CX, 8 ;Số lần lặp (mảng có 8 phần tử) Lap: ADD AL, [SI] ;Cộng phần tử của mảng vào AL INC SI ;SI trỏ tới phần tử tiếp theo LOOP Lap Cách viết như trên được gọi là Chế độ địa chỉ gián tiếp thanh ghi. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 17
- Dùng thanh ghi để chứa Trong phương pháp này, muốn truy nhập vào một phần tử của mảng thì cần phải biết được từ phần tử đó tới đầu mảng. Các phần tử của mảng sẽ được kí hiệu như sau: [Thanh ghi] Trong đó Thanh ghi sẽ chứa của phần tử tính từ đầu mảng Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 18
- Ví dụ 1: Kí hiệu: A[BX] A: là tên mảng BX: là thanh ghi chứa Nếu BX = 0 thì A[BX] chính là phần tử đầu tiên của mảng. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 19
- Ví dụ 2: Viết lại đoạn chương trình tính tổng các phần tử của mảng bằng một cách khác. Cho mảng sau: A DB 10, 12, 3, 4, 9, 5, 7, 6 Hãy tính tổng các phần tử của mảng (cất tổng vào AL). Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 20
- Giải: XOR AL, AL ;Xoá AL để chuẩn bị chứa tổng XOR BX, BX ; = 0: phần tử đầu tiên của mảng MOV CX, 8 ;Số lần lặp (mảng có 8 phần tử) Lap: ADD AL, A[BX] ;Cộng phần tử của mảng vào AL INC BX ;tăng để trỏ tới phần tử tiếp theo LOOP Lap Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 21
- Ngoài cách kí hiệu A[BX] còn có thể sử dụng các kí hiệu khác tương đương như [A + BX], [BX + A], A + [BX], [BX] + A. Nếu sử dụng các thanh ghi BX (Base Register) hay BP (Base Pointer) trong cách viết trên thì gọi là Chế độ địa chỉ cơ sở, còn nếu sử dụng SI (Source Index) hay DI (Destination Index) thì gọi là Chế độ địa chỉ chỉ số. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 22
- Các lệnh thao tác với chuỗi Lệnh chuyển chuỗi (Moving a String) Lệnh chuyển dữ liệu từ thanh ghi vào chuỗi (Store a String) Lệnh chuyển dữ liệu từ chuỗi vào thanh ghi (Load a String) Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 23
- Trong các lệnh thao tác với chuỗi, có hai cặp thanh ghi hay được sử dụng là DS:SI và ES:DI. Nếu dùng DS để chứa segment thì SI sẽ chứa offset, và nếu ES chứa segment thì DI sẽ chứa offset. Để ES cũng chứa địa chỉ của đoạn dữ liệu giống như DS thì ở đầu của chương trình chính phải có các lệnh: MOV AX, @DATA MOV DS, AX MOV ES, AX Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 24
- Lệnh chuyển chuỗi (Moving a String) Lệnh này còn được gọi là lệnh sao chép chuỗi. a) Chuyển một lần: Dạng 1: MOVSB Lệnh trên sao chép 1 byte dữ liệu từ ô nhớ có địa chỉ DS:SI sang ô nhớ có địa chỉ ES:DI. Dạng 2: MOVSW Lệnh trên sao chép 1 word dữ liệu từ ô nhớ có địa chỉ DS:SI sang ô nhớ có địa chỉ ES:DI. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 25
- Ví dụ 1: Xét hai chuỗi được khai báo như sau: .DATA Chuoi1 DB ‘Khoa CNTT$’ Chuoi2 DB 10 DUP (?) Hãy sao chép nội dung của Chuoi1 sang Chuoi2. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 26
- Giải: Để thực hiện yêu cầu trên ta sẽ lần lượt sao chép từng byte của Chuoi1 sang Chuoi2. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 27
- ‘K’ ← DS:SI Chuoi1 ‘h’ 10 byte ‘o’ ‘a’ ‘ ’ ‘C’ ‘N’ ‘T’ ‘T’ ‘$’ ? ← ES:DI Chuoi2 ? Bộ môn10 Kỹ thuậtbyte máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 28
- Muốn sao chép byte đầu tiên (kí tự ‘K’) thì DS:SI phải chứa địa chỉ đầu của Chuoi1, ES:DI phải chứa địa chỉ đầu của Chuoi2. Điều này được thực hiện bởi các lệnh sau: LEA SI, Chuoi1 ;SI chứa offset của Chuoi1 LEA DI, Chuoi2 ;DI chứa offset của Chuoi2 MOVSB ;Chuyển 1 byte Mỗi chuỗi có độ dài 10 byte nên phải lặp lại quá trình trên 10 lần thì mới sao chép xong. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 29
- Chú ý: Mỗi khi sao chép xong 1 byte thì phải tăng SI và DI lên 1 để nó trỏ tới ô nhớ tiếp theo. Sau mỗi lệnh MOVSB thì SI và DI sẽ được tự động tăng lên 1 nếu cờ DF = 0 (SI & DI sẽ tự động giảm đi 1 nếu cờ DF=1). Như vậy vấn đề là phải xoá được cờ DF trước khi thi hành lệnh MOVSB. Điều này được thực hiện nhờ lệnh CLD (Clear Direction Flag): LEA SI, Chuoi1 ;SI chứa offset của Chuoi1 LEA DI, Chuoi2 ;DI chứa offset của Chuoi2 CLD ;Xoá cờ định hướng: DF = 0 MOVSB ;Chuyển 1 byte Ngược lại với lệnh CLD là lệnh STD (Set Direction Flag), lệnh này sẽ thiết lập cờ DF=1. Ta có thể sử dụng lệnh STD để chuyển các byte dữ liệu theo chiều ngược lại. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 30
- TITLE Vi du Chuoi .MODEL SMALL .STACK 100H .DATA Chuoi1 DB ’Khoa CNTT$’ Chuoi2 DB 10 DUP (?) .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV ES, AX ;DS và ES chứa segment của đoạn dữ liệu MOV CX, 10 ;Số lần lặp LEA SI, Chuoi1 ;SI chứa offset của Chuoi1 LEA DI, Chuoi2 ;DI chứa offset của Chuoi2 CLD ;Xoá cờ định hướng: DF = 0 Lap: MOVSB ;Thực hiện lặp 10 lần LOOP Lap MOV AH, 9h ;Hiển thị chuỗi 2 để kiểm tra kết quả LEA DX, Chuoi2 INT 21h MOV AH, 4Ch ;Kết thúc INT 21h MAINBộ môn ENDP Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 31 END MAIN
- Ví dụ 2: Làm lại ví dụ 1 bằng cách dùng lệnh MOVSW. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 32
- Giải: Do lệnh MOVSW mỗi lần sao chép được 2 byte nên chỉ phải thực hiện lặp 5 lần, các lệnh cụ thể như sau: MOV CX, 5 ;Số lần lặp LEA SI, Chuoi1 ;SI chứa offset của Chuoi1 LEA DI, Chuoi2 ;DI chứa offset của Chuoi2 CLD ;Xoá cờ định hướng: DF = 0 Lap: MOVSW ;Thực hiện lặp 5 lần LOOP Lap Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 33
- b) Chuyển nhiều lần: Dạng 1: REP MOVSB Lệnh trên sao chép nhiều byte dữ liệu từ ô nhớ có địa chỉ DS:SI sang ô nhớ có địa chỉ ES:DI, số byte cần chuyển chứa trong thanh ghi CX. Dạng 2: REP MOVSW Lệnh trên sao chép nhiều word dữ liệu từ ô nhớ có địa chỉ DS:SI sang ô nhớ có địa chỉ ES:DI, số word cần chuyển chứa trong thanh ghi CX. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 34
- Ví dụ: Để thực hiện việc sao chép nội dung của Chuoi1 sang Chuoi2 trong ví dụ trước, ta có thể viết lại các lệnh như sau: MOV CX, 10 ;Số byte cần chuyển LEA SI, Chuoi1 ;SI chứa offset của Chuoi1 LEA DI, Chuoi2 ;DI chứa offset của Chuoi2 CLD ;Xoá cờ định hướng: DF = 0 REP MOVSB Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 35
- hoặc dùng các lệnh: MOV CX, 5 ;Số word cần chuyển LEA SI, Chuoi1 ;SI chứa offset của Chuoi1 LEA DI, Chuoi2 ;DI chứa offset của Chuoi2 CLD ;Xoá cờ định hướng: DF = 0 REP MOVSW Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 36
- Lệnh chuyển dữ liệu từ thanh ghi vào chuỗi (Store a String) Lệnh này còn được gọi là lệnh lưu chuỗi. Dạng 1: STOSB Lệnh trên chuyển nội dung của thanh ghi AL (1 byte) tới ô nhớ có địa chỉ ES:DI. Dạng 2: STOSW Lệnh trên chuyển nội dung của thanh ghi AX (2 byte) tới ô nhớ có địa chỉ ES:DI. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 37
- Ví dụ 1: Xét chuỗi sau đây: .DATA ChuoiKT DB 6 DUP (?) Hãy nhập một kí tự từ bàn phím rồi đặt kí tự đó vào phần tử đầu tiên của chuỗi. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 38
- Giải: Ta sẽ sử dụng chức năng số 1 của ngắt 21h để nhập kí tự, thanh ghi AL sẽ chứa mã ASCII của kí tự đó. Muốn chuyển kí tự từ AL vào phần tử đầu tiên của chuỗi bằng lệnh STOSB thì ES:DI phải chứa địa chỉ đầu của ChuoiKT, điều đó được thực hiện nhờ lệnh sau: LEA DI, ChuoiKT Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 39
- TITLE Vi du Chuoi .MODEL SMALL .STACK 100H .DATA ChuoiKT DB 6 DUP (?) .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV ES, AX ;DS và ES chứa segment của đoạn dữ liệu MOV AH, 1 ;Chức năng nhập kí tự của ngắt 21h INT 21h LEA DI, ChuoiKT ;DI chứa offset của ChuoiKT STOSB ;Chuyển kí tự từ AL vào đầu chuỗi MOV AH, 4Ch ;Kết thúc INT 21h MAIN ENDP END MAIN Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 40
- Ví dụ 2: Nhập một chuỗi 10 kí tự từ bàn phím. Giải: Để nhập 10 kí tự và cất nó vào một chuỗi trong bộ nhớ ta vẫn sử dụng phương pháp như ví dụ 1. Có một số điểm khác biệt như sau: + Phải có một vòng lặp với số lần lặp bằng 10. + Sau mỗi lệnh lưu chuỗi (STOSB) thì DI phải được tăng lên 1 để trỏ tới ô nhớ tiếp theo. Điều này được thực hiện nhờ lệnh xoá cờ định hướng (CLD). Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 41
- TITLE Vi du 2 .MODEL SMALL .STACK 100H .DATA ChuoiKT DB 10 DUP (?) .CODE MAIN PROC MOV AX, @DATA MOV DS, AX MOV ES, AX ;DS và ES chứa segment của đoạn dữ liệu MOV CX, 10 ;Số lần lặp bằng 10 LEA DI, ChuoiKT ;DI chứa offset của ChuoiKT CLD ;Xoá cờ định hướng: DF = 0 Lap: MOV AH, 1 ;Chức năng nhập kí tự của ngắt 21h INT 21h STOSB ;Chuyển kí tự từ AL vào đầu chuỗi ;DI được tự động tăng lên 1 LOOP Lap MOV AH, 4Ch ;Kết thúc INT 21h MAIN ENDP ENDBộ mônMAIN Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 42
- Lệnh chuyển dữ liệu từ chuỗi vào thanh ghi (Load a String) Lệnh này còn được gọi là lệnh nạp chuỗi. Dạng 1: LODSB Lệnh trên chuyển 1 byte dữ liệu từ ô nhớ có địa chỉ DS:SI vào thanh ghi AL. Dạng 2: LODSW Lệnh trên chuyển 1 word dữ liệu từ ô nhớ có địa chỉ DS:SI vào thanh ghi AX. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 43
- Ví dụ: Xét chuỗi sau đây: .DATA ChuoiKT DB ‘Viet Nam’ Hãy hiển thị chuỗi ra màn hình. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 44
- Giải: Vì chuỗi không kết thúc bằng dấu ‘$’ nên không thể hiện chuỗi bằng chức năng số 9 của ngắt 21h. Ta sẽ cho hiện lần lượt các kí tự của chuỗi bằng chức năng số 2 của ngắt 21h (các tham số: AH = 2, DL = Mã ASCII của kí tự cần hiển thị). Chuỗi có 8 kí tự nên cần 8 lần lặp. Đầu tiên cần chuyển từng kí tự từ chuỗi vào thanh ghi AL bằng lệnh LODSB, sau đó chuyển từ AL sang DL, rồi gọi chức năng số 2 của ngắt 21h. Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 45
- TITLE Vi du .MODEL SMALL .STACK 100H .DATA ChuoiKT DB ’Viet Nam’ .CODE MAIN PROC MOV AX, @DATA MOV DS, AX ;DS chứa segment của đoạn dữ liệu MOV CX, 8 ;Số lần lặp bằng 8 LEA SI, ChuoiKT ;SI chứa offset của ChuoiKT CLD ;Xoá cờ định hướng: DF = 0 Lap: LODSB ;Chuyển kí tự từ chuỗi vào AL ;SI được tự động tăng lên 1 (để trỏ tới kí tự tiếp theo) MOV DL, AL ;Chuyển kí tự vào DL MOV AH, 2 ;Hiển thị kí tự INT 21h LOOP Lap MOV AH, 4Ch ;Kết thúc INT 21h MAIN ENDP ENDBộ môn MAIN Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 46
- Hết Phần 2.4 Bộ môn Kỹ thuật máy tính & mạng – Khoa CNTT Kiến trúc máy tính 2 - 47