1. Tập thanh ghi: 4 thanh ghi đoạn: • CS (Code Segment): thanh ghi đoạn lệnh • DS (Data Segment): thanh ghi đoạn dữ liệu • SS (Stack Segment): thanh ghi đoạn ngăn xếp • ES (Extra Segment): thanh ghi đoạn dữ liệu phụ 3 thanh ghi con trỏ: • IP (Instruction Pointer): thanh ghi con trỏ lệnh • SP (Stack Pointer): con trỏ ngăn xếp • BP (Base Pointer): thanh ghi con trỏ cơ sở 4 thanh ghi dữ liệu: • AX (Accumulator): thanh chứa thanh ghi tích lũy • BX (Base): thanh ghi cơ sở • CX (Count): thanh ghi đếm • DX (Data): thanh ghi dữ liệu Mỗi thanh ghi này đều có thể được chia ra thành 2 nửa có khả năng sử dụng độc lập. Thanh ghi cờ ________________________________________
Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên Ôn tập Vi Xử Lý Phần 1 – Lý thuyết Khi học về lập trình hợp ngữ thì chủ yếu thao tác trên các thanh ghi và bộ nhớ stack, nên các anh chị phải nắm rõ chức năng của từng thanh ghi để có thể hiểu mà sử dụng các lệnh 1. Tập thanh ghi: 4 thanh ghi đoạn: • CS (Code Segment): thanh ghi đoạn lệnh • DS (Data Segment): thanh ghi đoạn dữ liệu • SS (Stack Segment): thanh ghi đoạn ngăn xếp • ES (Extra Segment): thanh ghi đoạn dữ liệu phụ 3 thanh ghi con trỏ: • IP (Instruction Pointer): thanh ghi con trỏ lệnh • SP (Stack Pointer): con trỏ ngăn xếp • BP (Base Pointer): thanh ghi con trỏ cơ sở 4 thanh ghi dữ liệu: • AX (Accumulator): thanh chứa - thanh ghi tích lũy • BX (Base): thanh ghi cơ sở • CX (Count): thanh ghi đếm • DX (Data): thanh ghi dữ liệu Mỗi thanh ghi này đều có thể được chia ra thành 2 nửa có khả năng sử dụng độc lập. Thanh ghi cờ 2. Các bước lập trình Các bước lập trình hợp ngữ cũng giống như các bước lập trình trong ngôn ngữ bậc cao, cũng gồm những bước như sau: • Bước 1: Phát biểu bài toán • Bước 2: Xây dựng thuật giải 1 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên • Bước 3: Viết mã chương trình • Bước 4: Dịch và sửa lỗi cú pháp • Bước 5: Chạy thử và hiệu chỉnh chương trình 3. Cấu trúc chung của lập trình hợp ngữ .MODEL small .STACK 100h .DATA ; Khai báo các biến ở đây .CODE ; Các lệnh chương trình ghi ở đây END 4. Các lệnh cơ bản trong lập trình hợp ngữ 4.1. Lệnh MOV - Cú pháp: MOV <đích>,<nguồn> - Ý nghĩa: lệnh này dùng để sao chép dữ liệu từ toán hạng nguồn vào toán hạng đích - Lưu ý: • toán hạng đích phải đủ để nhận dữ liệu • không được sao chép hằng vào thanh ghi đoạn • 2 toán hạng không đồng thời là vùng nhớ hoặc thanh ghi đoạn - Ví dụ: MOV AX,vungnho ; AX <- vungnho MOV AX,BX ; AX <- BX MOV AH,'A' ; AX <- 41h MOV AX,'A' ; AX <- 0041h MOV DX, OFFSET MSG ; DX <- địa chỉ ô (MSG) MOV DX,SEG MSG ; DX <- địa chỉ đoạn (MSG) 4.2. Lệnh XCHG - Cú pháp: XCHG <đích>,<nguồn> - Ý nghĩa: lệnh này dùng để hoán chuyển dữ liệu của 2 toán hạng đích và nguồn. - Lưu ý: • hai toán hạng có thể là thanh ghi hay vùng nhớ cùng kích thước • không được sao chép hằng vào thanh ghi đoạn • 2 toán hạng không đồng thời là vùng nhớ 2 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên - Ví dụ: XCHG AX,vungnho ; AX <-> vungnho XCHG AL,BH ; AL <-> BH 4.3. Lệnh ADD và SUB - Cú pháp: ADD <đích>,<nguồn> SUB <đích>,<nguồn> - Ý nghĩa: 2 lệnh này dùng để thêm/bớt nội dung trong toán hạng đích với toán hạng nguồn - Lưu ý: • kết quả chứa trong toán hạng đích • toán hạng nguồn có thể là hằng, thanh ghi hoặc vùng nhớ • toán hạng đích có thể là thanh ghi hoặc vùng nhớ • 2 toán hạng không đồng thời là vùng nhớ • 2 toán hạng có thể có dấu (bù 2) hoặc không dấu - Ví dụ: ADD AX,BX ; AX <- AX+BX ADD AX,vungnho ; AX <- vungnho ADD AX,2 ; AX <- AX+2 SUB AX,BX ; AX <- AX-BX SUB AX,vungnho ; AX <- AX-BX SUB AX,2 ; AX <- AX-2 4.4. Lệnh INC và DEC - Cú pháp: INC <đích> DEC <đích> - Ý nghĩa: 2 lệnh này dùng để tăng/giảm nội dung trong toán hạng đích - Lưu ý: toán hạng đích có thể là thanh ghi hoặc vùng nhớ - Ví dụ: INC AX ; AX <- AX+1 INC vungnho ; vungnho <- vungnho+1 DEC AX ; AX <- AX+1 DEC vungnho ; vungnho <- vungnho-1 4.5. Lệnh NEG - Cú pháp: NEG <đích> 3 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên - Ý nghĩa: lệnh này dùng để đổi dấu (dương thành âm, âm thành dương) của toán hạng đích - Lưu ý: • toán hạng đích có thể là thanh ghi hoặc vùng nhớ • nếu toán hạn đích là giá trị âm nhỏ nhất (-128 hay -32768) thì sau lệnh này sẽ không thay đổi giá trị - Ví dụ: NEG AX ; AX <- (-AX) NEG vungnho ; vungnho <- (-vungnho) MOV AX,-32768 ; AX <- (-32768) NEG AX ; AX <- (-32768) MOV DL,-128 ; DL <- (-128) NEG DL ; DL <- (-128) 4.6. Lệnh INT 21h - Lệnh này là một trình con của hệ điều hành. Trình con này có nhiều chức năng khác nhau tuỳ theo trị của thanh ghi AH. Sau đây là một số chức năng (hàm) thông dụng. • AH = 1 : ngắt 21h thực hiện nhập một ký tự từ bàn phím, mã ASCII ký tự nhận được (hoặc 0 nếu là phím điều khiển) chứa trong AL. Nếu ký tự thông thường được gõ vào thì sẽ hiển thị trên màn hình. Lệnh viết như sau: MOV AH,1 ; chọn chức năng 1 INT 21h ; chờ người sử dụng nhập vào 1 ký tự và lưu vào AL • AH = 2 : ngắt 21h thực hiện xuất ký tự chứa trong thanh ghi DL ra màn hình MOV AH,2 ; chọn chức năng 2 MOV DL,'A' ; chọn ký tự hiển thị là A INT 21h ; hiển thị ký tự • AH = 9 : ngắt 21h thực hiện xuất chuỗi ký tự có địa chỉ ô chứa trong thanh ghi DX (và địa chỉ đoạn chứa trong DS) ra màn hình. Chú ý chuỗi ký tự phải kết thúc bằng ký tự $ .Data MSG DB "Chuoi can hien thi$" .Code ; Dua dia chi doan du lieu vao DS MOV AX,@Data MOV DS,AX ; Hien thi cau chao MOV AH,9 LEA DX,AX INT 21h 4 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên • AH = 4Ch : ngắt 21h thực hiện việc kết thúc chương trình và trả điều khiển về cho hệ điều hành. Lệnh viết như sau: MOV AH,4Ch ; chon chuc nang 4Ch INT 21h ; ket thuc chuong trinh 4.6. Lệnh INT 10h Lệnh này dùng để xoá màn hình MOV AX,3 INT 10h Bài tập Phần 1 - Bài tập của phần này gồm có 2 phần: • Lý thuyết • Bài tập I. Lý thuyết 1. Tính địa chỉ tuyệt đối tương ứng với địa chỉ tương đối A51h:CD90h Gỉai: - Địa chỉ tương đối có dạng: <địa chỉ đoạn>:<địa chỉ ô> - Muốn đổi từ địa chỉ tương đối sang địa chỉ tuyệt đối thì ta áp dụng công thức: Địa chỉ tuyệt đối = địa chỉ đoạn * F + địa chỉ ô Vậy địa chỉ tuyệt đối = A51h * 16 + CD90h = A510h + CD90h = 172A0h 2. Tính địa chỉ tương đối tương ứng với địa chỉ tương đối A25h:CD09h Gỉai: tương tự cách tính trên. 3. Với địa chỉ tuyệt đối 4A37Bh, hãy tính: a. Địa chỉ ô tương ứng với đoạn 40FFh b. Địa chỉ đoạn tương ứng với ô 123Bh Gỉai: Cũng áp dụng công thức trên a. địa chỉ ô = địa chỉ tuyệt đối - địa chỉ đoạn * 16 = 4A37Bh - 40FFh * 16 = 938Bh b. địa chỉ đoạn = (địa chỉ tuyệt đối - địa chỉ ô) / 16 = (4A37Bh - 123Bh) / 16 = 4914h 4. Gỉa sử các byte ở địa chỉ từ 0 đến 4 có trị (thập lục) là AB, CD, EF, 01, 23. Hãy cho biết trị của từ ở địa chỉ 2 Gỉai: Ta có hình ảnh sau: 5 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên Như vậy ta kết luận ở địa chỉ 2 ta có nội dung là EF 5. Gỉa sử chuỗi "12A45" được lưu trữ trong bộ nhớ từ địa chỉ 0 đến 4. Hãy cho biết nội dung của vùng nhớ (dạng thập lục) từ địa chỉ 0 đến 4 Gỉai: tương tự như câu 4: 05h, 04h, 0Ah, 02h, 01h 6. Viết lệnh định nghĩa từ WORDV có trị -1 Gỉai: WORDV DB FFd 7. Viết lệnh định nghĩa hằng MSG có trị là 'DAY LÀ THONG BAO' Gỉai: MSG EQU 'DAY LA THONG BAO' 8. Viết nhóm lệnh tương đương với các lệnh gán như sau: a. B = B - A - 1 b. A = B c. A = 10 - A d. A = B - A * 2 e. C = 2 * B - 3 * A Gỉai: a. B = B - A - 1 MOV AX,A ; AX <- A DEC AX ; AX <- A - 1 SUB B,AX ; B <- B - A - 1 b. A = B MOV AX,B ; AX <- B MOV A,AX ; A <- B c. A = 10 - A NEG A ; A <- (-A) ADD A,10 ; A <- (-A) + 10 d. A = B - A * 2 MOV AX,A ; AX <- A e. C = 2 * B - 3 * A MOV AX,B ; AX <- B 6 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên NEG AX ; AX <- (-A) SUB AX,AX ; AX <- (- A) - A ADD AX,B ; AX <- (- 2A) + B MOV A,AX ; A <- (-2A) + B ADD AX,AX ; AX <- B + B MOV C,AX ; C <- 2B MOV AX,A ; AX <- A ADD AX,AX ; AX <- A + A ADD AX,AX ; AX <- 2A + A NEG AX ; AX <- (-3A) ADD C,AX ; C <- 2B + (-3A) II. Thực hành 1. Viết chương trình hiển thị câu chào sau trên màn hình: Cha`o ba.n! Gỉai: Code: ;==================================================================== ============= ; Noi dung: Viet chuong trinh hien thi cau chao sau len man hinh: Cha`o ba.n! ; Ten file: bt01.asm ; Ngay tao: 17/03/2009 - 00:15 ;==================================================================== ============= .model small .stack 100h .data ; Khai bao cac bien tai day CR EQU 13 LF EQU 10 Mess db 'Cha`o ba.n!',CR,LF,'$' .code main proc ; Dua du lieu vao thanh ghi DS mov ax,@data mov ds,ax ; Hien thi Mess mov ah,9 lea dx,Mess int 21h ; Exit to DOS mov ah,4ch int 21h main endp end main 2. Viết chương trình hiển thị 3 câu chào sau trên màn hình: Hello, world! Hello, solar system! Hello, universe! 7 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên Gỉai: Code: ;==================================================================== ============= ; Noi dung: Viết chương trình hiển thị 3 câu chào sau trên màn hình: ; Hello, world! ; Hello, solar system! ; Hello, universe! ; Ten file: bt02.asm ; Ngay tao: 17/03/2009 - 00:25 ;==================================================================== ============= .model small .stack 100h .data ; Khai bao cac bien tai day CR EQU 13 LF EQU 10 Mess db CR,LF,'Hello, world!' db CR,LF,'Hello, solar system!' db CR,LF,'Hello, universe!$' .code main proc ; Dua du lieu vao thanh ghi DS mov ax,@data mov ds,ax ; Hien thi Mess mov ah,9 lea dx,Mess int 21h ; Exit to DOS mov ah,4ch int 21h main endp end main 3. Viết chương trình nhập một ký tự và hiển thị ở dòng kế tiếp. Kết quả có dạng: Hay nhap mot ky tu: A Ky tu da nhap : A Code: ;==================================================================== =============== ; Noi dung: Viet chuong trinh nhap vao mot ky tu va hien thi lai o dong tiep theo. Ket qua co dang: ; Hay nhap mot ky tu: A ; Ky tu da nhap : A ; Ten file: bt03.asm ; Ngay tao: 17/03/2009 - 00:31 ; Huong dan: ; 1. Khai bao du lieu: ; TBao1 db 13,10,'Hay nhap mot ky tu: $' ; Tbao2 db 13,10,'Ky tu da nhap : $' ; 2. Thuat giai: ; - Hien thi TBao1 8 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên ; - Nhap mot ky tu ; - Dua gia tri vao thanh ghi bl ; - Hien thi TBao2 ; - Hien thi KyTu ;==================================================================== =============== .model small .stack 100h .data ; Khai bao cac bien tai day CR EQU 13 LF EQU 10 TBao1 db CR,LF,'Hay nhap mot ky tu: $' TBao2 db CR,LF,'Ky tu da nhap : $' .code main proc ; Dua du lieu vao thanh ghi DS mov ax,@data mov ds,ax ; Hien thi TBao1 mov ah,9 lea dx,TBao1 int 21h ; Nhap vao mot ky tu mov ah,1 int 21h ; Dua ky tu vao thanh ghi bl mov bl,al ; Hien thi TBao2 mov ah,9 lea dx,TBao2 int 21h ; Hien thi KyTu mov ah,2 mov dl,bl int 21h ; Exit to DOS mov ah,4ch int 21h main endp end main 4. Viết chương trình nhập một ký tự và hiển thị ký tự đứng trước, đứng sau theo thứ tự mã ASCII. Kết quả có dạng: Hay nhap mot ky tu: B Ky tu dung truoc : A Ky tu dung sau : C Gỉai Code: ;==================================================================== =============== ; Noi dung: Viet chuong trinh nhap vao mot ky tu va hien thi ky tu dung truoc, ; dung sau theo thu tu ma ASCII. Ket qua co dang: ; Hay nhap mot ky tu: B ; Ky tu dung truoc : A 9 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên ; Ky tu dung sau : C ; Ten file: bt04.asm ; Ngay tao: 17/03/2009 - 08:37 ; Huong dan: ; 1. Khai bao du lieu: ; TBao1 db 13,10,'Hay nhap mot ky tu: $' ; Tbao2 db 13,10,'Ky tu dung truoc : $' ; TBao3 db 13,10,'Ky tu dung sau : $' ; 2. Thuat giai: ; - Hien thi TBao1 ; - Nhap mot ky tu ; - Dua gia tri vao thanh ghi bl ; - Hien thi TBao2 ; - Giam 1 gia tri ; - Hien thi TBao3 ; - Tang 2 gia tri ;==================================================================== =============== .model small .stack 100h .data ; Khai bao cac bien tai day CR EQU 13 LF EQU 10 TBao1 db CR,LF,'Hay nhap mot ky tu: $' TBao2 db CR,LF,'Ky tu dung truoc : $' TBao3 db CR,LF,'Ky tu dung sau : $' .code main proc ; Dua du lieu vao thanh ghi DS mov ax,@data mov ds,ax ; Hien thi TBao1 mov ah,9 lea dx,TBao1 int 21h ; Nhap vao mot ky tu mov ah,1 int 21h ; Dua ky tu vao thanh ghi bl mov bl,al ; Hien thi TBao2 mov ah,9 lea dx,TBao2 int 21h ; Hien ky tu va giam 1 gia tri mov ah,2 mov dl,bl dec dl int 21h ; Hien thi TBao3 mov ah,9 lea dx,TBao3 int 21h ; Hien ky tu va tang 1 gia tri mov ah,2 mov dl,bl inc dl int 21h ; Exit to DOS mov ah,4ch 10 [...]... LoopRepeat ; nhảy nếu ký tự không phải là Enter 5 Cấu trúc WHILE DO : CMP , ; điều kiện đúng Jđksai ; điều kiện sai thì dừng ; thực hiện công vi c trong vòn lặp JMP : ; thực hiện công vi c của nhãn sai 21 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên II Giới thiệu một số lệnh nâng cao 1 Lệnh luận lý - Các lệnh luận lý AND, OR, XOR, NOT... lớn hơn hoặc bằng/không nhỏ hơn (SF or OF) = 0 JLE/JNG Nhảy nếu nhỏ hơn hoặc bằng/không nhỏ hơn ((SF xor OF) or ZF) = 1 JG/JNLE Nhảy nếu lớn hơn/không nhỏ hơn hoặc bằng ((SF xor OF) or ZF) = 0 Lệnh nhảy khác JE/JZ Nhảy nếu bằng/nhảy nếu bằng không ZF = 1 JNE/JNZ Nhảy nếu không bằng/Nhảy nếu khác không ZF = 0 JP/JPE PF = 1 Nhảy nếu có bit kiểm/có bit kiểm chẵn JNP/JPO Nhảy nếu không có bit kiểm/có bit... lệnh nhảy được dùng 18 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên Lệnh nhảy theo kết quả không dấu JB/JNAE Nhảy nếu dưới/không trên hoặc bằng CF = 1 JAE/JNB Nhảy nếu trên hoặc bằng/không dưới CF = 0 JBE/JNA Nhảy nếu dưới hoặc bằng/không trên (CF or ZF) = 1 JA/JNBE Nhảy nếu trên/không dưới hoặc bằng (CF or ZF) = 0 Lệnh nhảy theo kết quả có dấu JL/JNGE Nhảy nếu nhỏ hơn/không lớn hơn hoặc bằng (SF or OF)... privilege level) - Vị trí của các cờ như sau: 15 14 13 12 11 10 9 8 7 6 NT IOPL OF DF IF TF SF ZF 54 AF 32 10 PF CF - Sau đây là phần diễn giải một số cờ thông dụng Cờ Đặt Xoá Ý nghĩa OF OV NV Tràn/Không tràn (Overflow/Not overflow) DF DN UP Xuống/Lên (Down/Up) IF EI DI Cho ngắt/Cấm ngắt (Enable/Disable) SF NG PL Âm/Dương (Negative/Plus) ZF ZR NZ Không/Khác không (Zero/Not zero) AF AC NA Gởi phụ/Không... ; nhảy tới nhãn sai ; thực hiện CV1 : ; thực hiện công vi c sai Với J ta cần nhớ 1 vài từ ký hiệu như sau: • • J : Jump (nhảy) N : Not (không ) • Z : cờ ZF; C : cờ CF; O : cờ OF; S : cờ SF; P : cờ PF • A : Above (lớn hơn – so sánh số không dấu) • B : Below (nhỏ hơn – so sánh số không dấu) • G : Greater (lớn hơn – so sánh số có dấu) • L : Less (lớn hơn – so sánh... tràn tức thì (có dấu) của kết quả vượt quá phạm vi giá trị cho phép Ví dụ một từ 2 bytes có thể chứa trị từ khoảng từ -32768 đến 32767 (có dấu), nếu vượt quá phạm vi này sẽ xảy ra tràn, lúc đó cờ OF = 1 - Ví dụ: MOV AL,1 ; AL . Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên Ôn tập Vi Xử Lý Phần 1 – Lý thuyết Khi học về lập trình hợp ngữ thì chủ yếu thao tác trên. INT 10h Lệnh này dùng để xoá màn hình MOV AX,3 INT 10h Bài tập Phần 1 - Bài tập của phần này gồm có 2 phần: • Lý thuyết • Bài tập I. Lý thuyết 1. Tính địa chỉ tuyệt đối tương ứng với địa chỉ tương. , ZF = 0 Bài tập Phần 2 15 Trịnh Công Sơn k44dvt01 DHKTCN Thái Nguyên Phần bài tập của chương này thì gồm có 2 phần: - Phần xác định dạng chế độ định vị của các câu lệnh - Các bài tập xác định