Xem mẫu
- Lập trình cho 8051: Số học và
p
lôgic
Bài 4
Bộ môn TĐ
Khoa KTĐK
- Các chủ đề
• Phép tính số học có dấu và không dấu
• Số nhị phân và mã BCD
• Lệnh cộng
• Lệnh trừ
• Lệnh nhân
• Lệnh chia
• Các phép toán lôgic
• Các phép toán quay vòng và dịch
• Địa hỉ h á
Đị chỉ hoá bộ nhớ theo bit và các lệnh đơn bit
hớ th à á lệ h đ
- Phép cộng không dấu
• Add A, source ; A=A+source
• Có nhớ thì bit nhớ được lưu vào cờ CY
ợ
mov A, #0F5H
add A, #0BH
, ; A=F5+B0=00, CY=1
,
• Phép cộng số 16 bit
– Addc A, source ; A=A+source+CY
,
– Cộng các byte thấp sử dụng lệnh add
– Ghi kết quả
– cộng các byte cao hơn sử dụng addc
- Phép cộng không dấu
• Ví dụ về p p cộng 16 bit
ụ phép ộ g
• Cộng UUVV và PPQQ
clr C
mov A, QQ
add A, VV
mov r6, A
mov A, PP
addc A, UU
mov r7, A
• Kết quả 16 bit cuối cụng trong r7:r6 và cờ CY
ế ố
- Phép cộng BCD
• BCD - số thập phân được mã hoá bởi số nhị phân
– 4 bit đ
được sử d
ử dụng để biểu diễn số thập phân từ 0-9
biể diễ ố thậ hâ 09
• Hai số trong mã BCD được biểu diễn trong 1 byte
– 17 PBCD = 17 D = 11H
• Phép cộng số BCD có thể không tạo ra số BCD hợp lệ. Do vậy
phải dùng lệnh chuẩn hoá số BCD (da A) để làm chính xác nó
• Sau khi cộng 2 số BCD gọi lệnh d để chuẩn h số PBCD
ố i l h da h ẩ hoá ố
mov A, #47H ; số BCD đầu tiên = 47d
mov B, #25H
B ; số BCD thứ hai = 25d
add A, B ; A=6Ch (kết quả cộng nhị phân của 47H
và 25H)
da A ; A=72H (kết quả của phép cộng BCD)
- Phép cộng BCD
• Để chính xác một số BCD không hợp lệ, cộng 6 vào
số đó nếu nó lớn hơn 9
• Lệnh da thực hiện
– Nếu phần thấp lớn hơn 9 hoặc AC =1 thì cộng 6 (0110) vào
phần thấp
hầ hấ
– Nếu phần cao lớn hơn 9 hoặc CY=1 thì cộng 6 vào phần cao
• Lệ h da chỉ thự hiệ với lệnh cộng ADD Với các
Lệnh d hỉ thực hiện ới lệ h ộ ADD. á
lệnh khác (inc, sub vv...), thì việc làm chính xác nó
được thực hiện thủ công (bằng tay)
- Phép trừ không dấu
• Subb x, y ; x=x-y có mượn từ CY
• Thao tác:
– Biến đổi số bị trừ sang số bù hai (y)
– Cộng nó với số trừ (x)
– Nếu cờ CY được thiết lập sau khi thực hiện phép trừ, thì kết
trừ
quả là một số âm và đưa ra kết quả là số bù hai
• lệnh subb thực hiện trừ có mượn, nếu CY được thiết
lập trước lệnh call. Được sử dụng để thực hiện phép
ể
trừ số 16 bit
– Để thực hiện phép trừ đơn giản xoá CY trước khi gọi lệnh
giản,
subb
- Phép ừ không dấu
Phé trừ khô dấ
• Ví dụ
clr c ; clear CY for sub operation
mov A, #4CH ;
subb A, #6EH ; two operands, do 4C – 6E
jnc done ; if CY==0 result is positive
cpl A ; CY=1, result negative. So find 2’s complement
inc A ; by complementing A and adding 1 to it
done: mov R1, A ; final result in R1
• Trừ 16 bit 2762H-1296H
clr C ; clear Cy
mov A, #62H ;
subb A #96H
A, ; 62H – 96H = CCH and CY=1 CY 1
mov R7, A ; store the lower byte of the result in R7
mov A, #27H ; now subtract the upper bytes
subb A, #12H ; 27H – 12H – 1 = 14H
mov R6, A, ; store upper byte of result in R6.
pp y
; Final 16bit result is in R6:R7
- Phép nhân và phép chia
• MUL AB; AxB, đặt kết quả vào BA
mov A, #25H
A ; operand1: 25H
mov B, #65H ; operand2: 65H
mul AB ; 25H * 65H = E99H
; B = 0EH, A = 99H
• DIV AB; A/B, Thương số đặt vào A và số dư
chứa trong B
h
mov A, #95H
mov B, #10
B
div AB ; A = 9 (quotient), B = 5 (remainder)
- Phép tí h ố học ó dấu
Phé tính số h có dấ - Nội dung
d
• Giới thiệu về số có dấu
– Sử dụng một bit làm bit dấu
– Bit cao nhất MSB được gán cho bit dấu
– Các bit còn lại biểu diễn giá trị
• 8051 chỉ có các thanh ghi 8 bit
– Các số có dấu có thể chỉ có 7 bit giá trị
g ị
– Các số dương trong 8051 = 0 tới +127 (7 bit)
– Các số âm từ -128 đến -1
128 1
- Phép tí h ố học ó dấu Các ố âm
Phé tính số h có dấ – Cá số â
• Biểu diễn số âm với số có dấu
– Bit dấu (bit cao nhất) là 1
– Giá trị biểu diễn dưới dạng số bù 2
• Các ví dụ
- Các số có dấu – Cách dùng
• Dữ liệu đựoc tạp trung và lưu lại như một
mảng của các số có dấu
– Một số phần tử trong mảng có thể là âm, còn các
phần tử khác có thể là dương
– Việ xác đị h các số d
Việc á định á ố dương thông qua MSB Nếu
hô MSB. Nế
MSB = 1, số đó là số âm
• Giống như các phép toán số học (ađ sub mul,
(ađ, sub, mul
div …) có thể cần phải thực hiện trên các phần
tử mảng và kết quả có thể là âm hoặc dương
mảng,
- Phép tính số học có dấu
• 8051 biểu diễn số âm trong lệnh sub. Nhưng
không đủ
• Khi cần sử dụng các số có dấu, người lập trình
phải sử dụng phép tính số học có dấu
• Hiện tượng tràn phải được xử lý. Cờ nhớ là
không đủ bởi vì chỉ có 7 bit mang giá trị của số
có dấu.
ấ
• 8051 đưa ra một cờ khác – OV (cờ tràn) cho
mục đích này
- Phép tính số học có dấu
• Phép cộng
• Phép trừ
- Hiện tượng tràn
• Cờ tràn có thể xuất • Ví dụ
hiện từ các giá trị
của các số có dấu,
ố ấ
cờ này có thể thay
đổi bit dấu
dấ
• Cờ tràn được kiểm
tra
t để phát hiện lỗi
hát hiệ
trong phép tính số
học có dấu
- Cờ OV
• Sau khi thực hiện các phép tính số học, OV được thiết
lập nếu:
– Có nhớ từ D6 sang D7 nhưng không nhớ từ D7
– Nhớ từ D6 nhưng không nhớ từ D6 sang D7
– Trong các trường h trên chỉ thị một kế quả sai trong phép
hợp h hị kết i h
tính
• Sau khi thực hiện phép tính số học với các số có dấu,
dấu
kiểm tra cờ OV để xác định lỗi
– Sử dụng lệnh jb PSW.2 hoặc j PSW.2
ụ g ệ j ặ jnb
– PSW.2 = OV
- • AND Các lệ h lô i
Cá lệnh lôgic
– Anl dest, source; dest=dest AND source
– Th ờ đ
Thường được sử dử dụng để che đi (đặt =0) một số bi trong
h (đặ 0) ộ ố bit
toán hạng
• OR
– Orl dest, source ; dest=dest OR source
– Thường được sử dụng để thiết lập một số bit trong toán
hạng
• XOR
– Xrl dest, source ; dest=dest XOR source
– Thường được sử dụng để xoá một thanh ghi, kiểm tra nếu
hai thanh ghi có giá trị giống nhau và đảo một số bit
• Bù
– Cpl A ;A A
A=A’
• Các lệnh trên không ảnh hưởng đến bất cứ cờ nào
- Lệnh so sánh
• CJNE
– Cjle dest, source, địa chỉ
– So sánh đích và nguồn và nhẩy tới địa chỉ chỉ ra nếu không
bằng
– Về cơ bản thì đay là phép trừ
mà không thay dổi các toán hạng
nhưng ảnh hưởng đến cờ CY
– Dest > source => CY=0
– dest < source => CY=1
• Ví dụ
– Giám sát P1 liên tiếp
và thoát nếu P1=63
ế
- Lệnh quay vòng và đổi chỗ
• Quay vòng các bit được yêu cầu trong một số ứng dụng như ở
cổng nối tiếp, điều khiển …
• Quay phải
– Rr A ; quay A sang phải
• Quay trái
– Rl A ; quay A sang trái
• Quay sang phải/trái với cờ nhớ
– Dùng CY trong số quay (quay 9 bit)
– Rlc A: D7→CY →D0
– Rrc: D0 →CY →D7
• Đổi chỗ
– Swap A ; Đổi chỗ D7-D4 với D3-D0
- Các lệnh đơn bit
• Thiết lập một bit
– Set bit_name ; bit=1
• Xoá một bit
– Clr bit_name ; bit=0
• Lấy bù một bit
– Cpl bit_name ; bit=bit’
p
• Nhẩy có điều kiện dựa trên giá trị của một bit
– Jb ( y nếu bit =1), j (nhảy nếu bit = 0), j
J (nhảy ), jnb ( y ), jbc
(nhảy nếu bit =1 và xoá bit đó)
nguon tai.lieu . vn