Bài thực hành số 4
Làm việcvớisố nguyên
Mục đích
Biết sử dụng các phép toán logic, số học
Biết cách đổi giữa các cơ số nhị phân, thập phân và thập lục phân
Tóm tắt lý thuyết
Phép toán trên bit
1. NOT : lệnh này đổi tác tố đích thành số bù. Không có cờ nào bị ảnh hưởng
2. AND (OR hoặc XOR) : AND (OR, XOR) Đích, nguồn
Tất cả các cờ đều bị ảnh hưởng
Chú ý : AND dùng để xóa các bit. OR dùng để bật các bit. XOR dùng để đảo bit.
3. Các lệnh dịch bit SHL và SHR : dịch các bit của toán hạng đích sang trái (hoặc phải) một
hay nhiều bit.
SHL (SHR) Đích, 1 hoặc SHL (SHR) Đích, CL
CL là số lần dịch bit.Việc dịch bit trái (phải) tương ứng với phép nhân (chia) cho
lũy thừa 2.
Chú ý : Hiện tượng tràn số có thể xảy ra và cờ CF chứa bit cuối cùng bị dịch ra
khỏi toán hạng.Để dịch bit với các số âm ta nên dùng SAL hoặc SAR tương ứng.
4. Các lệnh quay ROL và ROR : dịch các bit của toán hạng đích sang trái (phải)
một hay nhiều bit theo vòng tròn.
ROL (ROR) Đích, 1 hoặc ROL (ROR) Đích, CL
CL là số lần quay bit, cờ CF sẽ chứa giá trị bit bị dịch ra khỏi toán hạng.
Chú ý : Để dịch bit qua cờ nhớ ta dùng RCL hoặc RCR tương ứng.
Ví dụ : Sử dụng lệnh ROL để đếm số bit 1 trong thanh ghi BX
XOR AX,AX
MOV CX,16
TOP :
ROL BX, 1
JNC NEXT ; kiểm tra có phải là bit 0 không
INC AX ; nếu không phải thì tăng số bit 1
NEXT:
LOOP TOP ; lặp cho đến khi làm xong
Lệnh số học
1. Cộng ADD, ADC : ADD (ADC) đích , nguồn
Ví dụ : ADD AL , 10H -> AL = AL + 10H
2. Trừ SUB, SBB : SUB (SBB) đích , nguồn
Ví dụ : SUB BL, 10H -> BL = BL – 10H
Chú ý : Các phép toán cộng trừ trực tiếp giữa các ô nhớ là không hợp lệ. Ngoài ra
ta cũng có thể sử dụng INC hoặc DEC để cộng hoặc trừ 1 đơn vị vào nội dung
một ô nhớ hoặc một thanh ghi.
3. Nhân MUL, IMUL: MUL (IMUL) nguồn
Lệnh MUL thực hiện phép nhân không dấu, còn IMUL là lệnh nhân có dấu. Nếu nguồn là
byte (8 bit) thì kết quả chứa trong AX và AX = AL * nguồn. Nếu nguồn là word (16 bit) thì
kết quả chứa trong DX:AX và DX:AX = AX * nguồn. Nếu nguồn là double (32 bit) thì kết
quà chứa trong EDX:EAX và EDX:EAX = EAX * nguồn.
4. Chia DIV, IDIV : DIV (IDIV) số chia
Lệnh DIV thực hiện chia không dấu, còn IDIV là lệnh chia có dấu. Nếu số chia là byte (8
bit) thì số bị chia là AX và kết quả gồm: phần dư = AH, phần thương = AL. Nếu số chia là word (16
bit) thì số bị chia là DX:AX và kết quả gồm phần dư = DX, phần thương = AX. Nếu số chia là
double thì sô bị chia là EDX:EAX và kết quả gồm phần dư = EDX, phần thương = EAX.
Chú ý : phải xoá giá trị DX hoặc EDX trước khi nhân, hoặc chia.
Tài liệu tham khảo
1. Nguyễn Minh Tuấn, Giáo trình hợp ngữ - Chương 7, ĐHKHTN, 2002
2. Randal Hyde, The art of assembly language programming – Chapter 9.
3. Norton Guide
4. Dan Rollins, TechHelp v.6.0
Bài tập
1. Viết chương trình (VCT) đổi một số dạng thập phân sang thập lục phân.
Ví dụ: Nhập một số hệ 10 : 26
Dạng thập lục phân: 1A
2. VCT nhập một số hệ thập phân rồi xuất ra biểu diễn dạng nhị phân của nó.
Ví d ụ : Nhập số hệ 10: 26
Dạng nhị phân: 11010
3. VCT đổi một số dạng thập lục phân sang sang thập phân.
Ví d ụ : Nhập số hệ thập lục phân: 1a (hoặc 1A)
Dạng thập phân của nó là: 26
4. VCT đổi một số dạng thập lục phân sang nhị phân
Ví d ụ : Nhập số hệ thập lục phân: 1a (hoặc 1A)
Dạng biểu diễn nhị phân là : 00011010
5. VCT đổi một số dạng nhị phân sang thập phân
Ví d ụ : Nhập một số nhị phân: 11010
Dạng thập phân là: 26
6. VCT đổi một số dạng nhị phân sang thập lục phân
Ví d ụ : Nhập một số nhị phân: 11010
Dạng thập lục phân là: 1A
7. VCT “echo” với yêu cầu: nhập vào sốnguyên dương n và một kí tự bất kì, sau đó trên màn hình
xuất hiện n lần kí tự đó.
Ví d ụ : Nhập một kí tự: k Nhập số lần n : 5 Kết quả : kkkkk.
8. VCT nhập vào hai sốnguyên dương. Tính tổng, hiệu, tích, thương (phép div) và phần dư khi
chia 2 sốnguyên (phép mod)
Ví d ụ : Nhập số thứ nhất : 14 Nhập số thứ hai : 16
Tổng hai số là : 30 Hiệu: -2 Tích: 224 Thương: 0 Phần dư: 14
Mở rộng
1. Tìm hiểu về BCD. Viết chương trình nhập 2 sốnguyên ở hệ 10, chuyển sang BCD, tính tổng,
hiệu và in kết quả ở hệ 10.
2. Liệu có thể viết chương trình tính được 20!, 30!, kết quả in ra ở dạng hex ? dạng cơ số 10 ?
. Bài thực hành số 4
Làm việc với số nguyên
Mục đích
Biết sử dụng các phép toán logic, số học
Biết cách đổi giữa các cơ số nhị phân, thập phân. vào hai số nguyên dương. Tính tổng, hiệu, tích, thương (phép div) và phần dư khi
chia 2 số nguyên (phép mod)
Ví d ụ : Nhập số thứ nhất : 14 Nhập số thứ