bai1-emu8086

18
 Tài li u thự c hành Vi x ử  GV: Phm Hùng Kim Khánh Trang  1 BÀI 1: PHN MM MÔ PHNG 8086 MICROPROCESSOR EMULATOR (EMU8086)   MC ĐÍCH Giúp sinh viên kho sát các vn đề sau:  S dng phn mm Emu8086 để mô phng hot động ca vi x lý 8086.  THIT B SỬ  DNG  Máy vi tính.  Phn mm Emu8086 1. Giớ i thiu. Phn mm Emu8086 là phn mm cho phép mô phng hot động ca vi x lý 8086 bao gm các câu lnh cơ  bn ca 8086, x lý ngt mm, giao tiế  p vớ i thiết b ngoi vi, …  Khở i động chươ ng trình  Start > All Program > emu8086 > emu8086

Transcript of bai1-emu8086

Page 1: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 1/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  1

BÀI 1: PHẦN MỀM MÔ PHỎNG 8086MICROPROCESSOR 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ớ ithiết bị ngoại vi, …

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

  Start > All Program > emu8086 > emu8086

Page 2: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 2/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  2

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

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

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:

Compile: biên

dịch file

Open: mở file có

sẵn

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

Emulate: biên dịch

và thực hiện mô

 phỏng

Vùng không gian soạn thảochươ ng trình

Thanh công cụ chuẩn

Page 3: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 3/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh 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:

Page 4: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 4/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  4 

Cửa sổ mô phỏng:

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

 Nhấn Run để thực thi

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

Page 5: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 5/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh 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ết2.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.-  Gọi: AH = 01h

Tr ả về: AL chứa mã ASCII của ký tự nhậ pMOV AH,01h

INT 21h ; 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

-  Gọi AH = 02h, DL = mã ASCII của ký tự -  Tr ả về: không có

MOV AH,02h

MOV DL,'A'

Page 6: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 6/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh 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, địachỉ 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

Msg DB 'Hello$'

MOV AH,09h

LEA DX,Msg

INT 21h

  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

Msg DB 101 ;  Đọc tối đa 100 ký tự DB ?

DB 101 DUP(?)…

MOV AH,0Ah

LEA DX,Msg

INT 21h

  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

MOV AH,4ChINT 21h

2.2.  Ngắt 10h  Hàm 02h: Gọi AH = 02h, DH = dòng, DL = cột

MOV AH,02h

MOV DX,0F15h

INT 10h

Page 7: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 7/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  7 

3. Tiến trình thự c hiện3.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ờ .

Page 8: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 8/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh 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ảithí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áccờ : CF, ZF, SF, OF, PF, AF. Từ đó rút ra k ết luận về mục đích của cáccờ này.

-  0FFh + 01h-  0FFh + 10h-  40h + 55h-  22h + 8Fh

Page 9: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 9/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh 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 bitgiá 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

mov ah,09h ; Xuất chuỗi ra màn hình

lea dx,msg

int 21h

exit:

mov ah,4Ch

int 21h

main endp

Page 10: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 10/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh 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ậnxé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 đếnkhi 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.

mov ah,0Bh

int 21h

cmp al,00h

jne exit

; Xuất chuỗi

exit:

  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ùnghà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ìnhtại hàng 11, cột 10..model small

.stack 100h

.data

msg db 'Hello$'

.code

main proc

mov ax,@data

mov ds,ax

mov ah,08h ; Nhập ký tự từ bàn phím

int 21h

Page 11: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 11/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  11

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

mov ah,02h ; Chuyển toạ độ con trỏ 

mov dx,0B0Ah

int 10h

pop ax

mov dl,al ; Xuất ký tự 

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.

cmp al,'a' ; Nếu < ‘a’

jb next ; hay > ‘z’ thì không phải là

cmp al,'z' ; chữ thường

ja next

sub al,20h ; Chuyển từ chữ thường -> hoa

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ímESC là 27 hay 1Bh).

cmp al,27

je exit

Page 12: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 12/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  12

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

mov si,0

lap:

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

Page 13: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 13/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  13

  Bài 1.20: Dùng hàm 02h của ngắt 21h để xuất chuỗi ‘Hello’ theo chiềuthẳng đứng bắt đầu tại hàng 1, cột 10. Gợ i ý: dùng hàm 02h của ngắt10h để di chuyển toạ độ con tr ỏ sau khi xuất một ký tự.

  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.

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

  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

H

e

l

l

o

H

e

l

l

o

H

e

l

l

Page 14: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 14/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  14 

mov ax,data

mov ds,ax

mov dh,1

mov dl,1 ; Hàng 1, cột 1

lap:

mov ah,02h ; Gọi hàm 02h của ngắt 10h

int 10h ; để chuyển toạ độ 

push dx

mov dl,'A' ; Gọi hàm 02h của ngắt 21h

mov ah,02h ; để xuất ký tự 

int 21h

pop dx

call delay ; Tạo thời gian trễ 

 mov ah,02h

int 10h

 push dx

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

  mov ah,02h ;để xoá ký tự  cũ 

int 21h

 pop dx

inc dl ; Chuyển sang cột kế 

cmp dl,41 ;  Đến cột 41 thì dừng

jne lap

exit:

mov ah,4Ch

int 21h

Page 15: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 15/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  15

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 thichươ 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ảisang 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ẽ.

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

  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 1

Hàng 15, cột 15

Hàng 1, cột 1

Hàng 15, cột 15

Hàng 1, cột 15

Hàng 15, cột 1

Page 16: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 16/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  16 

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

  Bài 1.32: Thực hiện chươ ng trình 1.23 nhưng di chuyển ký tự như hìnhvẽ, bắt dầu tại hàng 1, 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ằngcách dùng hàm 02h của ngắt 21h.

.model small

.stack 10h

.data

msg db 101 ; Chuỗi có tối đa 100 ký tự 

db ? ; Số ký tự thực tế 

db 101 dup(?)

.code

main proc

mov ax,@data

mov ds,ax

mov ah,0Ah ; Hàm 0Ah nhập chuỗi

lea dx,msg ; DX chứa địa chỉ chuỗi

int 21h

Hàng 1, cột 15

Hàng 15, cột 1

Hàng 1, cột 10

Hàng 10, cột 1

Hàng 1, cột 1

Hàng 10, cột 10

Hàng 20, cột 1

Page 17: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 17/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  17 

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

lap:

mov dl,msg[si]

cmp dl,13 ; Phím Enter thì kết thúc

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ằngcá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 ếtthú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

Page 18: bai1-emu8086

5/10/2018 bai1-emu8086 - slidepdf.com

http://slidepdf.com/reader/full/bai1-emu8086 18/18

Tài li ệ u thự c hành Vi x ử lý

GV: Phạm Hùng Kim Khánh Trang  18

mov ah,0Ah

lea dx,msg

int 21h

mov si,1 ; Đọ

c sốlượng ký t

ựnh

ập

mov al,msg[si]

mov ah,0

mov si,ax ; Kết quả chứa vào SI

mov al,'$' ; Thêm ‘$’ vào cuối chuỗi

mov msg[si],al

mov ah,09h ; Gọi hàm 09h xuất chuỗi

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à quansá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 ‘LAPTRINH HOP NGU’. Gợ i ý: Thay thế hàm 02h trong bài 1.32 bằnghàm 09h (thêm ký tự $ vào cuối chuỗi).