• CPU: phép toán CPU được thu gọn thành 3 bước căn
bản: truy nạp (fetch), giải mã (decode), và thi hành
(execute).
• Mỗi bước gồm nhiều bước trung gian. Vd:
– Truy nạp chỉ lệnh kế tiếp:
• Đặt nó trong một vùng lưu trữ tên hàng đợi.
• Cập nhật bộ đếm chương trình
– Giải mã chỉ lệnh
• Thực hiện việc phiên dịch địa chỉ
• Truy nạp các toán hạng từ bộ nhớ
– Thi hành chỉ lệnh
• Thực hiện phép tính yêu cầu
• Lưu trữ các kết quả bộ nhớ hoặc các thanh ghi
• ấn định các cờ trạng thái gắn với CPU
13 trang |
Chia sẻ: lylyngoc | Lượt xem: 1596 | Lượt tải: 1
Bạn đang xem nội dung tài liệu Bài 1 Giới thiệu Assembler, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Bài giảng
Assembler Bài 1
• CPU: phép toán CPU được thu gọn thành 3 bước căn
bản: truy nạp (fetch), giải mã (decode), và thi hành
(execute).
• Mỗi bước gồm nhiều bước trung gian. Vd:
– Truy nạp chỉ lệnh kế tiếp:
• Đặt nó trong một vùng lưu trữ tên hàng đợi.
• Cập nhật bộ đếm chương trình
– Giải mã chỉ lệnh
• Thực hiện việc phiên dịch địa chỉ
• Truy nạp các toán hạng từ bộ nhớ
– Thi hành chỉ lệnh
• Thực hiện phép tính yêu cầu
• Lưu trữ các kết quả bộ nhớ hoặc các thanh ghi
• ấn định các cờ trạng thái gắn với CPU
• Bus địa chỉ và dữ liệu: đường dây song song
truyền dữ liệu giữa các phần khác nhau của CPU.
• Các thanh ghi: các khu lưu trữ cao tốc bên trong
CPU, trực tiếp nối với ALU (arithmetic logic unit)
và CU (control unit).
• Đồng hồ: mỗi phép toán diễn ra trong CPU phải
được đồng bộ hóa bởi 1 đồng hồ trong. Đơn vị:
chu kỳ máy hoặc chu kỳ đồng hồ (MHz).
Gồm các thanh ghi 8, 16, 32 bit.
Thanh ghi đa năng: AX, BX, CX, DX.
Thanh ghi phân đoạn: CS, SS, DS, ES.
Thanh ghi chỉ mục: BP, SP, Sl, Di.
Thanh ghi tình trạng và điều khiển: Flags, IP.
• Các thanh ghi đa năng dùng để di chuyển số học
và dữ liệu. Mỗi thanh ghi được định địa chỉ dưới
dạng giá trị 8 bit hoặc 16 bit.
• Vd: AX là 1 thanh ghi 16 bit; 8 bit trên là AH, 8 bit
dưới là AL. Bit 0 trong AL = bit 0 trong AX, bit 0
trong AH = bit 8 trong AX.
• Các lệnh có thể định địa chỉ các thanh ghi dữ liệu
16 bit dưới dạng AX, BX, CX, DX hoặc dữ liệu 8
bit dưới dạng AH, AL, BH, BL, CH, CL, DH, DL.
• VD: nếu chuyển 00010010001101111 vào AX, AL
= 01101111, AH = 00010010.
• AX (accumulator): thanh ghi tích lũy, CPU sử
dụng cho các phép toán số học.
• BX (base): lưu giữ địa chỉ của 1 thủ tục hoặc biến.
3 thanh ghi khác cũng có khả năng này là SI, DI và
BP. BX cũng dùng để dịch chuyển số học và dữ
liệu.
• CX (counter): sử dụng làm bộ đếm để lặp các chỉ
lệnh.
• DX (data): đóng 1 vai trò đặc biệt trong phép nhân
và chia. VD: khi nhân, DX lưu 16 bit cao của tích.
• Sử dụng làm vị trí cơ sở cho các chỉ lệnh chương
trình, dữ liệu và ngăn xếp.
• CS (code segment): lưu vị trí cơ sở của tất cả các
lệnh thi hành trong chương trình.
• DS (data segment): lưu vị trí mặc định của các
biến. CPU tính toán vị trí của chúng nhờ dùng giá
trị phân đoạn trong DS.
• SS (stack segment): chứa vị trí cơ sở của ngăn xếp.
• ES (extra segment): là vị trí cơ sở bổ xung của các
biến bộ nhớ.
• Chứa độ dịch vị (offset) của dữ liệu và lệnh.
• Offset là khoảng cách của 1 biến, nhãn hoặc lệnh
so với phân đoạn cơ sở của nó.
• BP (base pointer): lưu offset giả định từ thanh ghi
SS, giống biến trỏ ngăn xếp. Thường được 1
chương trình con dùng để định vị các biến đã được
chuyền trên ngăn xếp bởi 1 chương trình gọi.
• SP (stack pointer): chứa offset của đầu ngăn xếp.
SS và SP phối hợp lại để hình thành địa chỉ hoàn
chỉnh của đầu ngăn xếp.
SI (source index): trỏ đến chuỗi nguồn.
DI (destination index): đích cho các chỉ lệnh dời
chuỗi.
IP (instruction pointer): chứa offset của lệnh kế
tiếp sẽ được thi hành trong đoạn mã hiện hành. IP
và CS tổ hợp lại hình thành địa chỉ hoàn chỉnh của
lệnh kế tiếp.
Flags: là thanh ghi đặc biệt có các vị trí bit riêng lẻ
được gán để nêu trạng thái của CPU hoặc các kết
quả của phép toán số học.
• DF (direction): ảnh hưởng đến các lệnh chuyển
giao dữ liệu theo khối như movs, cmps, scas. Được
điều khiển bằng các lệnh STD, CLD
• IF (interrupt): chỉ rõ các ngắt hệ thống có thể xảy
ra hay không. Điều khiển bởi lệnh CLI, STI.
• Trap (TF): xác định CPU có bị treo hay không sau
mỗi lệnh. Khi cờ được ấn định, 1 trình gỡ rối có
thể để lập trình viên sử dụng kỹ thuật single step
qua từng lệnh. Xác lập bởi lệnh INT 3.
• Carry (CF): xác lập khi kết quả của 1 phép tính không dấu
quá lớn, không vừa với đích. VD: 200 + 58 lưu trữ trong AL
8bit --> tràn số.
• Overflow (OF): xác lập khi kết quả 1 phép tính có dấu quá
rộng (quá nhiều bit) không vừa với đích. VD: -128 + (-2)
lưu trong BL 8bit sẽ dẫn đến tràn số.
• Sign (SF): ấn định khi kết quả 1 phép tính số học hoặc logic
sinh ra kết quả âm.
• Zero (ZF): ấn định khi kết quả 1 phép tính số học hoặc logic
là 0.
• Auxilliary Carry: ấn định khi 1 phép toán gây ra 1 phép
mang sang (carry) từ bit 3 sang bit 4 hoặc 1 phép mượn từ
bit 4 sang bit 3 của 1 toán hạng.
• Parity: phản ánh số lượng các bit 1 trong kết quả của 1 phép
toán. Nếu các bit 1 là chẵn, parity = even, nếu lẻ parity =
odd.
• Intel từ 386 trở đi đều có các thanh ghi 32 bit.
• Các thanh ghi đoạn vẫn là 16 bit nhưng có bổ sung
2 thanh ghi FS và GS.
• Nửa trên của các thanh ghi 32 bit không có tên.
• Đa năng: EAX, EBX, ECX, EDX
• Chỉ mục: EBP, ESP, ESI, EDI.
• Trạng thái và điều khiển: EFLAGS, EIP.
• Ngăn xếp: CS, SS, DS, ES, FS, GS.