intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

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)

Chia sẻ: Đỗ Hồng | Ngày: | Loại File: PDF | Số trang:19

600
lượt xem
96
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

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, …

Chủ đề:
Lưu

Nội dung Text: 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)

  1. 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) 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 Vũ Đức Hòa Trang 1
  2. Tài liệu thực hành Vi xử lý Cửa sổ chương trình sau khi khởi động: Vùng không gian soạn thảo Thanh công cụ chuẩn 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ô phỏng Open: mở file có Co mpile: biên sẵn dịch file 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: Vũ Đức Hòa Trang 2
  3. Tài liệu thực hành Vi xử lý 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: Vũ Đức Hòa Trang 3
  4. Tài liệu thực hành Vi xử lý Nhấn Run để thực thi 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: Dòng lỗi Lỗi tại dòng 11 Vũ Đức Hòa Trang 4
  5. Tài liệu thực hành Vi xử lý 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 2 1 h 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ập MOV AH,01h ; AL chứa mã ASCII của ký tự nhập INT 21h 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' Vũ Đức Hòa Trang 5
  6. Tài liệu thực hành Vi xử lý 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 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 ; Đọc tối đa 100 ký tự Msg DB 101 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,4Ch INT 21h 2 .2 . Ng ắ t 1 0 h Hàm 02h: Gọi AH = 02h, DH = dòng, DL = cột MOV AH,02h MOV DX,0F15h INT 10h Vũ Đức Hòa Trang 6
  7. Tài liệu thực hành Vi xử lý 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ờ. Vũ Đức Hòa Trang 7
  8. Tài liệu thực hành Vi xử lý 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 Vũ Đức Hòa Trang 8
  9. Tài liệu thực hành Vi xử lý - 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 ; Xuất chuỗi ra màn hình mov ah,09h lea dx,msg int 21h exit: mov ah,4Ch int 21h main endp Vũ Đức Hòa Trang 9
  10. Tài liệu thực hành Vi xử lý ;----------- 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 ; Xuất chuỗi ra màn hình mov ah,09h lea dx,msg int 21h mov ah,0Bh int 21h cmp al,00h jne exit ; Xuất chuỗi exit: mov ah,4Ch int 21h Vũ Đức Hòa Trang 10
  11. Tài liệu thực hành Vi xử lý … 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 ; Nhập ký tự từ bàn phím mov ah,08h int 21h Vũ Đức Hòa Trang 11
  12. Tài liệu thực hành Vi xử lý ; Lưu ký tự vừa nhập push ax ; Chuyển toạ độ con trỏ mov ah,02h mov dx,0B0Ah int 10h pop ax ; Xuất ký tự mov dl,al 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. ; Nếu < ‘a’ cmp al,'a' ; hay > ‘z’ thì không phải là jb next ; chữ thường cmp al,'z' ja next ; Chuyển từ chữ thường -> hoa sub al,20h 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 Vũ Đức Hòa Trang 12
  13. Tài liệu thực hành Vi xử lý … 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 Vũ Đức Hòa Trang 13
  14. Tài liệu thực hành Vi xử lý 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 Vũ Đức Hòa Trang 14
  15. Tài liệu thực hành Vi xử lý mov ax,data mov ds,ax mov dh,1 ; Hàng 1, cột 1 mov dl,1 lap: ; Gọi hàm 02h của ngắt 10h mov ah,02h ; để chuyển toạ độ int 10h push dx ; Gọi hàm 02h của ngắt 21h mov dl,'A' ; đ ể xuấ t ký tự mov ah,02h int 21h pop dx ; Tạo thời gian trễ call delay mov ah,02h int 10h push dx ; Xuất ký tự khoảng trắng mov dl,' ' ; để xoá ký tự cũ mov ah,02h int 21h pop dx ; Chuyển sang cột kế inc dl ; Đến cột 41 thì dừng cmp dl,41 jne lap exit: mov ah,4Ch int 21h Vũ Đức Hòa Trang 15
  16. Tài liệu thực hành Vi xử lý 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 Vũ Đức Hòa Trang 16
  17. Tài liệu thực hành Vi xử lý 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 10 Hàng 1, cột 1 Hàng 10, cột 10 Hàng 10, cột 1 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 ; Chuỗi có tối đa 100 ký tự msg db 101 ; Số ký tự thực tế db ? db 101 dup(?) .code main proc mov ax,@data mov ds,ax ; Hàm 0Ah nhập chuỗi mov ah,0Ah ; DX chứa địa chỉ chuỗi lea dx,msg int 21h Vũ Đức Hòa Trang 17
  18. Tài liệu thực hành Vi xử lý ; Vị trí lưu ký tự nhập mov si,2 lap: mov dl,msg[si] ; Phím Enter thì kết thúc cmp dl,13 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 Vũ Đức Hòa Trang 18
  19. Tài liệu thực hành Vi xử lý mov ah,0Ah lea dx,msg int 21h ; Đọc số lượng ký tự nhập mov si,1 mov al,msg[si] mov ah,0 ; Kết quả chứa vào SI mov si,ax ; Thêm ‘$’ vào cuối chuỗi mov al,'$' mov msg[si],al ; Gọi hàm 09h xuất chuỗi mov ah,09h 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). Vũ Đức Hòa Trang 19
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
3=>0