1. Trang chủ
  2. » Giáo Dục - Đào Tạo

hoa cuong có thì sử dụng – thích thì lao vào

34 6 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 34
Dung lượng 388 KB

Nội dung

 Nếu không thì tiếp tục thực hiện lệnh tiếp theo  JNZ == jump if not zero.  Điều kiện[r]

(1)(2)

Nhắc lại phương pháp định địa chỉ

 Tức thời (trực hằng)

 Toán hạng lệnh

 Thanh ghi

 Toán hạng ghi

 Trực tiếp

 Địa lệnh địa ô nhớ toán hạng

 Gián tiếp qua ghi

 Thanh ghi chứa địa ô nhớ tốn hạng

 Gián tiếp nhớ

 Địa lệnh địa ô nhớ toán hạng

 Chỉ số (dịch chuyển)

 Địa toán hạng tổng nội dung ghi độ dời

 Tương đối

 Tổng nội dung PC độ dời

(3)

Thanh ghi CPU 8086

 14 ghi 16 bit  nhóm

 Thanh ghi đoạn

 CS (code segment), DS (data segment),

SS (stack segment), ES (extra segment)  Thanh ghi trỏ

 IP (instruction pointer), SP (stack pointer),

BP (base pointer)  Thanh ghi số

 SI (source index), DI (Destination index)

(4)

Thanh ghi đa dụng

 AX Accumulator register

 Sử dụng cho tính tốn xuất nhập

 BX Base register

 Thanh ghi sử dụng số

 CX Counter register

 Sử dụng cho vòng lặp

 DX Data register

 Sử dụng cho xuất nhập lệnh nhân chia

 Các ghi đa dụng “chia nhỏ” thành

(5)

Thanh ghi cờ (Flag)

Flags Register

Tắt Tên bit n “Mô tả”

OF Overflow 11 Tràn số có dấu

DF Direction 10 Hướng xử lý chuỗi

IF Interrupt Cho phép ngắt

TF Trap CPU thực bước

SF Sign Kiểm tra kết số âm

ZF Zero Kiểm tra kết

AF Auxiliary Carry

PF Parity Kiểm tra số bit chẵn

(6)

Ảnh hưởng lệnh đến cờ

 Tại thời điểm CPU thực lệnh, kết cờ

phản ánh tình trạng CPU sau thực lệnh INSTRUCTION AFFECTS FLAGS

MOV/XCHG Không ảnh hưởng cờ

ADD/SUB Tất

INC/DEC Tất trừ CF

NEG Tất

 Ví dụ:

 ADD AX, BX (trong giả sử AX=BX=0FFFFh)

(7)(8)(9)

Lệnh nhập xuất chuỗi kí tự

INT 21h

function number routine

09 Xuất chuỗi kí tự

 Input : AH=09

DX= địa chuỗi ký tự kết thúc $

 Output: chuỗi hình

Lệnh LEA ( Load Effective Address )

 Lấy địa offset biến vào ghi  LEA destination, source

(10)

Program Segment Prefix ( PSP )  Chứa thông tin chương trình để hệ thống truy xuất  256 byte

 Làm thay đổi DS, ES

 MOV AX,@DATA

 MOV DS,AX

 @DATA tên đoạn số liệu DATA

(11)

Chương trình nhập ký tự thường đổi thành ký tự hoa

TITLE PGM3: CASE COVERT PROGRAM MODEL SMALL

.STACK 100H DATA

CR EQU 0DH LF EQU 0AH

MSG1 DB ‘enter a lower case letter:$’

MSG2 DB 0DH,0AH,’in upper case it is :’

(12)

.CODE

MAIN PROC ; initialize ds

MOV AX,@DATA MOV DS,AX

;print prompt user

LEA DX,MSG1 ; MOV AH,9 INT 21H ;

(13)

;sub to convert SUB AL,20H ;

MOV CHAR, AL ; cất vào biến CHAR

;promt user

LEA DX, MSG2 ; MOV AH,9

INT 21H ;vì MSG khơng có dấu $ nên tiếp tục dấu

;$, lúc có kí tự hoa

;dos exit

MOV AH,4CH INT 21H

(14)

Lệnh sử dụng stack

 PUSH

 Cú pháp: PUSH source

 source: ghi, nhớ hay 16-bit để lưu vào stack

 POP

 Cú pháp: POP dest

 dest: ghi, nhớ để lưu kết

(15)

Lệnh sử dụng stack (tiếp theo)  Qui tắc vào sau trước:

 PUSH AX POP CX

 PUSH BX POP BX

 PUSH CX POP AX

 PUSHA

 Lưu theo thứ tự giá trị tất ghi AX,BX,CX,DX,SP,BP,SI,DI vào stack

 POPA

 Lấy giá trị stack vào ghi

(16)

Lệnh XLAT

 Translate

 “Dịch” giá trị AL thành giá trị bảng vị trí xác định theo độ dời AL

 Ứng dụng để chuyển đổi số liệu

 Cú pháp: XLAT (khơng có tốn hạng)

 ‘Input’:

 BX chứa địa bảng liệu  AL chứa byte cần đổi

 ‘Output’:

(17)

Lệnh XLAT (tiếp theo)

 Ví dụ: đổi số thập phân <16 kí tự HEXA

 Khai báo bảng kí tự

 Bangkytu DB ‘0123456789ABCDEF’

 Thực

MOV AL, 10 ;Nhập số cần đổi vào AL ví dụ =10

;thực đổi

MOV BX, offset Bangkytu ;lấy địa bảng liệu

XLAT ;AL chứa kí tự ‘A’

 Làm để nhập vào số chữ số

(18)

Các lệnh điều khiển

 Lệnh nhảy

 Có điều kiện

 Không điều kiện

 Biểu diễn ngôn ngữ cấp cao

 Cấu trúc rẽ nhánh

 IF

 CASE

 Compound condition

 Cấu trúc lặp

(19)

Ví dụ lệnh nhảy

 TITLE PGR3-1: CHARACTER DISPLAY  MODEL SMALL

 STACK 100H  CODE

 MAIN PROC

 MOV AH,2 ; hàm xuất kí tự

 MOV CX,256 ; số kí tự cần xuất 0-255

 MOV DL,0 ; DL mã ASCII kí tự NUL

 PRINT_LOOP : ; nhãn thực vòng lặp  INT 21H ; thực xuất kí tự

 INC DL ; tăng DL lên kí tự  DEC CX ; đếm giảm số kí tự chưa in

 JNZ PRINT_LOOP ;nhảy đến PRINT_LOOP CX<>0  ;DOS EXIT

 MOV AH,4CH  INT 21H

 MAIN ENDP

(20)

Nhảy có điều kiện

 Cú pháp: Jxxx destination_label

 xxx viết tắt điều kiện

 destination_label nhãn để nhảy đến

 Nếu điều kiện thỏa mãn nhảy

 Nếu khơng tiếp tục thực lệnh  JNZ == jump if not zero

 Điều kiện

 Thanh ghi cờ

(21)

Các lệnh nhảy có dấu

SYMBOL DESCRITION CONDITION

JG/JNLE jump if greater than

jump if not less than or equal to ZF=0 and SF=OF JGE/JNL jump if greater than or equal to

jump if not less or equal to SF=OF JL/JNGE jump if less than

jump if not greater or equal SF<>OF JLE/JNG jump if less than or equal

jump if not greater

(22)

Các lệnh nhảy không dấu

SYMBOL DESCRITION CONDITION

JA/JNBE jump if above

jump if not below or equal CF=0 and ZF=0

JAE/JNB jump if above or equal

jump if not below or equal CF=0

JB/JNAE jump if below

jump if not above or equal CF=1

JBE/JNA jump if below or equal jump if not above

(23)

Các lệnh nhảy cờ

SYMBOL DESCRITION CONDITION

JE/JZ jump if equal

jump if equal to zero ZF=1

JNE/JNZ jump if not equal

jump if not zero ZF=0

JC jump if carry CF=1

JNC jump if no carry CF=0

JO jump if overflow OF=1

JNO jump if not overflow OF=0

JS jump if sign negative SF=1

JNS jump if non-negative sign SF=0

JP/JPE jump if parity even PF=1

(24)

Lệnh CMP

 Thường dùng so sánh để lấy điều kiện

 Cú pháp: CMP destination, source

 Thực phép trừ destination – source để tính cờ từ

đó xác định điều kiện cho lệnh nhảy

 Việc sử dụng lệnh nhảy có dấu hay khơng dấu

tùy diễn dịch lập trình viên  Ví dụ: AX=7FFFh, BX=8000h

CMP AX,BX CMP AX,BX

JA lon_hon ;không nhảy JG lon_hon ;nhảy

 Viết đoạn chương trình lấy số lớn AX

(25)

Lệnh JMP

 Nhảy không điều kiện

 Cú pháp: JMP destination

 Nhảy đoạn CS

 Khắc phục phạm vi nhảy có điều kiện TOP:

; thân vòng lặp DEC CX

JNZ TOP MOV AX,BX

TOP:

; thân vòng lặp dài 126 bytes DEC CX

JNZ BOTTOM JMP EXIT

BOTTOM: JMP TOP EXIT:

(26)

Biểu diễn ngôn ngữ cấp cao

 Cấu trúc IF – THEN – END IF

IF (condition is true) THEN

execute true branch statements END IF

 Ví dụ:

; if AX<0

CMP AX,0

JNL END_IF ; no , exit ;then

(27)

Biểu diễn ngôn ngữ cấp cao (tt)

 Cấu trúc IF – THEN – ELSE – END IF

IF condition is true THEN

exec true branch statements ELSE

exec false branch statements END_IF

IF AL<= BL THEN

display AL ELSE

display character in BL END_IF

MOV AH,2 ; prepare ;if AL<=BL

CMP AL,BL ;AL<=BL?

(28)

Biểu diễn ngôn ngữ cấp cao (tt)

 Cấu trúc CASE

CASE expression

value_1 : Statements_1 value_2 : Statements_2

value_n : Statements_n

CASE AX

< put -1 in BX = put in BX > put in BX

; case AX

CMP AX,0 ;test AX JL NEGATIVE ;AX<0 JE ZERO ;AX=0

(29)

 Rẽ nhánh với tổ

hợp điều kiện Condition_1 AND

Condition_2 Condition_1 OR

Condition_2

Read a character ( into AL) IF ( ‘A’<= character ) AND ( charater <= ‘Z’) THEN

display character END_IF

;read a character MOV AH,2

INT 21H ; character in AL

; IF ( ‘A’<= character ) AND ( charater <= ‘Z’)

CMP AL,’A’ ; char >=‘A’? JNGE END_IF ; no, exit

CMP AL,’Z’ ; char <=‘Z’? JNLE END_IF ; no exit

; then display it

MOV DL,AL MOV AH,2 INT 21H END_IF:

(30)

Biểu diễn ngôn ngữ cấp cao (tt)

 Rẽ nhánh với tổ

hợp điều kiện Condition_1 AND

Condition_2 Condition_1 OR

Condition_2

Read a character ( into AL) IF ( character =‘Y’) OR

( character=‘y’) THEN dispplay it ELSE

terminate the program

;read a character MOV AH,2

INT 21H ; character in AL ; IF ( character =‘y’ ) OR ( charater = ‘Y’)

CMP AL,’y’ ; char =‘y’?

(31)

Biểu diễn ngôn ngữ cấp cao (tt)

 Cấu trúc lặp FOR

 LOOP destination_label

 Lặp CX khác

 Số đếm ghi CX giảm

 Mẫu thực lệnh LOOP

MOV CX,20 ; gán cho cho CX số lần lặp 20 TOP:

… ; thân vòng lặp

LOOP TOP

(32)

Cấu trúc lặp FOR (tt)

 LOOP ln thực lần

 CX =  lặp FFFFh lần

 Tránh lệnh JCXZ (Jump if CX is Zero)

MOV CX,… ; gán cho cho CX số lần lặp JCXZ SKIP

TOP:

… ; thân vòng lặp

LOOP TOP SKIP:

(33)

Biểu diễn ngôn ngữ cấp cao (tt)

 Cấu trúc lặp WHILE

 Kiểm tra lặp điều kiện

MOV DX,0 ; DX để đếm skt MOV AH,1 ; hàm nhập kí tự INT 21h ; kí tự AL

WHILE_:

CMP AL,0DH ; kt=CR JE END_WHILE ; đúng, thoát INC DX ; DX tăng INT 21h ; đọc kt tiếp JMP WHILE_ ; lặp

END_WHILE :

Ví dụ:

Đếm số kí tự nhập 1 hàng (cho

(34)

Biểu diễn ngôn ngữ cấp cao (tt)

 Cấu trúc lặp REPEAT…UNTIL

 Thực công việc kiểm tra điều kiện, điều kiện

vẫn sai lặp lại

 Ví dụ viết đoạn mã nhập vào kí tự gặp

kí tự khoảng trắng

MOV AH,1 ; đọc kí tự REPEAT_:

INT 21h ; kí tự AL

;until

Ngày đăng: 20/04/2021, 01:56

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w