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

Hợp ngữ - Chương 2: Các đại chỉ Logic và điều khiển phần 1

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

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

Phạm vi của lệnh nhảy có điều kiện: cấu trúc mã máy của lệnh nhảy có điều kiện đòi hỏi nhãn đích phải đứng trước lệnh nhảy không quá 126 byte hoặc đứng sau không quá 127 byte...

Chủ đề:
Lưu

Nội dung Text: Hợp ngữ - Chương 2: Các đại chỉ Logic và điều khiển phần 1

  1. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy có điều kiện: * Phạm vi của lệnh nhảy có điều kiện: cấu trúc mã máy của lệnh nhảy có điều kiện đòi hỏi nhãn đích phải đứng trước lệnh nhảy không quá 126 byte hoặc đứng sau không quá 127 byte * Có 3 loại lệnh nhảy có điều kiện: + Các lệnh nhảy có dấu: được dùng khi kết quả trả về là các số có dấu + Các lệnh nhảy không dấu: được dùng khi kết quả trả về là các số không dấu + Các lệnh nhảy điều kiện đơn: điều kiện phụ thuộc vào 1 cờ riêng biệt
  2. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy có điều kiện: * Các lệnh nhảy có dấu: Ký hiệu Chức năng Điều kiện nhảy Nhảy nếu lớn hơn JG/JNLE ZF=0 và SF=0F Nhảy nếu lớn hơn hoặc bằng JGE/JNL SF=0F Nhảy nếu nhỏ hơn JL/JNGE SF0F Nhảy nếu nhỏ hơn hoặc bằng JLE/JNG ZF=1 hay SF=0F
  3. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy có điều kiện: * Các lệnh nhảy không dấu: Ký hiệu Chức năng Điều kiện nhảy Nhảy nếu lớn hơn JA/JNBE CF=0 và ZF=0 Nhảy nếu lớn hơn hoặc bằng JAE/JNB CF=0 Nhảy nếu nhỏ hơn JB/JNAE CF=1 Nhảy nếu nhỏ hơn hoặc bằng JBE/JNA CF=1 hay ZF=1
  4. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy có điều kiện: * Các lệnh nhảy điều kiện đơn: Ký hiệu Chức năng Điều kiện nhảy Nhảy nếu bằng/Nhảy nếu bằng 0 JE/JZ ZF=1 Nhảy nếu không bằng/Nếu khác 0 JNE/JNZ ZF=0 Nhảy nếu có nhớ JC CF=1 Nhảy nếu không nhớ JNC CF=0 Nhảy nếu tràn số JO OF=1 Nhảy nếu không tràn JNO OF=0 Nhảy nếu dấu âm JS SF=1 Nhảy nếu dấu dương JNS SF=0 Nhảy nếu cờ chẵn JP/JPE PF=1 Nhảy nếu cờ lẻ JNP/JPO PF=0
  5. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy có điều kiện: Ví dụ: Viết chương trình hiển thị toàn bộ tập hợp các ký tự của hệ IBM ;trả quyền điều khiển TITLE BAITAP4:IBM .MODEL SMALL MOV AH,4Ch .STACK 100h INT 21h .CODE MAIN ENDP MAIN PROC END MAIN MOV AH,2 ; số ký tự MOV CX,256 MOV DL,0 ; NULL PRINT_LOOP INT 21h INC DL DEC CX JNZ PRINT_LOOP
  6. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Các lệnh nhảy có điều kiện: Lệnh CMP Lệnh CMP dùng để so sánh giữa 2 toán tử bằng cách lấy toán tử đích trừ đi toán tử nguồn , Cú pháp: CMP Chú ý: + Thường được sử dụng chung với lệnh nhảy có điều kiện + CMP giống lệnh SUB nhưng toán hạng đích không bị thay đổi giá trị. Ví dụ: Với AX=7FFFh, BX=0001h ;điều kiện nhảy AX>BX CMP AX,BX ;nếu lớn hơn thì nhả đến nhãn NHAN JG NHAN NHAN:
  7. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Các lệnh điều khiển rẻ nhánh Lệnh nhảy không điều kiện: Lệnh JMP Lệnh JMP dùng để nhảy không điều kiện, dùng để khắc phục giới hạn của lệnh nhảy có điều kiện: Cú pháp: JMP Ví dụ: MOV CX,10 TOP: ;giảm bộ đếm DEC CX ;đúng lặp lại nếu CX> JNZ BOTTOM ;sai  nhảy đến nhãn EXIT JMP EXIT BOTTOM: JMP TOP EXIT: MOV AX,BX
  8. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc rẻ nhánh IF…THEN….ELSE Cấu trúc rẻ nhánh IF…THEN…..ELSE biểu diễn như sau: Ví dụ: Nếu AX>0 thì AX = AX-1, ngược lại (AX0 THEN AX = AX - 1 Đúng ELSE AX = AX + 1 Lệnh 1 Lệnh 2 END IF CMP AX,0 ;AX>0? ;AX
  9. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc CASE Cấu trúc rẻ nhánh CASE biểu diễn như sau: Phát biểu Kiểm tra giá trị Không có giá trị nào Giá trị k Giá trị 1 Giá trị 2 Tập lệnh 1 Tập lệnh 2 Tập lệnh k Tập lệnh
  10. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc CASE Ví dụ: Nếu AX>0 thì BX = 1, nếu AX
  11. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc lặp FOR Vòng lặp FOR là cấu trúc lặp lại các dòng lệnh với số lần xác định trước, thường dùng biến đếm để điều khiển) Ví dụ: Hiển thị lên màn hình 80 dấu * Khởi tạo đếm Mô tả : FOR 80 lần DO Hiển thị dấu * Lệnh END_FOR ;Khởi tạo đếm MOV CX,80 ;In dấu * Đếm=đếm-1 MOV AH,2 DL,’*’ MOV FOR_: Sai JCXZ SKIP Đếm=0? INT 21h ;lặp lại LOOP FOR_ Đúng SKIP:
  12. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc lặp WHILE Vòng lặp WHILE phụ thuộc vào điều kiện kiểm tra ngay từ đầu. Khi điều kiện còn thỏa mãn còn lặp. Ví dụ: Đếm số ký tự trong một dòng M ô tả: Sai Điều kiện Khởi tạo bộ đếm =0 Đọc một ký tự Đúng WHILE ký tự ký tự đầu dòng DO Lệnh đếm=đếm+1 đọc một ký tự END_WHILE
  13. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc lặp WHILE Ví dụ: Đếm số ký tự trong một dòng ;DX đếm số ký tự MOV DX,0 ;Đọc 1 ký tự MOV AH,1 INT 21h WHILE_: ;có phải ký tự đầu dòng không? CMP AL,0Dh ;Đúng Thoát vòng lặp JE END_WHILE ;Không đúng  Tăng đếm lên 1 INC DX ;Đọc lại 1 ký tự INT 21h ;lặp lại JMP WHILE_ END_WHILE:
  14. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Cấu trúc lặp REPEAT Vòng lặp REPEAT thi hành ít nhất 1 lần rồi mới kiểm tra điều kiện, nếu thỏa mãn thì tiếp tục lặp Ví dụ: Đọc vào các ký tự, chỉ dừng lại khi gặp ký tự trắng Mô tả : Lệnh REPEAT Đọc một ký tự UNTIL ký tự trắng Sai Điều kiện ;Đọc ký tự MOV AH,1 Đúng REPEAT_: INT 21h AL,’ ’ CMP ; Không đúng JNE REPEAT_
  15. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Ví dụ: Viết chương trình cho nhập 1 ký tự từ màn hình và xuất câu thông báo chào buổi sáng, buổi trưa hay buổi chiều tương ứng với ký tự nhậpvào là 'S', 's', 'T', 't', 'C', 'c'. AL,’S’ BUOI_SANG: CMP .MODEL SMALL LEA DX,CBS JE BUOI_SANG .STACK 100h AL,’s’ MOV AH,9 CMP INT 21h JE BUOI_SANG .DATA JMP THOAT CBS DB "CHAO BUOI SANG$" AL,’T’ CMP CBT DB "CHAO BUOI TRUA$" BUOI_TRUA: JE BUOI_TRUA CBC DB "CHAO BUOI CHIEU$" LEA DX,CBT AL,’t’ CMP .CODE MOV AH,9 JE BUOI_TRUA INT 21h MOV AX, @DATA JMP THOAT MOV DS, AX AL,’C’ CMP JE BUOI_CHIEU ;nhập một ký tự BUOI_CHIEU: AL,’c’ CMP LEA DX,CBC JE BUOI_CHIEU MOV AH,9 MOV AH,1 INT 21h INT 21h JMP THOAT END
  16. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN Ví dụ: Viết chương trình hiển thị lên màn hình hình chữ nhật tô kín dấu * với 10 cột và 5 hàng: ********** ********** ********** ********** ********** Mô tả : for_j: .stack 100h for_i: For I=1 to 5 mov dl,'*' .data mov dl,0ah For J=1 to 10 int 21h i db - 1 int 21h In(‘*’) inc j j db - 1 mov dl,0Dh End_For_J cmp j,20 int 21h End_For_I jl for_j .code jge for_i mov j ,0 mov ax,@data inc i exit: mov ds,ax cmp i,5 mov ah,4ch jl for_j int 21h mov ah,2 jge exit end
  17. Chöông 2: CAÙC CHÆ THÒ LOGIC VAØ ÑIEÀU KHIEÅN BÀI TẬP Viết chương trình: 1. Nhập vào 1 ký tự, nếu không phải là một số thì nhập lại, nếu là số thì in số đó ra màn hình 2. Nhập vào 2 ký tự số (19), Tìm số lớn nhất và số nhỏ nhất và in kết quả ra màn hình 3. Nhập vào 1 ký tự chữ thường. Xuống dòng và in ra các ký tự từ a đến ký tự đó . 4. Nhập vào 1 ký tự số (19). Tính tổng tất cả các số từ số đó đến 9
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

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