TAOCP 1.3.1 Exercise 9
Bài toán yêu cầu liệt kê **mọi toán tử MIX có thể ảnh hưởng đến overflow toggle**, tức là những lệnh có thể **đặt** (set) hoặc **xóa** (clear) overflow toggle theo đúng đặc tả của MIX.
Section 1.3.1: Description of MIX
Exercise 9. [15] List all the MIX operators that can possibly affect the setting of the overflow toggle. (Do not include floating point operators.)
Verified: no
Solve time: 4m04s
Lời giải
Bài toán yêu cầu liệt kê mọi toán tử MIX có thể ảnh hưởng đến overflow toggle, tức là những lệnh có thể đặt (set) hoặc xóa (clear) overflow toggle theo đúng đặc tả của MIX. Vì vậy cần xét trực tiếp các định nghĩa lệnh, thay vì lập luận từ trực giác rằng một phép toán nào đó "có thể tràn".
Trước hết, các lệnh nạp, lưu, so sánh, dịch, di chuyển, vào-ra và các lệnh nhảy thông thường không được định nghĩa là thay đổi overflow toggle. Chúng hoặc chỉ sao chép dữ liệu, hoặc chỉ tác động đến comparison indicator hay bộ đếm lệnh.
Xét các lệnh số học:
1. ADD và SUB
Các lệnh ADD và SUB cộng hoặc trừ một giá trị vào thanh ghi $A$.
Nếu kết quả không biểu diễn được trong một thanh ghi $A$ của MIX, overflow toggle được đặt. Vì vậy
$$ \texttt{ADD},\qquad \texttt{SUB} $$
có thể ảnh hưởng đến overflow toggle.
2. MUL
Lệnh MUL không lưu kết quả chỉ trong thanh ghi $A$. Thay vào đó, tích được lưu trong cặp thanh ghi
$$ A:X. $$
Cặp $A:X$ được thiết kế để chứa toàn bộ tích của hai số MIX. Theo đặc tả MIX, phép nhân không sử dụng overflow toggle để báo rằng tích quá lớn đối với một thanh ghi đơn.
Do đó MUL không ảnh hưởng đến overflow toggle.
3. DIV
Lệnh DIV có những trường hợp được định nghĩa là overflow, chẳng hạn chia cho $0$ hoặc thương không biểu diễn được trong thanh ghi kết quả. Khi đó overflow toggle được đặt.
Vì vậy
$$ \texttt{DIV} $$
có thể ảnh hưởng đến overflow toggle.
4. Các lệnh tăng và giảm
Các lệnh
$$ \texttt{INCA},\ \texttt{DECA},\ \texttt{INCX},\ \texttt{DECX}, $$
và
$$ \texttt{INC}i,\ \texttt{DEC}i \qquad (1\le i\le 6) $$
thực hiện phép cộng hoặc trừ trên thanh ghi tương ứng. Theo đặc tả MIX, nếu kết quả không biểu diễn được trong thanh ghi đích thì overflow toggle được đặt.
Vì vậy tất cả các lệnh INC* và DEC* có thể ảnh hưởng đến overflow toggle.
5. Các lệnh ENT* và ENN*
Các lệnh
$$ \texttt{ENTA},\ \texttt{ENNA},\ \texttt{ENTX},\ \texttt{ENNX}, $$
và
$$ \texttt{ENT}i,\ \texttt{ENN}i $$
chỉ nạp một địa chỉ hoặc đối của địa chỉ vào thanh ghi. Giá trị địa chỉ của MIX luôn nằm trong phạm vi biểu diễn của thanh ghi nhận.
Các lệnh này không được định nghĩa là đặt hay xóa overflow toggle.
Do đó chúng không thuộc danh sách cần tìm.
6. JOV
Lệnh JOV kiểm tra overflow toggle. Nếu toggle đang bật thì lệnh nhảy được thực hiện, và trong mọi trường hợp kiểm tra đó overflow toggle được xóa theo định nghĩa của MIX.
Vì vậy JOV có thể ảnh hưởng đến overflow toggle, dù nó không tạo ra trạng thái tràn mới.
-, Kết luận, các toán tử MIX không dùng dấu phẩy động có thể ảnh hưởng đến overflow toggle là
$$ \boxed{ \texttt{ADD},\ \texttt{SUB},\ \texttt{DIV},\ \texttt{INCA},\ \texttt{DECA},\ \texttt{INCX},\ \texttt{DECX},\ \texttt{INC}i,\ \texttt{DEC}i\ (1\le i\le 6),\ \texttt{JOV} } $$
Trong đó ADD, SUB, DIV, INC*, DEC* có thể đặt overflow toggle, còn JOV có thể xóa overflow toggle. MUL và các lệnh ENT*/ENN* không ảnh hưởng đến overflow toggle. ∎