tailieunhanh - Bài giảng hợp ngữ - Chương 9

Tài liệu tham khảo Bài giảng hợp ngữ gồm 9 chương - Chương 9 Một số vấn đề mở rộng | Bài giảng hợp ngữ Chương IX Một sổ vấn đề mở rộng CHƯƠNG IX MỘT SÓ VẤN ĐÈ MỞ RỘNG Số nguyên 32 bit Do bộ vi xử lý 8086 có các thanh ghi dài 16 bít nên các lệnh của nó chỉ thao tác trên các toán hạng nhỏ hon hoặc bằng 16 bít. Điều này làm hạn chế phạm vi tính toán từ 0 65535 đối với số không dấu và từ -32768 32767 đối với số có dấu . Muốn tính toán trên phạm vi lớn hon thì phải tăng được độ dài dãy bít. Như vậy cần tăng độ dài của các thanh ghi điều này là rất khó khăn do hạn chế công nghệ vào thời điểm đó . Một giải pháp khác là sử dụng những thanh ghi có sẵn ghép lại thành một dãy bít dài hon. Số nguyên 32 bít có phạm vi từ 0 4294967295 đối với số không dấu và từ - 2147483648 2147483647 đối với số có dấu. Để tính toán trên các số loại này cần tách chúng làm hai phần 16 bít cao và 16 bít thấp. Quá trình tính toán sẽ được thực hiện trên từng phần có sự hiệu chỉnh kết quả nhờ một số lệnh đặc biệt. Các phép toán Cộng và Trừ a Phép cộng Ví dụ Xét hai số nguyên 32 bit Số thứ nhất được đặt trong mảng word A A 2 A 1 word 1 word Số thứ hai được đặt trong mảng word B B 2 B 1 word 1 word Hãy cộng hai số A 2 A và B 2 B Giải Đầu tiên phải cộng 16 bít thấp sau đó mới cộng 16 bít cao MOV AX B MOV BX B 2 ADD A AX Cộng 16 bít thấp của số thứ hai vào A ADC A 2 BX Cộng 16 bít cao của số thứ hai và cờ CF vào A 2 Kết quả A 2 A chứa tổng hai số. Giải thích Ví dụ trên có sử dụng một lệnh mới Add with Carry ADC Đích Nguồn Đích là một thanh ghi hay một ô nhớ Nguồn là một thanh ghi một ô nhớ hoặc một hằng số Đích Nguồn không đồng thời là hai ô nhớ. Lệnh ADC sẽ thực hiện phép cộng Đích Nguồn CF kết quả chứa trong Đích. 68 Bài giảng hợp ngữ Chương IX Một sổ vấn đề mở rộng Như vậy nếu phép cộng 16 bít thấp của hai số có nhớ CF 1 thì phép cộng 16 bít cao bằng lệnh ADC sẽ cộng cả bít nhớ này vào tổng. b Phép trừ Ví dụ Thực hiện phép trừ giữa hai số nguyên 32 bit A 2 A và B 2 B Giải Đầu tiên phải trừ 16 bít thấp sau đó mới trừ 16 bít cao MOV AX B MOV BX B 2 SUB A AX Trừ 16 bít thấp SBB