1. Trang chủ
  2. » Công Nghệ Thông Tin

Tài liệu thực hành Vi xử lý BÀI 1: PHẦN MỀM MÔ PHỎNG 8086 MICROPROCESSOR EMULATOR (EMU8086) potx

19 1,9K 25

Đ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 19
Dung lượng 199,96 KB

Nội dung

 Cửa sổ chương trình sau khi khởi động:Thanh công cụ chuẩn Vùng không gian soạn thảo chương trình  Sử dụng thanh công cụ chuẩn: New: tạo file mới Save: lưu trữ file Emulate: biên dịch

Trang 1

BÀI 1: PHẦN MỀM MÔ PHỎNG 8086

MICROPROCESSOR EMULATOR (EMU8086)

 MỤC ĐÍCH

Giúp sinh viên khảo sát các vấn đề sau:

 Sử dụng phần mềm Emu8086 để mô phỏng hoạt động của vi xử lý 8086

 THIẾT BỊ SỬ DỤNG

 Máy vi tính

 Phần mềm Emu8086

1 Giới thiệu.

Phần mềm Emu8086 là phần mềm cho phép mô phỏng hoạt động của vi

xử lý 8086 bao gồm các câu lệnh cơ bản của 8086, xử lý ngắt mềm, giao tiếp với thiết bị ngoại vi, …

 Khởi động chương trình

 Start > All Program > emu8086 > emu8086

Trang 2

 Cửa sổ chương trình sau khi khởi động:

Thanh công cụ chuẩn Vùng không gian soạn thảo

chương trình

 Sử dụng thanh công cụ chuẩn:

New: tạo file mới Save: lưu trữ file

Emulate: biên dịch

và thực hiện mô Open: mở file có

sẵn

Compile: biên dịch file

phỏng

Các thao tác trên thanh công cụ chuẩn cũng có thể thực hiện thông qua menu File và menu Emulator

 Tạo và thực thi chương trình:

- Nhấn New trên thanh công cụ sẽ xuất hiện cửa sổ chọn loại file:

Trang 3

Nhấn Cancel để bỏ qua, cửa sổ soạn thảo của chương trình sẽ xuất hiện.

- Soạn chương trình hợp ngữ và nhấn vào nút Emulate để biên dịch và

mô phỏng chương trình

Sau khi biên dịch thành công (không có lỗi trong chương trình), Emu8086

sẽ mở thêm 2 cửa sổ: cửa sổ chương trình gốc và cửa sổ mô phỏng

Chương trình gốc:

Trang 4

Cửa sổ mô phỏng:

Nhấn Run để thực thi

- Nếu chương trình có lỗi, cửa sổ thông báo lỗi sẽ xuất hiện:

Dòng lỗi Lỗi tại dòng 11

Trang 5

Nhấn Close để quay lại cửa sổ soạn thảo.

 Cấu trúc chương trình 8086:

.model small

.stack 100h

.data

;Khai bao du lieu

.code

main proc

mov ax,@data mov ds,ax

;Chuong trinh hop ngu

mov ah,4Ch int 21h main endp

; Cac chuong trinh con

-Ctc1 proc

; Ma lenh cua chuong trinh con

ret Ctc1 endp

; -End

2 Cơ sở lý thuyết

2.1 Ngắt 21h

 Hàm 01h: nhập một ký tự từ bàn phím và hiện ký tự nhập ra màn hình Nếu

không có ký tự nhập, hàm 01h sẽ đợi cho đến khi nhập

- Trả về: AL chứa mã ASCII của ký tự nhập

 Hàm 02h: xuất một ký tự trong thanh ghi DL ra màn hình tại vị trí con trỏ

hiện hành

- Trả về: không có

Trang 6

INT 21h

 Hàm 08h: giống hàm 01h nhưng không hiển thị ký tự ra màn hình

 Hàm 09h: xuất một chuỗi ký tự ra màn hình tại vị trí con trỏ hiện hành, địa

chỉ chuỗi được chứa trong DS:DX và phải được kết thúc bằng ký tự $

- Gọi AH = 09h, DS:DX = địa chỉ chuỗi

- Trả về: không có

.DATA

 Hàm 0Ah: nhập một chuỗi ký tự từ bàn phím (tối đa 255 ký tự), dùng phím

ENTER kết thúc chuỗi

- Gọi AH = 0Ah, DS:DX = địa chỉ lưu chuỗi

- Trả về: không có

Chuỗi phải có dạng sau:

- Byte 0: Số byte tối đa cần đọc (kể cả ký tự Enter)

- Byte 1: số byte đã đọc

- Byte 2: lưu các ký tự đọc

.DATA

 Hàm 0Bh: kiểm tra phím nhấn trên bàn phím

Gọi: AH = 0Bh

Trả về: AL = 0FFh nếu có nhấn phím, AL = 0 nếu không nhấn phím

 Hàm 4Ch: kết thúc chương trình

2.2 Ngắt 10h

 Hàm 02h: Gọi AH = 02h, DH = dòng, DL = cột

Trang 7

3 Tiến trình thực hiện

3.1 Các lệnh cơ bản

- Bài 1.1: Thực hiện chương trình sau (cộng 49h với 8Ah):

.model small

.stack 100h

.data

msg db 'Hello$'

.code

main proc

mov ax,@data

mov ds,ax

mov al,49h

add al,8Ah

mov ah,4Ch

int 21h

main endp

; -End

- Nhấn vào nút Emulate để thực hiện mô phỏng

- Tại cửa sổ mô phỏng, chọn menu View > Flags để hiển thị nội dung

các cờ

Trang 8

Cửa sổ flags cho phép xem nội dung của các cờ:

- Nhấn nút Run thực thi chương trình và quan sát nội dung các cờ Giải

thích

- Bài 1.2: Thực hiện chương trình cộng 2 số và kiểm tra nội dung các cờ: CF, ZF, SF, OF, PF, AF Từ đó rút ra kết luận về mục đích của các

cờ này

- 0FFh + 01h

- 0FFh + 10h

- 40h + 55h

- 22h + 8Fh

Trang 9

- 99h + 7Ch

- Bài 1.3: Thực hiện lệnh nhân giữa 15h và 41h, 154h và 289Ah

- Bài 1.4: Thực hiện lệnh chia giữa 5623h và 14h, 3219154h và 9Ah

- Bài 1.5: Thực hiện lệnh dịch trái 1 bit, 2 bit, 3 bit giá trị 25h

- Bài 1.6: Thực hiện lệnh quay trái 1 bit, 2 bit, 3 bit giá trị 25h

- Bài 1.7: Thực hiện lệnh quay trái kết hợp với cờ carry 1 bit, 2 bit, 3 bit giá trị 25h

- Bài 1.8: Thực hiện lệnh dịch phải 1 bit, 2 bit, 3 bit giá trị 25h

- Bài 1.9: Thực hiện lệnh quay phải 1 bit, 2 bit, 3 bit giá trị 25h

- Bài 1.10: Thực hiện lệnh quay phải kết hợp với cờ carry 1 bit, 2 bit, 3 bit giá trị 25h

- Bài 1.11: Sử dụng lệnh IN để nhập dữ liệu và lệnh OUT để xuất dữ

liệu ra thiết bị ngoại vi có địa chỉ 110 Chú ý thêm vào chuỗi

#start=simple.exe# ở đầu chương trình để kiểm tra kết quả.

3.2 Sử dụng ngắt 21h và ngắt 10h

 Bài 1.12: Dùng hàm 09h xuất chuỗi ra màn hình:

.model small

.stack 100h

.data

msg db 'Hello$'

.code

main proc

mov ax,@data

mov ds,ax

lea dx,msg

int 21h

exit:

mov ah,4Ch

int 21h

main endp

Trang 10

; -End

 Bài 1.13: Bỏ dấu $ ở cuối chuỗi Hello, thực hiện lại chương trình và nhận xét kết quả

 Bài 1.14: Thực hiện giống như bài 1.12 nhưng thực hiện liên tục cho đến

khi nhấn một phím bất kỳ trên bàn phím thì dừng Gợi ý: dùng hàm 0Bh

để kiểm tra phím nhấn, nếu có nhấn phím thì kết thúc chương trình

.model small

.stack 100h

.data

msg db 'Hello$'

.code

main proc

mov ax,@data

mov ds,ax

lea dx,msg

int 21h

mov ah,0Bh

int 21h

cmp al,00h

jne exit

exit:

mov ah,4Ch

int 21h

Trang 11

end

 Bài 1.15: Xuất chuỗi ‘Hello’ ra màn hình tại hàng 10, cột 10 Gợi ý: dùng

hàm 02h của ngắt 10h chuyển toạ độ trước khi xuất chuỗi

 Bài 1.16: Nhập một ký tự từ bàn phím và xuất ký tự vừa nhập ra màn hình tại hàng 11, cột 10

.model small

.stack 100h

.data

msg db 'Hello$'

.code

main proc

mov ax,@data

mov ds,ax

int 21h

Trang 12

push ax ; Lưu ký tự vừa nhập

mov dx,0B0Ah

int 10h

pop ax

mov ah,02h

int 21h

mov ah,4Ch

int 21h

main endp

; -End

 Bài 1.17: Nhập một ký tự từ bàn phím và xuất ra màn hình ở dạng chữ

hoa Gợi ý: thêm một đoạn chương trình kiểm tra ký tự nhập, nếu là ký tự

chữ thường thì chuyển thành chữ hoa rồi xuất ta màn hình

ja next

next:

 Bài 1.18: Nhập liên tục các ký tự, xuất ra màn hình ở dạng chữ hoa và

kết thúc chương trình khi nhấn phím ESC Gợi ý: sau khi nhập thì

kiểm tra ký tự vừa nhập, nếu là ESC thì thoát (mã ASCII của phím ESC là 27 hay 1Bh)

cmp al,27

je exit

Trang 13

exit:

mov ah,4Ch

int 21h

 Bài 1.19: Dùng hàm 02h của ngắt 21h để xuất chuỗi:

.model small

.stack 100h

.data

msg db 'Hello$'

.code

main proc

mov ax,data

mov ds,ax

lap:

mov si,0

mov dl,msg[si]

cmp dl,'$'

je exit

mov ah,02h

int 21h

inc si

jmp lap

exit:

mov ah,4Ch

int 21h

main endp

end main

Trang 14

 Bài 1.20: Dùng hàm 02h của ngắt 21h để xuất chuỗi ‘Hello’ theo chiều

thẳng đứng bắt đầu tại hàng 1, cột 10 Gợi ý: dùng hàm 02h của ngắt

10h để di chuyển toạ độ con trỏ sau khi xuất một ký tự

H e l l o

 Bài 1.21: Xuất chuỗi ‘Hello’ theo đường chéo như hình vẽ bắt đầu tại hàng 1, cột 1

H e l l o

 Bài 1.22: Xuất chuỗi ‘Hello’ theo đường chéo như hình vẽ bắt đầu tại hàng 1, cột 40

H e l l o

 Bài 1.23: Di chuyển ký tự ‘A’ theo chiều ngang từ trái sang phải bắt đầu tại hàng 1, cột 1 và kết thúc tại hàng 1, cột 40

.model small

.stack 100h

.data

.code

main proc

Trang 15

mov dl,' ' ; Xuất ký tự khoảng trắng

int 21h

pop dx

jne lap

exit:

mov ah,4Ch

int 21h

mov ax,data

mov ds,ax

lap:

mov dh,1

push dx

int 21h

pop dx

mov ah,02h

int 10h

push dx

Trang 16

main endp

delay proc

push cx

mov cx,0fh

loop $

pop cx

ret

delay endp

end main

 Bài 1.24: Xoá đoạn chương trình in đậm trong bài 1.23, thực thi chương trình và kiểm tra kết quả

 Bài 1.25: Thực hiện chương trình 1.23 nhưng theo chiều thẳng đứng từ trên xuống bắt đầu tại hàng 1, cột 1 và kết thúc tại hàng 15, cột 1

 Bài 1.26: Thực hiện chương trình 1.23 nhưng theo chiều ngang từ phải sang trái bắt đầu tại hàng 1, cột 40 và kết thúc tại hàng 1, cột 1

 Bài 1.27: Thực hiện chương trình 1.23 nhưng theo chiều thẳng đứng từ dưới lên bắt đầu tại hàng 15, cột 1 và kết thúc tại hàng 15, cột 1

 Bài 1.28: Thực hiện chương trình 1.23 nhưng theo đường chéo như hình vẽ

Hàng 1, cột 1

Hàng 15, cột 15

 Bài 1.29: Thực hiện chương trình 1.23 nhưng theo đường chéo như hình vẽ

Hàng 1, cột 1

Hàng 15, cột 15

 Bài 1.30: Thực hiện chương trình 1.23 nhưng theo đường chéo như hình vẽ

Hàng 1, cột 15

Hàng 15, cột 1

Trang 17

 Bài 1.31: Thực hiện chương trình 1.23 nhưng theo đường chéo như hình vẽ

Hàng 1, cột 15

Hàng 15, cột 1

 Bài 1.32: Thực hiện chương trình 1.23 nhưng di chuyển ký tự như hình

vẽ, bắt dầu tại hàng 1, cột 1

Hàng 1, cột 1 Hàng 1, cột 10

Hàng 10, cột 1 Hàng 10, cột 10

Hàng 20, cột 1

 Bài 1.33: Nhập một chuỗi từ bàn phím và xuất chuỗi ra màn hình bằng cách dùng hàm 02h của ngắt 21h

.model small

.stack 10h

.data

db 101 dup(?)

.code

main proc

mov ax,@data

mov ds,ax

int 21h

Trang 18

mov si,2 ; Vị trí lưu ký tự nhập

lap:

mov dl,msg[si]

je exit

mov ah,02h

int 21h

inc si

jmp lap

exit:

mov ah,4Ch

int 21h

main endp

end main

 Bài 1.34: Thay giá trị ban đầu của SI tại dòng in đậm trong bài 1.33 bằng giá trị 0, thực thi chương trình và quan sát kết quả

 Bài 1.35: Nhập một chuỗi từ bàn phím và xuất chuỗi ra màn hình bằng cách dùng hàm 09h của ngắt 21h

Lưu ý là hàm 09h dùng để xuất chuỗi trong đó chuỗi bắt buộc phải kết

thúc bằng ký tự $ nên phải thêm ký tự này vào cuối chuỗi trước khi xuất.

.model small

.stack 10h

.data

msg db 101

db ?

db 101 dup(?)

.code

main proc

mov ax,@data

mov ds,ax

Trang 19

mov ah,0Ah

int 21h

mov al,msg[si]

mov ah,0

mov msg[si],al

lea dx,msg

add dx,2

int 21h

exit:

mov ah,4Ch

int 21h

main endp

end main

 Bài 1.36: Bỏ dòng in đậm trong bài 1.35, thực thi chương trình và quan sát kết quả

 Bài 1.37: Thực hiện bài 1.32 nhưng thay ký tự ‘A’ bằng chuỗi ‘LAP

TRINH HOP NGU’ Gợi ý: Thay thế hàm 02h trong bài 1.32 bằng hàm 09h (thêm ký tự $ vào cuối chuỗi).

Ngày đăng: 08/08/2014, 11:21

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

w