Kiến trúc máy tính phần ii hợp ngữ - chương 7 nhóm lệnh chuyển điều khiển

Nhómlệnh chuyển điều khiển • Lệnh nhảy không điều kiện JMP • Lệnh nhảy có điều kiện JB / JNAE JL / JNGE JBE / JNA JLE / JNG JA / JNBE JG / JNLE JAE / JNB JLE / JNL JE/ JZ JNE/ JNZ

pdf40 trang | Chia sẻ: longpd | Lượt xem: 2424 | Lượt tải: 5download
Bạn đang xem trước 20 trang tài liệu Kiến trúc máy tính phần ii hợp ngữ - chương 7 nhóm lệnh chuyển điều khiển, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
Chương 7 NHÓM LỆNH CHUYỂN ĐiỀU KHIỂN Nhóm lệnh chuyển điều khiển • Lệnh nhảy không điều kiện JMP • Lệnh nhảy có điều kiện JB / JNAE JL / JNGE JBE / JNA JLE / JNG JA / JNBE JG / JNLE JAE / JNB JLE / JNL JE/ JZ JNE/ JNZ Số không dấu Số có dấu Nhảy theo kiểu không dấu Nhảy theo kiểu có dấu Nhảy theo kiểu đơn Nhóm lệnh chuyển điều khiển(t.t) • Lệnh so sánh CMP • Lệnh lặp LOOP • Các lệnh khác JP/JNP, JS/JNS, JO/JNO JC / JNC, JZ/ JNZ JCXZ Lệnh JMP • Dạng lệnh : JMP shortlabel JMP mem16 JMP nearlabel JMP mem32 JMP farlabel JMP reg16 • Giải thích : shortlabel : IP ← IP + độ dời nearlabel : IP ← địa chỉ farlabel : CS ← địa chỉ segment IP ← địa chỉ offset Lệnh JMP (t.t.) • Dạng lệnh : JMP shortlabel JMP mem16 JMP nearlabel JMP mem32 JMP farlabel JMP reg16 • Giải thích : reg16 : IP ← reg16 mem16 : IP ← [địa chỉ +1,địa chỉ] mem32 : CS ← [địa chỉ +3,địa chỉ+2] IP ← [địa chỉ +1,địa chỉ] Lệnh JMP (t.t.) • Lệnh nhảy đến nhãn ngắn shortlabel là lệnh nhảy tương đối. Nơi đến phải nằm trong phạm vi từ -128 đến +127 so với vị trí của lệnh nhảy. Toán hạng nguồn trong lệnh là số có dấu để cộng thêm vào thanh ghi IP. • Ví dụ : JMP SHORT 18h JMP 0F008h JMP DWORD PTR [3000h] Lệnh nhảy có điều kiện • Dạng lệnh : Jcond shortlabel • Giải thích : Nếu thỏa điều kiện thì nhảy, ngược lại không làm gì cả (qua lệnh kế). • Lệnh nhảy có điều kiện dùng trạng thái các cờ để làm điều kiện Các lệnh nhảy có điều kiện Ví dụ MOV CX,3 ; thực hiện một vòng lặp làm 3 lần. MOV AX,0 Nhan: ADD AX,12 DEC CX JNZ Nhan ; nhảy đến lệnh tại vị trí “Nhan” nếu CX ≠ 0. MOV [3000h],AX Lệnh CMP • Dạng lệnh : CMP reg,reg CMP reg,immed CMP mem,reg CMP mem,immed CMP reg,mem CMP accum,immed • Giải thích : phép so sánh thực hiện bằng cách trừ toán hạng đích cho toán hạng nguồn, không lưu lại kết quả mà chỉ giữ lại tác động của phép trừ lên các cờ. • Ví dụ : CMP AL,8 ; AL - 8 CMP WORD PTR [1000h], 3 ; [1001h,1000h] - 3 Lệnh LOOP • Dạng lệnh: LOOP shortlabel • Giải thích : giảm CX, lặp (nhảy) nếu CX ≠ 0 Lặp vòng không điều kiện với CX giữ số lần lặp. • Ví dụ: MOV CX,3 MOV AX,0 Nhan: ADD AX,12 LOOP Nhan MOV [3000h],AX LOOPE/LOOPZ • Dạng lệnh: LOOPE shortlabel LOOPZ shortlabel • Giải thích: giảm CX, lặp vòng (nhảy) nếu CX≠0 và ZF = 1 LOOPNE/LOOPNZ • Dạng lệnh: LOOPNE shortlabel LOOPNZ shortlabel • Giải thích: giảm CX, lặp vòng (nhảy) nếu CX≠0 và ZF = 0 Lệnh JCXZ • Dạng lệnh : JCXZ shortlabel • Giải thích : Nếu CX = 0 thì nhảy • Ví dụ: tìm vị trí xuất hiện giá trị 0 đầu tiên trong mảng 100 byte ở địa chỉ DS:SI MOV CX,100 MOV DI,SI DEC DI lap: INC DI CMP byte ptr [DI],0 LOOPNE lap JCXZ timthay ;xử lý không tìm thấy ;…. JMP ketthuc timthay: ;xử lý …. ;… ketthuc: Lệnh lặp Cấu trúc tuần tự • Cú pháp: – Lệnh 1 – Lệnh 2 – …… – Lệnh n Cấu trúc If – Then Cấu trúc If – Then - Else Cấu trúc Case Cấu trúc lập For - Do Cấu trúc lặp While - Do Cấu trúc lặp Repeat - Until Bài tập 1. Viết đoạn chương trình hợp ngữ tìm giá trị lớn nhất của 2 số 16 bit nằm trong 2 thanh ghi AX, BX. Kết quả lưu vào thanh ghi DX. BTVN 1. Viết đoạn chương trình hợp ngữ tìm giá trị lớn nhất của 3 số 16 bit nằm trong 3 thanh ghi AX,BX,CX. Kết quả chứa vào thanh ghi DX. Bài tập (t.t.) 2.Viết chương trình chương trình nhập vào một ký tự, cho biết ký tự này là chữ hoa, chữ thường hay không là chữ cái. 3.Viết chương trình nhập vào một chuỗi các ký tự, in ra màn hình chuỗi mới với các ký tự thường đổi thành các ký tự hoa. Chương trình con tên_CTC PROC ;thân chương trình con ;… RET tên_CTC ENDP Gọi chương trình con: CALL tên_CTC Ví dụ • Viết chương trình con tìm max của 2 số 8bit – Input: AL, AH chứa 2 giá trị 8bit cần tìm – Output: DL =MAX(AH,AL) • Giải thuật? MAX PROC CMP AH,AL JA lon_hon ;den duoc day co nghia AH <=AL MOV DL,AL JMP ketthuc lon_hon: MOV DL,AH ketthuc: RET MAX ENDP Thử nghiệm CTC .Model tiny .Code ORG 100h start: MOV AH,5 MOV AL,7 ; thử với AH=5, AL=7 CALL max ; gọi CTC Max INT 20h ; ket thuc chuong trinh ;----------chuong trinh con dat o day----------------- Max PROC ;code cua chuong trinh con Max ; ….. Max ENDP END start
Tài liệu liên quan