Thực hành Assembly - Bài 4: Làm việc với số nguyên

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.

 

doc2 trang | Chuyên mục: Vi Xử Lý – Vi Điều Khiển | Chia sẻ: dkS00TYs | Lượt xem: 8033 | Lượt tải: 5download
Tóm tắt nội dung Thực hành Assembly - Bài 4: Làm việc với số nguyên, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
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à thập lục phân 
Tóm tắt lý thuyết
Phép toán trên bit 
NOT : lệnh này đổi tác tố đích thành số bù. Không có cờ nào bị ảnh hưởng
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. 
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. 
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
Nguyễn Minh Tuấn, Giáo trình hợp ngữ - Chương 7, ĐHKHTN, 2002
Randal Hyde, The art of assembly language programming – Chapter 9.
Norton Guide
Dan Rollins, TechHelp v.6.0
Bài tập
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
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
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
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
VCT đổi một số dạng nhị phân sang thập phânVí dụ: Nhập một số nhị phân: 11010 Dạng thập phân là: 26
VCT đổi một số dạng nhị phân sang thập lục phânVí dụ: Nhập một số nhị phân: 11010 Dạng thập lục phân là: 1A
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.
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
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.
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 ?

File đính kèm:

  • docThực hành Assembly - Bài 4 Làm việc với số nguyên.doc