1. Trang chủ
  2. » Kỹ Thuật - Công Nghệ

Vi Xử Lý và Cấu Trúc Máy Tính chương 03 pptx

14 418 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 14
Dung lượng 1,64 MB

Nội dung

Giới thiệu  Hợp ngữ Assembly: ngôn ngữ lập trình bậc thấp, sử dụng chính các câu lệnh trong tập lệnh của VXLđể viết nên một chương trình  Ưu điểm của lập trình hợp ngữ: chương trình vi

Trang 1

VI XỬ LÝ &

CẤU TRÚC MÁY TÍNH

ĐH CNKT ĐIỆN TỬ TRUYỀN THÔNG K5

Giảng viên: Kiều Xuân Thực Khoa Điện tử

Đại học công nghiệp Hà Nội

CHƯƠNG 3

LẬP TRÌNH ASSEMBLY CHO 8086

Nội dung:

1 Giới thiệu

2 Các chế độ địa chỉ của 80x86

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

3 Một số hàm của ngắt 21h

4 Tập lệnh của 8086

5 Ngăn xếp và thủ tục

1 Giới thiệu

 Hợp ngữ (Assembly): ngôn ngữ lập trình bậc thấp, sử dụng chính các câu lệnh trong tập lệnh của VXLđể viết nên một chương trình

 Ưu điểm của lập trình hợp ngữ: chương trình viết bằng hợp ngữ chạy nhanh và chiếm ít bộ nhớ hơn so với các chương trình viết bằng các ngôn ngữ bậc cao do:

do:

 Trình dịch chỉ cần qua một bước là có thể biên dịch các chương trình này ra mã máy

 Lập trình hợp ngữ cho phép đọc hoặc ghi trực tiếp vào các ô nhớ, thanh ghi hay các cổng vào/ra dễ dàng.

 Nhược điểm:

 Chương trình dài nên khó kiểm soát lỗi, khó bảo trì hơn so với chương trình tương tự viết bằng ngôn ngữ bậc cao

 Chương trình viết bằng hợp ngữ chỉ chạy được trên hệ thống tương ứng, không thể thực thi trên hệ thống có kiến trúc và tập lệnh khác.

Trang 2

Cú pháp của hợp ngữ

 Một chương trình hợp ngữ bao gồm các dòng lệnh,

mỗi lệnh được viết trên một dòng.

 Một dòng lệnh có thể là:

 Lệnh thật:được hợp ngữ dịch ra mã máy

 Hướng dẫn biên dịch: không được dịch ra mã máy

 Mỗi một lệnh bao gồm có 4 trường:

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

 Mỗi một lệnh bao gồm có 4 trường:

Tên: Mã_lệnh Toán_hạng; Chú_giải

 Các trường phải được cách nhau ít nhất một ký tự

trống hoặc TAB.

 Một lệnh không nhất thiết phải có đủ 4 trường, VD

trường tên hoặc trường chú giải có thể bỏ qua nhưng

các trường phải xuất hiện theo đúng theo thứ tự.

 Ví dụ: NHAP: MOV AX,0; Chuyển 0 vào thanh ghi AX

5

tên biến Tên sẽ được chương trình dịch gán bằng các

địa chỉ cụ thể của ô nhớ.

 Trường tên cách với trường mã lệnh bởi dấu (:)

 Các quy định khi đặt tên:

 Không được dài quá 31 ký tự.

 Không được dài quá 31 ký tự.

 Bao gồm các chữ cái, chữ số và một số ký tự đặc biệt (!@% _$).

 Không được bắt đầu bằng một chữ số.

 Không chứa khoảng trống hoặc dấu gạch ngang.

 Nếu có dấu (.) thì phải đặt ở vị trí đầu tiên của tên.

 Không phân biệt chữ thường, chữ hoa.

Trường mã lệnh: các ký hiệu gợi nhớ biểu thị chức năng

thao tác như MOV, ADD, SHL

Trường toán hạng: toán hạng xác định dữ liệu sẽ được các

lệnh tác động lên Một lệnh có thể không có, có 1 hoặc có 2

toán hạng Ví dụ:

NOP DEC CX MOV AX,1

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

MOV AX,1

Chú ý:

• L ệnh có 2 toán hạng phải cách nhau bởi dấu phảy (,) Toán hạng đầu là toán hạng đích (nơi chứa kết quả), toán hạng thứ hai là toán hạng nguồn, các lệnh thường không làm thay đổi toán hạng nguồn.

• Các toán hạng của lệnh phải có cùng độ lớn hay cùng kiểu thì mới hợp lệ

Ví dụ: MOV AX,BX MOV AX,BL

7

dụng lệnh của chương trình giúp người đọc dễ hiểu Lời giải thích cách với trường toán hạng dấu chấm phảy (;) Chương trình dịch bỏ qua khi dịch đến dấu ;

 VD:

; MOV CX,DX MOV CX,5; Khởi tạo đếm bằng 5

Trang 3

Dữ liệu chương trình

 Qui ước:

 1 số thuộc hệ nhị phân là 1 chuỗi các bit kết thúc bằng chữ ‘B’

hay ‘b’

 1 số thuộc hệ hexa là một chuỗi các số bắt đầu là một số thập

phân và kết thúc bằng chữ ‘H’ hay ‘h’ Ví dụ: 0AH hoặc 12C5H.

Nếu một số bắt đầu bằng một chữ cái thì phải thêm 0 vào trước số đó để chương trình dịch không nhầm sang một tên

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

trước số đó để chương trình dịch không nhầm sang một tên hay một nhãn.

 Riêng đối với một số thuộc hệ thập phân có thể kết thúc số đó

bằng chữ ‘D’ hay ‘d’ (hoặc không có) Ví dụ: 12 hay 12D là như nhau.

 Các ký tự hoặc chuỗi ký tự phải được đặt trong dấu nháy đơn

hoặc nháy kép Ví dụ: ‘a’, “Chao ban”.

Các ký tự sẽ được dịch ra mã ASCII của chúng, chương trình dịch sẽ không phân biệt giữa “A” với 41H, 1000001B hoặc 65.

9

Tên_biến Kiểu_biến G iá_trị_khởi_tạo

 Tên biến: đặt theo qui ước

 Kiểu biến:

 Giá trị khởi tạo: đặt giá trị ban đầu cho biến, nếu

không muốn đặt giá trị đầu cho biếnđể ?

 VD: Khoa DB 5;

Lop DB ‘DHDT1$’

kiểu ký tự và được gán tên bởi toán tử EQU (equate)

Tên_hằng_số EQU Giá_trị

 VD:

CR EQU 0DH

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

CR EQU 0DH

PI EQU 3.14159

11

Khung của một chương trình hợp ngữ title Tên_chương_trình (có thể bỏ qua) model Kiểu_bộ_nhớ

.stack Dung_lượng_ngăn_xếp data

; khai báo các hằng, biến

… code code main proc

; các lệnh chương trình chính

… main endp

; các hàm và thủ tục

… end main

Trang 4

.model Kiểu_bộ_nhớ

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

.stack Dung_lượng_ngăn_xếp

 VD: stack 100h tạo ngăn xếp kích thước 256byte

 Nếu không khai báo thì chương trình tự gán 1Kbyte cho ngăn

xếp

13

.model small

.stack 100H

.data

message DB "I am student!$“

.code

main proc

mov AX,@data

Hiển thị dòng chữ

“I am student!"

lên màn hình bằng hàm số 9 của ngắt

mov AX,@data

mov DS,AX

mov AH,9

mov DX,message

int 21H

mov AH,4CH

int 21H

main endp

end main

hàm số 9 của ngắt 21h

2 Các chế độ địa chỉ của 80x86

1 Chế độ địa chỉ thanh ghi (Register Addressing Mode)

2 Chế độ địa chỉ tức thời (Immediate Addressing Mode)

3 Chế độ địa chỉ trực tiếp (Direct Addressing Mode)

4 Chế độ địa chỉ gián tiếp qua thanh ghi (Register Direct Addressing Mode)

5 Chế độ địa chỉ tương đối cơ sở (Based Relative Addressing

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

5 Chế độ địa chỉ tương đối cơ sở (Based Relative Addressing Mode)

6 Chế độ địa chỉ tương đối chỉ số (Indexed Relative Addressing Mode)

7 Chế độ địa chỉ tương đối chỉ số cơ sở (Based Indexed Relative Addressing Mode)

15

Chế độ địa chỉ thanh ghi

MOV AX,BX ; Chuyển nội dung của BX vào AX

MOV DL,AL ; Chuyển nội dung của AL vào DL

MOV SI,DX ; Chuyển nội dung của DX vào SI

MOV SP,BP ; Chuyển nội dung của BP vào SP

ADD AL,BH ; Cộng nội dung của BH với AL,kết quả lưu trong AL

MOV CL,BX ; Lệnh này sẽ báo lỗi vì đích và nguồn không cùng kiểu

Trang 5

Chế độ địa chỉ tức thời

MOV AH,12; chuyển 12 vào thanh ghi AH

MOV DL,0AH; chuyển 10 (0AH) vào thanh ghi DL

MOV AH,01000010B; chuyển 66 vào thanh ghi AH

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

MOV CL,  A  ; chuyển 65 vào thanh ghi CL

MOV [BX],100; chuyển 100 vào ô nhớ có địa chỉ DS:BX

17

Chế độ địa chỉ trực tiếp

MOV AL, [012H];chuyển nội dung ô nhớ DS:[012H]vào AL

MOV AL, ES:[22];chuyển nội dung ô nhớ ES:[012H]vào AL

MOV [16H], AX ;chuyển nội dung của AX vào hai ô nhớ

;liên tiếp có địa chỉ DS:[16H]và DS:[17H]

;liên tiếp có địa chỉ DS:[16H]và DS:[17H]

MOV BX,[5678H]; chuyển nội dung của hai ô nhớ có địa

;chỉ DS:[5678H]và DS:[5679h]vào BX

Chế độ địa chỉ gián tiếp qua thanh ghi

MOV AX,[BX]; Chuyển nội dung của hai ô nhớ có địa chỉ ;DS:[BX]và DS:[BX+1]vào AX

MOV AL,[BX]; Chuyển nội dung của ô nhớ có địa chỉ DS:[BX] vào AL

MOV [BP],AL; Chuyển nội dung của AL vào ô nhớ có địa chỉ SS:[BP]

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 19

Chế độ địa chỉ tương đối cơ sở

MOV [BP+2],AL; Chuyển nội dung của AL vào ô nhớ có địa

; chỉ SS:[BP+2]

MOV AX,[BX+4 ]; Chuyển nội dung của hai ô nhớ có địa chỉ

; DS:[BX+4]và DS:[BX+5]vào AL và AH

Lệnh này có thể viết như sau:

MOV AX,[BX]+4

Trang 6

Chế độ địa chỉ tương đối chỉ số

Ví dụ: MOV AX,[DI+4];

Ý nghĩa: chuyển nội dung của hai ô nhớ có địa chỉ

DS:[DI+4]và DS:[DI+5]vào AX

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 21

Chế độ địa chỉ tương đối chỉ số cơ sở

Ví dụ:

MOV AH,[BX+SI+disp]; disp là hằng số

3 Một số hàm của ngắt 21h

 Cách gọi một hàm của ngắt 21h của DOS:

MOV AH, Số_hiệu_hàm;

INT 21H

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 23

Hàm 4C

 Cách gọi:

MOV AH,4CH INT 21H

 Chức năng: thoát khỏi chương trình, trở về DOS

 Chức năng: thoát khỏi chương trình, trở về DOS

Trang 7

Hàm 01

 Chức năng: nhập 1 ký tự từ bàn phím

 Cách gọi:

MOV AH,1 INT 21H

 Trả về: AL chứa mã ASCII của ký tự nhập vào; AL = 0

nếu một phím điều khiển hay một phím chức năng

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

nếu một phím điều khiển hay một phím chức năng

được nhấn.

25

Hàm 02

 Chức năng: xuất 1 ký tự ra màn hình

 Cách gọi:

MOV DL,Mã_ASCII_của_ký_tự;

MOV AH,2 INT 21H

 Trả về: AL chứa mã ASCII của ký tự.

 Trả về: AL chứa mã ASCII của ký tự.

 Chú ý: Nếu DL chứa mã ASCII của ký tự điều khiển,

hàm 2 sẽ thi hành các chức năng điều khiển

 Ví dụ:

mov AH,2 mov DL,’A’

; mov DL,7 int 21H

Ví dụ minh họa

.model small stack 100H data

.code main proc

mov AH,2 mov DL,0AH int 21H mov DL,0DH int 21H

Nhập vào một ký

tự rồi hiển thị ký

tự đó ở đầu dòng tiếp theo!

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

mov AH,1 int 21H mov BL,AL

27

mov DL,BL int 21H mov AH,4CH int 21H

main endp end main

tiếp theo!

Hàm 09

 Chức năng: hiểm thị 1 chuỗi ký tự ra màn hình, địa chỉ của chuỗi ký tự DS:DX

 Cách gọi:

MOV AX,@DATA MOV DS,AX; nhập địa chỉ đoạn dữ liệu vào DS LEA DX,Tên_của_chuỗi_ký_tự; nhập địa chỉ lệch của chuỗi vào DX LEA DX,Tên_của_chuỗi_ký_tự; nhập địa chỉ lệch của chuỗi vào DX MOV AH,9

INT 21H

 Chú ý: @data trả về địa chỉ đoạn dữ liệu được định nghĩa bởi data ở đầu chương trình.

Trang 8

Ví dụ

.model small

.stack 100H

.data

tb1 DB “Moi ban nhap vao 1 ky tu thuong:$”

tb2 DB 10,13,“Doi thanh chu hoa la:$”

.code

mov AH,1 int 21H mov BL,AL sub BL,20h mov AH,9 LEA DX,tb2 int 21H mov AH,2

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

.code

main proc

mov AX,@data

mov DS,AX

mov AH,9

LEA DX,tb1

int 21H

29

mov AH,2 mov DL,BL int 21H mov AH,4CH int 21H main endp end main

4 Tập lệnh của 8086

1 Nhóm lệnh dịch chuyển dữ liệu

2 Nhóm lệnh số học

3 Nhóm lệnh điều khiển rẽ nhánh

4 Nhóm lệnh xử lý bit

4 Nhóm lệnh xử lý bit

5 Nhóm lệnh xử lý điều khiển

Nhóm lệnh dịch chuyển dữ liệu

MOV đích, nguồn

Toán hạng đích

Toán hạng nguồn

Thanh ghi đa năng

Thanh ghi đoạn

Ô nhớ Hằng số

Thanh ghi đa năng Có thể Có thể Có thể Không thể

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

MOV DS,ES MOV DS,0AH

31

Thanh ghi đa năng Có thể Có thể Có thể Không thể Thanh ghi đoạn Có thể Không thể Có thể Không thể

Ô nhớ Có thể Có thể Không thể Không thể Hằng số Có thể Không thể Có thể Không thể

Lệnh OUT

Dạng lệnh: OUT cổng,thanh_ghi_chứa Thao tác: Lệnh OUT xuất dữ liệu từ thanh ghi chứa

(AL) ra cổng

Lệnh IN

Dạng lệnh: IN thanh_ghi_chứa, cổng

Dạng lệnh: IN thanh_ghi_chứa, cổng Thao tác: Lệnh IN đọc dữ liệu từ cổng vào thanh

ghi (AL).

Trang 9

Nhóm lệnh số học

Lệnh ADD, SUB

Dạng lệnh: ADD đích, nguồn

SUB đích, nguồn

 Lệnh ADD/SUB thực hiện cộng/trừ nội dung của toán

hạng đích với toán hạng nguồn, kết quả lưu vào toán hạng đích, nguồn không thay đổi.

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

hạng đích, nguồn không thay đổi.

33

Toán hạng đích

Toán hạng nguồn

Thanh ghi

đa năng Ô nhớ Hằng số

Thanh ghi đa năng Có thể Có thể Không thể

Ô nhớ Có thể Không thể Không thể Hằng số Có thể Có thể Không thể

Lệnh DEC (DECrement)

Dạng lệnh: DEC đích

Thao tác: Giảm đích đi 1.

 Tương đương với lệnh SUB đích,1.

Lệnh INC (INCrement)

Lệnh INC (INCrement)

Dạng lệnh: INC đích

Thao tác: Tăng đích thêm 1.

 Tương đương với lệnh ADD đích,1.

Lệnh MUL (MULtiply)

Dạng lệnh: MUL nguồn

Thao tác: Lệnh MUL nguồn thực hiện nhân nội dung của AL với

nguồn nếu nguồn là một byte, tích mặc định chứa trong AX;

hoặc nhân nội dung của AX với nguồn nếu toán hạng nguồn là một word, tích mặc định chứa trong DX: AX.

 Nguồn không được là hằng số.

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

 Nguồn không được là hằng số.

 Ví dụ: mov AL,3

mov BL,5 mul BL mov DX,AX mov AL,6 mov Bl,8 mul BL add AX,DX

35

Lệnh DIV (DIVide)

 Thực hiện phép chia không dấu.

Dạng lệnh: DIV nguồn

Thao tác: Số chia là nguồn có thể là một ô nhớ hay thanh ghi.

 Trong phép chia cho byte ( nguồn là 8 bit), số bị chia

là chứa trong AX, kết quả thương số chứa trong AL

và số dư trả về trong AH.

 Khi thực hiện phép chia cho word ( nguồn là 16 bit),

số bị chia 32 bit chứa trong DX:AX Kết quả thương

số chứa trong AX và số dư trả về trong DX.

Trang 10

Nhóm lệnh điều khiển rẽ nhánh

 Nhảy ngay đến Nhãn_lệnh mà không cần điều kiện gì

 Với các lệnh nhảy có điều kiện thì khi gặp lệnh nhảy, nếu như

điều kiện của lệnh nhảy được thoả mãn thì Nhãn_lệnh được thi hành còn nếu ngược lại thì thực hiện lệnh nằm ngay sau lệnh nhảy Nhãn_lệnh có thể đặt trước hoặc sau lệnh nhảy.

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

nhảy Nhãn_lệnh có thể đặt trước hoặc sau lệnh nhảy.

 Phạm vi của lệnh nhảy có điều kiện trong khoảng 128 byte trước

lệnh nhảy và 127 byte sau lệnh nhảy

 Dạng lệnh: Lệnh_nhảy Nhãn_lệnh

 Điều kiện: dùng lệnh so sánh CoMPare:

CMP đích, nguồn

CMP: Trừ đích cho nguồn và thiết lập các cờ theo kết quả của phép tính, 2 toán hạng vẫn thay đổi giá trị.

Hiển thị các số từ 0 đến 8 trên

màn hình!

Hiển thị các số từ 0 đến 9 trên

màn hình?

Trang 11

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 41

Bài tập

 Tính tổng: 1+2+…+100, lưu kết quả ở BX

 Tính tổng: 1+3+…+101, lưu kết quả ở DX

 Tính 7!, lưu kết quả ở BX

Nhóm lệnh xử lý bit

Các lệnh logic: AND, OR, XOR

 Ứng dụng: xóa bit, thiết lập bit, đảo giá trị bit trong 1 byte/word bằng cách AND, OR, XOR với mặt nạ

 Ví dụ:

and AL,0DFH; xoá bit 5 của AL

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering

and AL,0DFH; xoá bit 5 của AL

OR AH,81H; thiết lập bit 0 và bit 3 của AH XOR AH,81H; đảo bit 0 và bit 3 của AH

43

Các lệnh dịch: SHL và SHR

Trang 12

VD: nhập 16 bit, lưu vào BX

Dùng hàm 01 của ngắt 21h để đọc bàn phím.

Nhập 0: Al chứa 30H; Nhập 1: AL chứa 31H

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 45

Bài tập

 Nhập tối đa 16 bit để lưu vào BX, dừng

nhập khi nhấn Enter.

Các lệnh quay: ROL và ROR

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 47

Các lệnh quay qua cờ CF: RCL và RCR

Trang 13

BT: xuất 16 bit của BX ra màn hình

Dùng hàm 02 của ngắt 21h để xuất ra màn hình.

Xuất 0: DL chứa 30H; xuất 1: DL chứa 31H

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 49

5 Ngăn xếp & thủ tục

 Ngăn xếp: lưu trữ dữ liệu tạm thời kiểu LIFO

 Cất vào ngăn xếp: PUSH

 Lấy ra: POP

 Ví dụ

Mov ax, 3 Mov bx,5 Mov bx,5 Mul bl Push ax Mov ax, 4 Mov bx,6 Mul bl Pop bx Add ax,bx

VD nhập 4 số có 1 chữ số, tính tổng

HANOI UNIVERSITY OF INDUSTRY Faculty of Electronic Engineering 51

Thủ tục

Trang 14

 Làm các BT cuối chương 3 của Giáo trình.

 Đọc trước Chương 4 của Giáo trình.

Ngày đăng: 29/06/2014, 15:20

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w