Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 2 Hình 1.2 Cửa sổ chương trình sau khi khởi động Hình 1.3 Thanh công cụ chuẩn Các thao tác trên thanh công cụ chuẩn cũng có t
Trang 1MỤ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 các thiết bị ngoại vi…
Khởi động chương trình:
PHẦN MỀM MÔ PHỎNG 8086 MICROPROCESSOR EMULATOR 8086
(EMU8086)
Trang 2Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 2
Hình 1.2 Cửa sổ chương trình sau khi khởi động
Hình 1.3 Thanh công cụ chuẩn Các thao tác trên thanh công cụ chuẩn cũng có thể được thực hiện thông qua menu
File và menu Emulator
Tạo và thực hiện chương trình
Nhấn [[[[New New New]]]] trên thanh công cụ sẽ xuất hiện cửa sổ chọn loại file
Trang 3Hình 1.4 Cửa sổ chọn loại file Chương trình của chúng ta thường có dạng COM hoặc EXE do đó ta thường chọn file dạng COM hoặc EXE
Nhấn phím [[[[ OKOKOK ]]]] cửa sổ soạn thảo của chương trình sẽ xuất hiện
Trang 4Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 4
Hình 1.5 cửa sổ soạn thảo chương trình Sau khi soạn thảo xong chương trình hợp ngữ, ấn vào nút Emulate để biên dịch và
mô phỏng chương trình
Sau khi biên dịch nếu có lỗi cửa sổ thông báo lỗi sẽ xuất hiện
Trang 5Hình 1.6 Cửa sổ thông báo lỗi Nhấn [[[[ closecloseclose ]]]] để quay về cửa sổ soạn thảo để sửa lại lỗi
Trong trường hợp không có lỗi EMU8086 sẽ mở thêm 2 cửa sổ: Cửa sổ chương trình
và cửa sổ mô phỏng
Chương trình gốc:
Hình 1.7 Cửa sổ chương trình gốc
Trang 6Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 6
Hình 1.8 Cửa sổ mô phỏng Chương trình mô phỏng có 2 chế độ là chạy từng lệnh và chạy tất cả các lệnh Nếu muốn chạy từng lệnh nhấn phím [[[[ Single stepSingle stepSingle step ]]]] hoặc ấn phím nóng F8
Nếu muốn chạy từng lệnh nhấn phím [ Run ] hoặc ấn phím nóng Shift + F8
Trang 7Ch ế độ chạy tất cả lệnh
Chế độ chạy từng lệnh
Hình 1.9 Hướng dẫn chạy lệnh Tùy thuộc vào yêu cầu của chương trình chúng ta có thể xem nội dung của stack, flags…
2 MỘT SỐ CHƯƠNG TRÌNH
a Một số hàm thường dùng đơn giản
Hàm 1
Vào một phím Vào AH = 1 Ra: AL = mã ASCII nếu một phím ký tự được ấn
= 0 Nếu một phím điều khiển hay chức năng được ấn
Hàm 2
Hiển thị một ký tự hay thi hành một chức năng điều khiển Vào: AH = 2
DL = mã ASCII của ký tự hiển thị hay điều khiển
Trang 8Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 8
Hàm 9
Hiển thị một chuỗi Vào: AH = 9
DX = Địa chỉ offset của chuỗi cần hiển thị, chuỗi phải kết thúc bằng ký tự $ Ra: Không
Hàm 4CH
Thoát khỏi chương trình Vào: AH = 4CH
Ra: Không
b Một số ví dụ
Ví dụ 1:
Viết chương trình hiển thị “welcome to assembly language…” lên màn hình
Bài làm
.model small
.stack 100h
.data
Mess DB ‘welcome to assembly language… $’
CRLF DB 10,13,’$’
.Code
Main Proc
; khởi đầu đoạn DS
Mov AX,@Data Mov DS,AX Mov ES,AX ; Nếu cần
; Hàm hiển thị chuỗi ký tự lên màn hình
Mov AH,9 Lea DX,Mess Int 21h
; Thoát khỏi chương trình
Mov AH,4CH Int 21h Main Endp End Main
Trang 9Ví dụ 2:
Nhập vào 2 số có tổng nhỏ hơn 10, tính tổng và hiển thị lên màn hình
Bài làm
.model small
.stack 100h
.data
Mess1 DB ‘Nhap vao so thu nhat… $’
Mess2 DB ‘Nhap vao so thu hai… $’
Mess3 DB ‘Tong hai so vua nhap la… $’
CRLF DB 10,13,’$’
.Code
Main Proc
; khởi đầu đoạn DS
Mov AX,@Data Mov DS,AX Mov ES,AX ; Nếu cần
; Hàm hiển thị chuỗi ký tự lên màn hình
Mov AH,9 Lea DX,Mess1 Int 21h
; Hàm nhập vào số thứ nhất
Mov AH,1 Int 21h ; Mã ASCII nằm trong AL Mov BL,AL ; lưu AL vào BL
; Hàm xuống dòng, hiện thông báo nhập số thứ hai
Mov AH,9 Lea DX,CRLF Int 21h
; Hiển thị dòng thông báo thứ 2
Lea DX,Mess2 Int 21h
; Hàm nhập vào số thứ hai
Mov AH,1 Int 21h ; Mã ASCII nằm trong AL
Trang 10Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 10
ADD BL,AL ; BL = BL + AL (Tính tổng) SUB BL,30H ; Trừ tổng để lấy mã ASCII
; Hàm xuống dòng,
Mov AH,9 Lea DX,CRLF Int 21h
; Hàm xuống dòng, hiện thông báo nhập số thứ hai
Mov AH,9 Lea DX,Mess3 Int 21h
; Hàm hiển thị một ký tự
Mov AH,2 Mov DL,BL Int 21h
; Thoát khỏi chương trình
Mov AH,4CH Int 21h Main Endp End Main
Ví dụ 3:
Giả thiết thanh ghi AX có dạng sau:
Thực hiện chương trình chuyển AX thành dạng sau
Ví dụ trước chương trình AX = 1234h
Sau chương trình AX= 4321h
Bài làm
.model small
.stack 100h
.data
.Code
Main Proc
Trang 11; khởi đầu đoạn DS
Mov AX,@Data Mov DS,AX Mov ES,AX ; Nếu cần
Mov CL,8 Rol AX,CL ; đổi nội dung 2 thanh ghi AH và AL
; Xchg AH,AL Mov Cl,4
Rol AH,cl Rol AL,cl
; Thoát khỏi chương trình
Mov AH,4CH Int 21h Main Endp End Main
Ví dụ 4:
Nhập vào một số n < 10 bất kỳ Tính N! kết quả được lưu trong BX
Bài làm:
.model small
.stack 100h
.data
Mess1 DB ‘Nhap vao so muon tinh… $’
CRLF DB 10,13,’$’
.Code
Main Proc
; khởi đầu đoạn DS
Mov AX,@Data Mov DS,AX Mov ES,AX ; Nếu cần
; Hàm hiển thị chuỗi ký tự lên màn hình
Mov AH,9
Trang 12Nguyễn Anh Dũng - Khoa Điện Tử Đại Học Công Nghiệp Hà Nội 12
Lea DX,Mess1 Int 21h
; Hàm nhập vào số thứ nhất
Mov AH,1 Int 21h ; Mã ASCII nằm trong AL
Mov BL,AL ; lưu AL vào BL And BL,0Fh ; Chuyển BL sang dạng số
; SUB BL,30H Mov AX,1
Xor CX,CX Mov CL,BL ; chuyển số vào CX để thực hiện tính giai thừa Nhan:
Mul CX Loop Nhan ; DXAX chua N!
Mov BX,AX
; Thoát khỏi chương trình
Mov AH,4CH Int 21h Main Endp End Main