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

Vi xử lý vi điều khiển

13 370 2

Đ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 13
Dung lượng 301 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

 Đếm số lượng chữ “B” trong xâu: Sau khi so sánh với “B” xong thì thông qua biến dem mà dữ liệu số lượng chữ “B” có trong xâu được lưu vào thanh ghi AL và dùng lệnh DIV để làm tròn số

Trang 1

VI XỬ LÝ – VI ĐIỀU KHIỂN

MỤC LỤC

VI XỬ LÝ – VI ĐIỀU KHIỂN 1

MỤC LỤC 1

5 NỘI DUNG 1

Bước 1 Mục đích, yêu cầu của bài tập 1

Bước 3: Sơ đồ thuật toán 2

Bước 4 Các câu lệnh dùng trong bài 2

Bước 5: Trình bày các chương trình con thực hiện các chức năng chính: 5

Bài làm chính: 5

Bước 6: Trình bày các đoạn mã lệnh trong bài và ý nghĩa dùng chúng 9

5 NỘI DUNG

Tên đề tài: Viết chương trình nhập một xâu ký tự, độ dài 10 ký tự, In ra màn hình số lần xuất hiện ký tự ‘B’ trong xâu

Bước 1 Mục đích, yêu cầu của bài tập.

 Mục đích:

Nhập một xâu ký tự từ bàn phím

In ra màn hình số lần xuất hiện ký tự “B” trong xâu

 Yêu cầu:

Viết chương trình nhập một xâu, in ra màn hình số lần xuất hiện ký tự “B” trong xâu

Bước 2 Cách tiếp cận đề tài

 Nhập một xâu ký tự từ bàn phím: thông qua việc dùng thanh ghi AL để nhập tạm thời các ký tự vào đó và từ đó chúng được chuyển vào thanh ghi SI Và từ

Trang 2

đây các ký tự sẽ được hiển thị ra màn hình và sau đó là để kiểm tra (so sánh) với ký tự

“B” Việc nhập chỉ kết thúc khi gõ phím Enter trên bàn phím

 So sánh các ký tự trong xâu với “B”: Dùng các vòng lặp để so sánh tuần

tự các ký tự trong xâu ở SI với mã Hex của ký tự “a” là 42h

 Đếm số lượng chữ “B” trong xâu: Sau khi so sánh với “B” xong thì

thông qua biến dem mà dữ liệu số lượng chữ “B” có trong xâu được lưu vào thanh ghi

AL và dùng lệnh DIV để làm tròn số đó là số nguyên, và sau đó hiển thị ra màn hình

số đó

 Hiện thị ra màn hình số lượng chữ “B” trong xâu bằng chữ số: Sử dụng lệnh ngắt để in ra màn hình

Bước 3: Sơ đồ thuật toán.

Bước 4 Các câu lệnh dùng trong bài

Dạng lệnh: MOV Đích, Nguồn

Mô tả: Đích Nguồn

Ý nghĩa: di chuyển dữ liệu từ toán hạng nguồn đến toán hạng đích

Trang 3

Toán hạng nguồn và đích có thể tìm được theo các chế đọc địa chỉ khác nhau, nhưng phải có cùng độ dài và không được phép đồng thời là hai ô nhớ hoặc hai thanh ghi đoạn

Các cờ bị thay đổi: không

Ví dụ: MOV AL,AH ;ALAH

MOV CX,50 ;CX50

MOV DL,[SI] ;DL{DL:SI}

Dạng lệnh: LEA Đích,Nguồn

Trong đó Đích là một trong các thanh ghi: BX, CX, DX, PB, SI, DI

Nguồn là tên biến trong đoạn DS được chỉ rõ trong lệnh hoặc ô nhớ cụ thể

Đíchđịa chỉ lệch của nguồn

Đíchđịa chỉ hiệu dụng của nguồn

Đây là lệnh tinhd địa chỉ lệch của biến hoặc địa chỉ của ô nhớ chọn làm Nguồn nạp vào thanh ghi đã chọn

Các cờ bị thay đổi: không

Ví dụ:

LEA DX, Label ;nap dia chi cua lech Label vao DX

LEA CX, [BX][DI] ;nap vao CX dia chi hieu dung do

;BX va DI chi ra EA=BX+DI

Dạng lệnh: INT N (N= 0…FFH)

Các thao tác của 8086 khi chạy lệnh INT

Tạo địa chỉ mới của Stack, cất thanh ghi cờ vào Stack: SPSP-2, {FR}SP Cấm các ngắt khác nhau tác động vào vi xử lý, cho vi xử lý chay ở chế độ từng lệnh: IF0, TF0

Tao địa chỉ mới của Stack, cất địa chỉ đaonj của địa chỉ trở về vào Stack: SPSP-2, SPCS

Tạo địa chỉ mới của Stack, cất địa chỉ lệch của địa chỉ trở về vào Stack : SPSP-2, SPIP

Vi xử lý lấy lệnh tại địa chỉ mới, đại chỉ con trỏ ngắt được tinhd toán như sau: {Nx4}IP, {Nx4+2}CS

Ví dụ: với N=8 thì CS{0022H} và {0020H}

Dạng lệnh : CMP Đích, Nguồn

CMP trừ toán hạng đích cho toán hạng nguồn, chúng có thể là các byte hoặc các

từ, nhưng không lưu trữ kết quả Các toán hạng không bị thay đổi Kết quả của lệnh này dùng để cập nhật các cờ và có thể được dùng để làm điều kiện cho các lệnh nhảy

có điều kiện tiếp theo

Các cờ bị thay đổi: AF, CF, OF, PF, SF, ZF

INC (tăng toán hạng lên 1)

Dạng lệnh: INC Đích

Mô tả: Đích  Đích + 1

Lệnh này tăng Đích lên 1

Các cờ bị thay đổi: AF, OF, PF, SF, ZF

Trang 4

Ví dụ: INC AL

INC BX

JMP (lệnh nhảy không điều kiện)

JMP trao quyền điều khiển cho vùng mục tiêu một cách không điều kiện Lệnh phân biệt nhảy gầnn nhảy xa

Dạng lênh: sau đây là nhưng cách viết lệnh không điều kiện:

JMP NHAN

Lệnh mới này bắt đầu địa chỉ với NHAN Chương trình sẽ căn cú vào khoảng dịch giữa NHAN và lệnh nhảy để xác định xem nó là:

+ Nhảy ngắn : trong trường hợp này NHAN nằm cách xa (dịch đi một khoảng) -128…127 byte so với lệnh tiếp theo sau lệnh JMP Chương trình sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển Do đó:

IPIP+dịch chuyển

Đây là lệnh nhảy trực tiếp vì dịch chuyển để trực tiếp trong mã lệnh

Để định hướng cho chương trình dịch làm việc nên viết lệnh dưới dạng:

JMP SHORT NHAN

+ Nhảy gần: : trong trường hợp này NHAN nằm cách xa (dịch đi một khoảng) -32768…+32768 byte so với lệnh tiếp theo JMP Chương trình sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển Do đó

IPIP+dịch chuyển

Đây là lệnh nhảy trực tiếp vì dịch chuyển để trực tiếp trong mã lệnh

Để định hướng cho chương trình dịch làm việc nên viết lệnh dưới dạng:

JMP NEAR NHAN

+ Nhảy xa: : trong trường hợp này NHAN nằm ở đoạn mã khác so với lệnh tiếp theo sau lệnh JMP Chương trình sẽ căn cứ vào vị trí NHAN để xác định giá trị địa chỉ nhảy đến (CS:IP của NHAN) SAu đó:

IPIP của NHAN

CSCS của NHAN

Các cờ bị thay đổi: không

JE (nhảy nếu bằng nhau)

Dạng lệnh: JE NHAN

Mô tả: IPIP+dịch chuyển

Lệnh trên biểu diễn thao tác nhảy cso điều kiện với NHAN nếu ZF=1 NHAN phải nằm cách xa một khoảng -128…+127 byte so với lệnh tiếp theo sau lệnh JE

Chương trình sẽ căn cứ vào vị trí NHAN để xác định giá trị dịch chuyển

Các cờ bị thay đổi: không

Ví dụ: SUB AL,10H ;tru AL cho 10H

JE THOI ;nhay den THOI neu AL bang 10H

Dạng lệnh: LOOP NHAN

Mô tả: lệnh này dùng để lặp lại đoạn chương trình(gồm các lệnh nằm trong khoảng từ NHAN đến hết lệnh LOOP NHAN) cho đến khi số lần lặp CX=0

NHAN phải nằm cách xa tối đa -128byte so với lệnh tiếp theo sau lệnh LOOP Các cờ bị thay đổi: không

Ví dụ:

Trang 5

MOV AL, 0 ;xoa AL

MOV CX, 10 ;nap so lan lap vao CX

LAP: INC AL ;tang AL len 1

LOOP LAP ;lap lai 10 lan, AL=10

Dạng lệnh: DIV Nguồn

Toán hạng Nguồn lá số chia Tùy theo độ dài toán hạng Nguồn ta có hai trương hợp bố trí phép chia:

+ Nếu Nguồn là so 8 bit: AX/Nguồn, thương để vào AL, số dư để vào AH

+ Nếu Nguồn là so 16 bit: AX/Nguồn, thương để vào AX, số dư để vào DX Nếu thương không phải là số nguyên nó được làm tron theo số sát dưới Nếu Nguồn bằng 0 hoặc thương thu được lớn hơn FFH hoặc FFFFH(tùy theo đọ dài của toán hạng nguồn) thi 8086 thực hiện lệnh ngắt INT 0

Các cờ bị thay đổi : không

Ví dụ:

MOV AX, 0033H ;chuyen 0033H vao AX

MOV BL, 25 ;AL=02 va AH=01H

POP (lấy lại 1 từ vào thanh ghi từ đỉnh ngăn xếp)

Dạng lệnh: POP Đích

Mô tả: Đích{SP}

SPSP+2

Toán hạng đích đích có thể là các thanh ghi đa năng, thanh ghi đoạn (nhưng không được là thanh ghi đoạn mã CS) hoặc ô nhớ

Các cờ bị thay đổi: không

Ví dụ:

POP DX ;lay 2 byte vao dinh ngan xep dua vao DX

Dạng lệnh: XOR Đích, Nguồn

Lệnh XOR thực hiện logic XOR (hoặc đảo) giưac hai toán hạng và kết quả được lưu vào trong đích Nếu toán hạng đích trung toán hạng nguồn thì kết quả bằng 0,

do đó lệnh còn được dùng để xóa thanh ghi về 0 kèm theo các cờ CF và Ò cũng bị xóa

Các cờ bị thay đổi: CF, OF, PF, SF, ZF

Ví dụ:

XOR AX, AX

XOR BX, BX

MOV AX, 5857H

MOV BX, 58A8H

XOR AX, BX

Bước 5: Trình bày các chương trình con thực hiện các chức năng chính: Bài làm chính:

model small

stack 100

Trang 6

data

tb1 db 'nhap vao 1 chuoi ky tu:$'

tb2 db 13,10,'so lan ky tu xuat hien trong xau la:$'

tb3 db 13,10,'ban co muon nhap tiep khong y/n?:$'

A db 100 dup(?)

n db 0

c db 10

dem db 0

code

main proc

mov ax,@data

mov ds,ax

mov ah,9

lea dx,tb1

int 21h

lea si,A

xor cx,cx

nhap:

mov ah,1

int 21h

cmp al,13

je thoinhap

mov [si],al

inc si

inc cx

jmp nhap

Trang 7

thoinhap:

mov n,cl

lai:

mov cl,n

xor ax,ax

mov dem,0

lea si,A

sosanh:

cmp [si],61h

je tangdem

jmp lap

tangdem:

inc dem

lap:

inc si

loop sosanh

; hienthi

mov ah,9

lea dx,tb2

int 21h

xor ax,ax

mov al,dem

chia:

div c

xor bx,bx

mov bl,ah

push bx

Trang 8

inc cx

cmp al,0

je hienthi

xor dx,dx

mov dl,al

xor ax,ax

mov ax,dx

jmp chia

hienthi:

xor dx,dx

layra:

pop dx

add dl,30h

mov ah,2

int 21h

loop layra

mov ah,9

lea dx,tb3

int 21h

mov ah,1

int 21h

cmp al,79h

je lai

; ve dos

mov ah,4ch

int 21h

main endp

Trang 9

end main

Bước 6: Trình bày các đoạn mã lệnh trong bài và ý nghĩa dùng chúng.

model small khai báo kiểu chương trình (kiểu small)

stack 100 khai báo kích thước ngăn xếp

data

tb1 db 'nhap vao 1 chuoi ky tu:$'

tb2 db 13,10,'so lan ky tu xuat hien trong xau la:$'

tb3 db 13,10,'ban co muon nhap tiep khong y/n?:$'

A db 100 dup(?)

n db 0

c db 10

Khai báo biến dùng trong bài

Khai báo các thông báo sẽ hiển thị trên màn hình

Khai báo các thông báo sẽ hiển thị trên màn hình

Trang 10

dem db 0

code

main proc

mov ax,@data

mov ds,ax

mov ah,9

lea dx,tb1

int 21h

lea si,A

xor cx,cx

nhap:

mov ah,1 đặt con trỏ vào vị trí đầu tiên của xâu

int 21h Ngắt để chuyển sang màn hình và bắt đầu nhập các kí tự

cmp al,13

je thoinhap

mov [si],al

inc si

inc cx

jmp nhap

thoinhap:

mov n,cl

lai:

mov cl,n

xor ax,ax

Hiển thị ra màn hình dòng thông báo tb1

và đưa kích thước xâu A vào SI, đặt cx=0 Chương trình chính

kiểm tra các ký tự vừa nhập vào al đã kết thúc chưa, (kết thúc nhập bằng việc ấn phím Enter), nếu như kết thúc bằng phím Enter

thì sau khi nhập và hiển thị hết các kí tự thì sẽ nhảy tới thoinhap

Nhập tuần tự các ký tự mà đã nhập từ bàn phím vào SI thông qua al

Trang 11

mov dem,0 đặt giá trị cho dem = 0

lea si,A

sosanh:

cmp [si],61h

je tangdem

jmp lap

tangdem:

inc dem

lap:

inc si

loop sosanh

; hienthi

mov ah,9

lea dx,tb2

int 21h

xor ax,ax

mov al,dem

chia:

div c

xor bx,bx

mov bl,ah

push bx

inc cx

Kiểm tra xâu ký tự đã nhập trong SI với ký

tự “a” =61h Nếu mà có ký tự trùng với a

thì nhảy đến tangdem còn không thì nhảy

đến lap

Tăng SI thêm 1( tức là đến ký tự tiếp theo) và lặp lại

đoạn chương trình sosanh

Hiển thị thông báo tb2

Chuyển số lần đếm được ký tự “a”

thành ký tự (là một từ) và cất từ đó vào ngăn xếp, nếu al mà bằng 0 (tức

là không nhập gì từ bàn phím) thì

nhảy tới hienthi

Trang 12

cmp al,0

je hienthi

xor dx,dx

mov dl,al

xor ax,ax

mov ax,dx

jmp chia

hienthi:

xor dx,dx

layra:

pop dx

add dl,30h

mov ah,2

int 21h

loop layra

mov ah,9

lea dx,tb3

int 21h

mov ah,1

int 21h

cmp al,79h

je lai

; ve dos

mov ah,4ch

Chuyển số vừa nhận được sang dạng chữ (hay chữ

số)

So sánh ký tự vừa nhập có phải là “y” =

79h không, nếu đúng thì nhảy về lai

Hiển thị thông báo tb3 ra màn hình và

đưa con trỏ ở vị trí đầu tiên

Hiển thị thông báo tb3 ra màn hình và

đưa con trỏ ở vị trí đầu tiên

Lấy chức năng in ký tự ra màn hình

Thoát chương trình

Trang 13

int 21h

main endp

end main

6 Tài Liệu tham khảo:

1 Bài giảng Vi Xử Lý – Vi Điều Khiển, Bộ môn Kỹ Thuật Máy Tính, Trường ĐHKTCN Thái

Nguyên, năm 2011

2 Tống Văn On, Họ vi điều khiển 8051, NXB KH&KT, 2005

3 Mạng Internet, tailieuit.com, diendantdh.forum.com

Ngày đăng: 26/04/2016, 19:06

TỪ KHÓA LIÊN QUAN

w