quykyky

New Member

Download miễn phí Bài giảng Kỹ thuật máy tính - Phần hợp ngữ





Cácdạnghằng tronghợp ngữ
• Nhị phân:
– Gồmmột dãy các chữ số 0 và 1, kết thúcbởi kýtự B hay b
– Vídụ:
0100 0101B : 8bit
1111000011110000b : 16bit



Để tải bản Đầy Đủ của tài liệu, xin Trả lời bài viết này, Mods sẽ gửi Link download cho bạn sớm nhất qua hòm tin nhắn.
Ai cần download tài liệu gì mà không tìm thấy ở đây, thì đăng yêu cầu down tại đây nhé:
Nhận download tài liệu miễn phí

Tóm tắt nội dung tài liệu:

PHẦN II
HỢP NGỮ
A-PDF Watermark DEMO: Purchase from www.A-PDF.com to remove the watermark
Chương 5
TỔNG QUAN VỀ HỢP NGỮ
Nội dung
• Giới thiệu về hợp ngữ
• Lập trình với hợp ngữ
• Ví dụ mẫu
• Bài tập
I.Giới thiệu
• Hợp ngữ - Assembly
• Trình dịch hợp ngữ - Assembler
• So sánh ngôn ngữ máy và hợp ngữ
Ngôn ngữ máy Hợp ngữ
5601:0100
5601:0102
5601:0105
B4.02
80.C2.30
50
MOV AH, 2
ADD DL,30
PUSH AX
Hợp ngữ
• Ngôn ngữ lập trình cấp thấp, dùng dạng gợi
nhớ của tập lệnh
mnemonic [operand1 [,operand2]
• Các đặc điểm:
– Thực thi nhanh
– Kích thước nhỏ
– Xử lý trực tiếp hệ thống
– Có thể viết trên mọi hệ điều hành, mọi CPU
– Khó viết
Cú pháp của lệnh hợp ngữ
• Bộ ký tự
– Chữ cái latinh: A..Z, a..z
– Chữ số thập phân: 0..9
– Các ký tự đặc biệt: ? @ _ $ : . [ ] ( ) …
– Các ký tự cách: SP, Tab
• Từ vựng:
– Từ khóa (keyword)
– Tên (Symbol, name)
Từ khóa
• Tên dành riêng của hợp ngữ
– Tên các thanh ghi
– Tên gợi nhớ
– Tên toán tử
– …
Đặt tên
• Tên hằng, tên biến, tên nhãn… do người lập
trình đặt ra
• Bắt đầu của tên không là số
• Tên không được trùng với từ khóa
• Tên tối đa 31 ký tự
Cú pháp của một lệnh hợp
ngữ
[label:] mnemonic [operand1 [,operand2]] [; comment]
- Nhãn thay thế địa chỉ
câu lệnh.
- Người lập trình tự đặt
- Từ gợi nhớ xác định
hành động của câu lệnh
- Tra trong tập lệnh
- Các toán hạng, ngăn
cách bởi dấu ,
- Chú thích
Chương trình hợp ngữ
• Bao gồm các phát biểu hợp ngữ
(assembly language instruction)
• Lệnh hợp ngữ
– >lệnh nhị phân/mã máy
• Chỉ dẫn biên dịch (assembler directive)
– >không có lệnh nhị phân tương ứng
– >Tuân theo cú pháp của assembler
Tổ chức bộ nhớ
• Địa chỉ ô nhớ
• Các đơn vị
Tổ chức thanh ghi
• CPU16bit và CPU 32bit
Thanh ghi của CPU 8086
• Gồm 14 thanh ghi, mỗi thanh ghi 16 bit
• Chia làm 5 nhóm:
– Nhóm thanh ghi đoạn
– Nhóm thanh ghi đa dụng
– Nhóm thanh ghi con trỏ và chỉ mục
– Thanh ghi con trỏ lệnh
– Thanh ghi cờ hiệu
Nhóm 1: các thanh ghi đoạn
• Segment registers
• Chứa địa chỉ đoạn (segment)
• 4 thanh ghi:
– CS (Code segment register)
– DS (Data segment register)
– ES (Extra data segment register)
– SS (Stack segment register)
Quản lý bộ nhớ với thanh ghi
đoạn
Nhóm 2: các thanh ghi đa
dụng
• General purpose registers
• Chứa các toán hạng, dữ liệu
• Gồm 4 thanh ghi 16 bit
– AX (Accumulator Register)
– BX (Base Register)
– CX (Count Register)
– DX (Data Register)
Nhóm thanh ghi đa dụng (t.t)
• Mỗi thanh ghi đa dụng 16bit có thể được sử
dụng như 1 cặp thanh ghi 8bit
Thanh ghi 16bit 8bit cao 8 bit thấp
AX AH AL
BX BH BL
CX CH CL
DX DH DL
Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
AX
AH AL
Nhóm 3: Các thanh ghi con trỏ và chỉ
mục
• Gồm 4 thanh ghi
– SI (Source Indexed register)
– DI (Destination Indexed register)
– SP (Stack Pointer register)
– BP (Base Pointer register)
Nhóm 4: Thanh ghi con trỏ chương trình
• IP (Instruction Pointer register)
• Lệnh kế tiếp sẽ thực hiện ở địa chỉ:
CS:IP
Nhóm 5: Thanh ghi cờ hiệu
• Flag register
• Gồm các cờ hiệu
CF: Carry Flag
AF: Auxiliary Flag
ZF: Zero Flag
OF: Overflow Flag
SF: Signed Flag
PF: Parity Flag
DF: Direction Flag
TF: Trap Flag
IF: Interupt Enable Flag
Tổ chức ngắt
• Ngắt cứng: (hard interupt)
IRQ0: timer IRQ4: COM1
IRQ1: keyboard IRQ5: Hard disk
IRQ2: cho máy AT IRQ6: Floppy disk
IRQ3: COM2 IRQ7: Parallel port
àcác ngắt này có thể chắn được bởi lệnh CLI
• Ngắt không chắn được NMI
– độ ưu tiên cao nhất
– báo sự nguy hiểm như sụt áp hay hư hỏng bộ nhớ
Tổ chức ngắt (t.t)
• Ngắt nội bộ (internal interupt)
– phát sinh bởi CPU
– “divide by zero”, “overflow”, “trap”
• Ngắt mềm (soft interupt)
– gọi 1 chương trình con có sẳn trong ROM hay
RAM
Bảng vector ngắt
• bảng chiều dài 1KB nằm trong bộ nhớ bắt đầu
từ 0000:0000 đến 0000:03FF
• gồm 256 phần tử, mỗi phần tử chiếm 4 byte
chứa giá trị segment và offset của chương trình
xử lý ngắt
00h ÷ 1Fh : ngắt trong ROM
20h ÷ 2Fh: ngắt mềm của DOS
30h ÷ FFh: ngắt mềm do người dùng định nghĩa
Sử dụng ngắt mềm 21h cho các thao
tác xuất nhập
• Sử dụng các lệnh IN / OUT cho các thao tác
xuất nhập các thiết bị ngoại vi ?
– đòi hỏi người lập trình phải am hiểu phần cứng
– tùy theo các loại máy tính mà số hiệu cổng của các
thiết bị ngoại vi có thể khác.
• Các nhà sản xuất máy tính đã cung cấp sẳn các
chương trình phục vụ vào ra cơ bản
– người lập trình sẽ gọi thông qua lời gọi ngắt:
INT số_hiệu_ngắt
Một số hàm xuất/nhập đơn giản
qua ngắt 21h
• INT 21h/AH=1: Nhập 1 ký tự từ bàn phím
• INT 21h/AH=2: Xuất 1 ký tự ra màn hình
• INT 21h/AH=8: Nhập 1 ký tự từ bàn phím
không hiển thị ký tự này lên màn hình
• INT 21h/AH=9: Xuất 1 chuỗi ký tự ra màn
hình
• INT 21h/AH=0Ah: Nhập 1 chuỗi ký tự từ bàn
phím
è tham khảo tài liệu “The x86 interupts’ list”
Gọi ngắt 21h
• Gán AH là số hiệu hàm muốn gọi
Ví dụ: MOV AH,9 ; gọi hàm xuất chuỗi
• Gán các tham số khác nếu cần thiết
Ví dụ: MOV DX, offset chuoikitu
• Gọi ngắt 21h
INT 21h
INT 21h/AH=1
• Nhập một ký tự từ bàn phím và có hiển thị ký
tự này ra màn hình
• Gọi với: AH=1
INT 21h
• Trị trả về:AL = mã ASCII của ký tự vừa nhập
INT 21h/AH=8
• Nhập một ký tự từ bàn phím nhưng không hiển
thị ký tự này ra màn hình
• Gọi với:
AH=8
INT 21h
• Trị trả về: AL = mã ASCII của ký tự vừa
nhập
INT 21h/AH=0Ah
• Nhập một chuỗi ký tự từ bàn phím với chiều
dài tối đa 255, dùng phím BACKSPACE để
sửa ký tự, ENTER để kết thúc việc nhập
• Gọi với:
AH=0Ah
DS:DX = địa chỉ của vùng đệm lưu chuỗi
INT 21h
• Trị trả về: không có
INT 21h/AH=0Ah (t.t)
• Vùng đệm lưu chuỗi phải có dạng sau:
– Byte đầu tiên: kích thước của vùng đệm, thể hiện
số byte tối đa cần đọc
• cần gán trước khi gọi hàm
– Byte thứ hai: số byte thực sự đọc
• được trả về sau khi gọi hàm
– Các byte tiếp theo: lưu các ký tự đã nhập vào
• được gán sau khi gọi hàm
10 ? 10 bytes vùng đệm chứa chuỗi nhập
10 5 h e l l o
INT 21h/AH=2
• Hiển thị ký tự có mã ASCII chứa trong DL ra
màn hình
• Gọi với: AH=2
DL = Mã ASCII của ký tự muốn xuất
INT 21h
• Trị trả về: không có
INT 21h/AH=9
• Xuất một chuỗi ký tự ra màn hình. Chuỗi phải
kết thúc bằng ký tự ‘$’
• Gọi với: AH=9
DS:DX = Địa chỉ của chuỗi cần xuất
INT 21h
• Trị trả về: không có
Các dạng hằng trong hợp
ngữ
• Nhị phân:
– Gồm một dãy các chữ số 0 và 1, kết thúc bởi ký tự
B hay b
– Ví dụ:
0100 0101B : 8bit
1111000011110000b : 16bit
Các dạng hằng (t.t)
• Thập phân:
– Gồm một dãy các chữ số từ 0 đến 9, có thể thêm
các ký tự + , - để biểu thị dấu.
– có thể kết thúc bằng ký tự D hay không cần
– Ví dụ:
9871d hay 9871
Các dạng hằng (t.t)
• Thập lục phân(hệ 16 hay hex):
– Gồm một dãy các chữ số từ 0 đến 9 và các ký tự từ
A-F (a-f), kết thúc bằng ký tự H
– Nếu ký tự bắt đầu không phải là số thì phải thêm 0
vào đầu.
– Ví dụ:
45h số hex 8bit
5AF8H số hex 16 bit
0A28FH bắt đầu bằng A nên phải thêm 0 vào đầu
Các dạng hằng (t.t)
• Dạng chuỗi:
– Gồm một dãy các ký tự nằm giữa 2 dấu ‘ hay “
– Ví dụ:
“Hello Assembly”
‘Xin chao!’
Dữ liệu cho chư
 
Top