Professional Documents
Culture Documents
Chuong 3 - TrinhHopNgu 8086-8088
Chuong 3 - TrinhHopNgu 8086-8088
CHƯƠNG 3:
Label – có thể có hoặc không, là một chuỗi ký tự
Ký tự đầu tiên cần là a-z,A-Z,?,@,_,$, không trùng với
lệnh
gợi nhớ, ký tự cuối cùng phải là “:”
Operator – là lệnh hợp ngữ
mnemonic: là lệnh gợi nhớ tương ứng với một chức năng cơ bàn
Assembler đổi mã mnemonic thành mã máy của OP CODE
ví dụ: mov là f8h
Operand[s] - 0 tới 3 phần chỉ thị dữ liệu yêu cầu trong lệnh
Có thể ở một số dạng khác nhau
Cách nhau bằng dấu phẩy “,”
immediate, register name, memory data, memory address
Comment – là phần giải thích rất hữu dụng trong hợp ngữ
Các thành phần của dòng lệnh cách nhau bằng khoảng trắng (tab, blank, \n, etc.)
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 3
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Ví dụ về dòng lệnh hợp ngữ
Label - INIT:
Operator - mov
Operands - ax và bx
Comment - là chuỗi ký tự nằm sau dấu ; và \n
• Không giống các lệnh hợp ngữ của các CPU khác, toán hạng
đích đứng trước.
•mov là mã gợi nhớ mnemonic trình hợp dịch sẽ đổi thành một
opcode
.data
dos_print EQU 9 ;define a constant
strng DB 'Hello World',13,10,'$' ;Define the character string
.code
START: mov ax, SEG strng ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
lea dx,strng ;dx <-- beginning of string
int 21h ;DOS service interrupt
mov ax, 4c00h ;ax <-- 4c DOS 21h program halt function
int 21h ;DOS service interrupt
END START
Chương trình dịch ra dạng .exe, ngăn xếp, dữ liệu và chương trình có thể khác
đoạn
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 12
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Thêm một cách khác để định nghĩa các đoạn
Yet another way to define Segs
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; Use .stack,.data,.code directives to define segment types ;
; Sử dụng các chỉ thị .stack, .data, .code để định nghĩa các đoạn ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
.stack 100h ; reserve 256 bytes of stack space
.code
Begin: mov ax, SEG strng ;ax <-- data segment start address
mov ds, ax ;ds <-- initialize data segment register
mov ah, dos_print ;ah <-- 9 DOS 21h string function
mov dx,OFFSET strng ;dx <-- beginning of string
int 21h ;DOS service interrupt
int 20h ;DOS service interrupt
END START
Chương trình dịch ra dạng .exe, ngăn xếp, dữ liệu và chương trình có thể khác đoạn
end label kết thúc chương trình với label là điểm vào
proc far|near bắt đầu một thủ tục, từ khoá far, near chỉ thị
thủ tục ở khác đoạn với chương trình chính (far),
hoặc ở cùng đoạn với chương trình chính (near)
endp kết thúc thủ tục
page thiết lập một trang trong listing file
title tựa đề của listing file
.code bắt đầu của code segment
.data bắt đầu của data segment
.stack kích thước của stack segment
Ví dụ:
db 100 dup (?) define 100 bytes, with no initial values for bytes
Định nghĩa 100 byte không có giá trị khởi động
db “Hello” define 5 bytes, ASCII equivalent of “Hello”.
Định nghĩa 5 byte có mã ASCII tương ứng là “Hello”
maxint equ 32767
count equ 10 * 20 ; count = 200, calculate a value (200)
1) write a program
a. calculate the sum of 4 words (each 16 bit data)
b. data are 1234H, 03FDH, 4FD3H and 11FFH
c. data is located at offset address of 0, 2, 4, 6
d. code starts at address 10H
e. the result should be stored in location 8,9
f. save your program including the data
g. run the program and write the sum.
h. In your email you should attach the file and write the sum value in your email.
i. The name of the file should be your firstname_lastname.com
j. Note that finding how to save the file in debug is your responsibility
2) write an assembly program and the compile it using masm and link
a. move data from location of memory to another.
b. Source data is “Salam your_first_name”
c. Put separate code and data segment for your code
d. Put some spaces in your data segment for destination
e. Use masm and link and include .asm, .lst, .exe files in your email.
f. The name of the file should be hw2
Hoặc khung
chương
trình .exe
Đúng
Công việc
• Ví dụ : Viết đoạn chương trình xoá AH về 0 khi giá trị của nó lớn hơn 03
• CMP AH,03
• JNA THOAT
• MOV AH,0
• THOAT:
• Ví dụ : Tìm số nhỏ hơn trong hai số chứa trong AH và BH gán cho AL.
CMP AH,BH ;AH<BH?
JL GAN ; Nếu đúng gán AH cho AL
MOV AL,BH ; Nếu không lấy số nhỏ hơn trong BH vào AH
JMP RA
GAN:MOV AL,AH ; AL sẽ chứa số nhỏ hơn.
RA:
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 35
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
CÁC CẤU TRÚC LỰA CHỌN
Biểu thức
……
Công việc 1 Công việc 2 Công việc N
.stack 100h
.data
X db ‘0’
.code
St:Mov ax,@data
Mov ds,ax
Mov ah,01
Int 21h
Mov ah,02
Mov dl,al
Int 21h
Mov ah,4ch
Int 21h
End st
www.ptit.edu.vn GIẢNG VIÊN: THS. PHẠM THẾ DUY Trang: 46
KỸ THUẬT VI XỬ LÝ BỘ MÔN: ĐIỀU KHIỂN VÀ XỬ LÝ TÍN HIỆU
Ví dụ nhập hai số cộng và hiển thị kết quà
.stack 100h
.data
X db ‘0’
.code
St:Mov ax,@data
Mov ds,ax
Mov ah,01
Int 21h
Mov bl,al
Mov ah,01
Int 21h
Add al,bl
Aaa
Add ax,3030h
Mov ah,02
Mov dl,al
Int 21h
Mov ah,4ch
Int 21h
End st
• Ví dụ 2: Viết chương trình nhập vào từ bàn phím một ký tự thường,
thông báo lỗi cho phép nhập lại khi nhập sai, và sau đó hiển thị ký tự hoa
tương ứng với nó trên dòng tiếp theo.
• Giải :
– Để đơn giản có thể chia chương trình thành nhiều chức năng nhỏ như sau:
– Hiển thị thông báo nhập ký tự thường.
– Chờ nhập ký tự và kiểm tra, nếu sai hiển thị thông báo nhập lại.
– Đổi thành ký tự hoa tương ứng, hiển thị thông báo cùng ký tự hoa trên dòng
tiếp theo.
• .Model Small
• .Stack 100h
• .Data
• CR equ 0dh
• LF equ 0ah
• Tb1 db CR, LF, ‘Nhap vao mot ky tu thuong : $’
• Tb2 db CR, LF, ‘Nhap sai – nhap lai: $’
• Tb3 db CR, LF, ‘Ký tự hoa tương ứng với nó là :’
• Char db ?,’$’
• .Code
• Main proc
• Mov ax,@data ;khởi tạo ds
• Mov ds,ax ;hiện thông báo nhập ký tự
• Mov ah,09
• Lea dx,tb1
• Int 21h
• NHAP:Mov ah,01 ; nhập ký tự từ bàn phím
• Int 21h
• ;kiểm tra có phải là một ký tự thường hay không
• Cmp al,61h
• Jb SAI
• Cmp al,7ah
• Jbe DUNG