Chương 4
CẤU TRÚC ĐIỀU KHIỂN
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
11
Nội dung
Điều khiển trình tự (Sequence Control)
– Expressions
– Statements
– Subprograms
Điều khiển dữ liệu (Data control)
–
–
–
–
–
Basic concepts
Local data and environments
Shared data: dynamic scope
Shared data: block structure
Shared data: parameter transmission
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
2
4.1. Điều khiển trình tự
Biểu thức (expressions)
Phát biểu (statements)
Chương trình con (subprograms)
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
3
Biểu thức
Cơ chế điều khiển
Cú pháp
Dạng thời gian thực thi của biểu thức
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
4
Cơ chế điều khiển
Sự chồng chất hàm (functional composition)
(A + B)∗(C - A)
*
∗ (+ (A, B), - (C, A))
-
+
A
B
C
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
A
5
Cơ chế điều khiển
Hiệu ứng lề
+
– A* FUNC(X) + A
*
A
A
FUNC(X)
(A+)
(A*)
– A*B*C với số dương nhỏ nhất biểu diễn được trong máy
tính
10-38 và A= 1020 , B=10-20 và C=10-20
(A * B) * C = (1020*10-20) * 10-20 = 1*10-20= 10-20
A * (B * C) = 1020*(10-20 * 10-20) = 1020 * 0= 0
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
6
Cú pháp của biểu thức
Trung tố (infix): phổ biến và tự nhiên
(A + B) * (C - A)
– Chỉ dùng cho các phép toán hai toán hạng
– Cần có qui định về độ ưu tiên về thứ tự thực hiện các
phép toán để giảm tính mơ hồ (ambiguity)
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
7
Cú pháp của biểu thức
Dạng tiền tố (prefix)
– Tiền tố thường (ordinary)
∗ (+ (A, B), - (C, A))
– Tiền tố Cambridge Polish
(∗ (+ A B) (- C A))
– Tiền tố Polish
∗ +AB-CA
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
8
Cú pháp biểu thức
Dạng hậu tố (postfix / suffix)
– Thông thường
((A, B) +, (C, A) -) ∗
– Polish
AB+CA-∗
– Thích hợp cho việc biểu diễn dạng thời gian thực thi
của biểu thức
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
9
Dạng thời gian thực thi của biểu thức
Các biểu thức ở các dạng cú pháp được dịch sang dạng thời
gian thực thi trước khi được thực thi thật sự bởi phần cứng
máy tính hoặc chương trình thông dịch
– Biên dịch: chuỗi các lệnh máy
– Thông dịch: cấu trúc cây, dạng tiền tố hoặc hậu tố
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
10
Dạng thời gian thực thi của biểu thức
Biên dịch: chuỗi các lệnh máy sinh ra cho biểu thức ở dạng hâu
tố:
((A, B) +, (C, A)-) *
PUSH
PUSH
ADD
PUSH
PUSH
SUB
MUL
A
B
C
A
A
A
B
A+B
A+B
A+B
A+B
C
C
A
C-A
AB+CA∗
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
(A+B)∗(C-A)
11
Điều khiển trình tự giữa các phát biểu
Phát
Phát
Phát
Phát
biểu
biểu
biểu
biểu
GOTO
ghép
điều kiện
lặp
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
12
GOTO
GOTO L
JMP L
L
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
13
Phát biểu ghép
begin
S 1;
S 2;
…
S n;
end
S1 codes
S2 codes
Sn codes
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
14
Phát biểu điều kiện
• if:
if A = 0 then S1
else S2;
JEQ0 A L1
S3;
S2 codes
JMP L2
L1
L2
S1 codes
S3 codes
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
15
Phát biểu điều kiện
case:
var E: 0..2;
case E of
1: S1;
2: S2;
else: S0
end;
S 3;
α
α+1
α+2
L1
L2
L0
L3
E →v
JMP α+v
JMP L0
JMP L1
JMP L2
S1 codes
JMP L3
JUMP
table
S2 codes
JMP L3
S0 codes
S3 codes
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
16
Phát biểu lặp
for I := E
for:
1
to E2 do S;
I := E1;
L0: if I > E2 then GOTO L1;
S;
I := I + 1;
GOTO L0;
L1 : …
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
17
Phát biểu lặp
while C do S;
while:
L0: if not(C) then GOTO L1;
S;
GOTO L0;
L1 : …
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
18
Phát biểu lặp
repeat:
repeat S until C;
L0: S;
if not(C) then GOTO L0;
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
19
Điều khiển trình tự giữa các chương trình
con
Gọi trở về đơn giản
Gọi đệ qui
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
20
Cấu trúc gọi trở về đơn giản
Khi chương trình được thực thi, chương trình chính được
thực hiện đầu tiên. Trong thời gian thực thi chương trình
chính có thể gọi các ctc thực hiện. Và mỗi chương trình con
này, đến lượt nó, lại có thể gọi các chương trình con khác
thực hiện
Nếu ctc A gọi ctc B, thì A gọi là chương trình gọi, B gọi là
chương trình được gọi. Trong thời gian thực thi B thì A tạm
thời bị treo. Khi sự thực thi B hoàn thành, sự thực thi A sẽ
tiếp tục tại ‘điểm’ ở ngay sau nơi gọi B
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
21
Hạn chế của cấu trúc gọi trở về đơn giản
Chương trình con không được đệ qui (bao gồm đệ qui trực
tiếp, gián tiếp)
Cần có các phát biểu gọi tường minh
Chương trình con phải được hoàn thành ở mỗi lần gọi
Điều khiển được chuyển ngay tức thời ở điểm gọi
Trình tự thực thi đơn
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
22
Cấp phát bộ nhớ ctc gọi trở về đơn giản
Các bản ghi hoạt động của cùng 1 ctc tạo ra trong mỗi lần
gọi ctc có thể sử dụng chung một khối lưu trữ và khối lưu trữ
này cũng được cấp phát tĩnh như khối lưu trữ phân đoạn mã.
Các đối tượng dữ liệu trong các bản ghi hoạt động hòan toàn
xác định trong thời gian thực thi chương trình và có thể truy
cập dễ dàng, do đó tốc độ thực thi chương trình tăng lên.
Tuy nhiên, cách lưu trữ này có nhược điểm là các ctc chiếm
dụng vùng nhớ nhiều, do phải cấp phát các khối lưu trữ cho
các bản ghi hoạt động của tất cả các ctc có mặt trong
chương trình. Các khối này nằm trong bộ nhớ trong suốt thời
gian thực thi chương trình, mặc dù ctc chưa được gọi tới
thâm chí không bao giờ được gọi
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
23
Cấu trúc gọi đệ qui
Về mặt hiện thực gọi đệ qui khác gọi trở về đơn giản ở chỗ,
với gọi đệ qui nhiều bản hoạt động của cùng 1 ctc có thể
cùng tồn tại trong bộ nhớ, trong thời gian thực thi chương
trình. VD A gọi B rồi B gọi A, có tới 2 bản hoạt động của A
nằm trong bộ nhớ khi B gọi A
Để gọi đệ qui ctc phải cấp phát động khối lưu trữ cho các
bản hoạt động trong thời gian thực thi chương trình
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
24
Cấp phát bộ nhớ cho ctc gọi đệ qui
Việc cấp phát các khối lưu trữ thường được thực hiện theo
cơ chế chồng. Các khối lưu trữ được cấp phát trong một
chồng gọi là chồng trung tâm (central stack)
Khi thực thi chương trình, bản ghi hoạt động của chương
trình chính được cấp phát ở đáy chồng. Khi một chương
trình A được gọi, bản ghi hoạt động của A được bố trí ngay
tiếp theo. Nếu A gọi tới B thì bản ghi hoạt động của B sẽ lại
được bố trí ngay tiếp vùng nhớ bản ghi hoạt động của A,
việc cấp phát cứ diễn ra tiếp tục như vậy.
Khi B kết thúc trả điều khiển cho A thì bản ghi hoạt động
của B được giải phòng. Khi A kết thúc trả điều khiển cho
chương trình chính thì bản ghi hoạt động A được giải phóng,
…
Nguyễn Thị Hạnh – Bộ môn CNPM – Khoa CNTT – ĐH SPHN
25