LẬP TRÌNH HỢP NGỮ
Ngơn ngữ lập trình
• Ngơn ngữ lập trình
– Phương tiện để viết chương trình cho máy tính
– Hàng trăm ngơn ngữ lập trình khác nhau
– Những quy định về cú pháp (syntax) & ngữ nghĩa
(semantic)
– Máy tính có thể hiểu được
• Phân chia làm 3 nhóm chính
– Ngơn ngữ máy - Machine languages
• Ngơn ngữ duy nhất của máy tính - CPU
– Hợp ngữ - Assembly languages
– Ngôn ngữ cấp cao - High-level languages
Ngơn ngữ máy - Machine languages
• Ngơn ngữ duy nhất được máy tính (CPU) hiểu
trực tiếp.
• Được xác định bởi tập lệnh của CPU
–
–
–
–
Phụ thuộc vào máy tính cụ thể
Dạng nhị phân {0,1}*
Rất khó đọc hiểu
Khó có khả năng viết chương trình trực tiếp
• Khó nhớ hàng chục ngàn lệnh dạng {0,1}*
• Rất khó xác định & sửa lỗi
• Khơng được sử dụng trong thực tế để viết chương
trình
• Nền tảng xây dựng hợp ngữ
Hợp ngữ - Assembly Languages
• Sử dụng các từ khóa tiếng Anh cho các lệnh hay
nhóm lệnh của mã máy.
• Được dịch sang mã máy khi thực hiện
• Chuyển đỗi nhanh chóng
• Dễ đọc và dễ hiểu hơn
• Vẫn tương đối khó sử dụng do
– Các lệnh cịn đơn giản nên phải dùng nhiều lệnh.
– Chưa có những cấu trúc điều khiển thuận tiện
– Khả năng tìm và sửa lỗi cũng chưa thuận tiện.
• Nền tảng xây dựng các ngơn ngữ cấp cao
Ngơn ngữ cấp cao
• Một câu lệnh diễn tả nhiều động thái
• Có cấu trúc ngày càng giống ngơn ngữ tự
nhiên (tiếng Anh)
• Được dịch sang assembly hay mã máy
bằng các chương trình dịch trước khi thực
thi.
– Source code & Executed code
• Được phân làm nhiều lớp
– Lập trình goto
– Lập trình cấu trúc – Structured
– Lập trình hướng đối tượng – Object Oriented
– Các dạng khác
Học ngơn ngữ lập trình
• Học ngữ pháp
– Quy tắc ngữ pháp
– Từ vựng
– Cấu trúc câu
• Ngữ nghĩa của các lệnh
• Các “thành ngữ”
• Học ngơn ngữ lập trình VS. Học ngôn ngữ tự nhiên
– Quy tắc ngữ pháp đơn giản
– Từ vựng ít, tự quy định
– Cấu trúc câu đơn giản
• Hạn chế và khó khăn của sử dụng ngơn ngữ lập trình.
Chương trình dịch
• Dùng để dịch từ một ngơn ngữ lập trình này sang ngơn ngữ
lập trình khác
• Mục tiêu cuối cùng là dịch sang mã máy để có được executed
code –> chương trình thực thi
• Phân loại:
– Intepreter – thơng dịch
– Compiler – biên dịch
– Intepreter vs. Compiler
• Cơng cụ phát triển – Integrated Development Environment (IDE)
– Soạn thảo
– Dịch và sửa lỗi chương trình
– Chạy thử và sửa lỗi
Một số khái niệm khác
• Lỗi và sửa lỗi
– Syntax error – lỗi ngữ pháp
– Semantic error- lỗi ngữ nghĩa
– Runtime error - Lỗi thực thi
• Debug – Tìm và sửa lỗi
• Dữ liệu, kiểu dữ liệu
– Các kiểu dữ liệu cơ bản
• integer, long, character, byte, ….
• Real (double, float)
• Kiểu khác: string
– Kiểu dữ liệu có cấu trúc: array, string, record,..
• Biến (Variable) & Hằng (Constant)
• Giải thuật: khái niệm, cơng cụ biểu diễn
• Flow chart – lưu đồ
Cấu trúc điều khiển cơ bản
If <condition> then Statement;
If <condition> then Statement 1
else Statement 2;
Case <Value> of
value 1 : Statement 1;
………..
value n : Statement n;
else : Statement 0
end;
While <condition> do Statement;
Repeat Statement until <condition>;
For counter=start value to end value do Statement;
For counter=start value downto end value do Statement
Chu kỳ sống của phần mềm
• Thu thập yêu cầu
• Phân tích thiết kế
• Phát triển chương trình - codeing
– Xác định giải thuật
– Viết code và dịch thử , hiệu chỉnh các lỗi syntax
• Thử nghiệm - Testing
– Chạy thử với các dữ liệu mẫu để kiểm tra lỗi semantic
và runtime
• Vận hành và bảo trì
• Phát triển theo yêu cầu
Một số ngơn ngữ lập trình
• Lập trình goto
– Assembly
– Basic
• Lập trình cấu trúc
– Pascal, C
– Foxpro
• Lập trình hướng đối tượng
– Java, C++, Object Pascal,…
• Khác
– Prolog, LISP, Visual basic (VB), VC++, J++, Delphi, ASP, PHP,..
– Visual studio .NET: VB.NET, ASP.NET, C++.NET, C#
Lập trình hợp ngữ
• Một chương trình hợp ngữ bao gồm một
loạt các mệnh đề ( statement) được viết
liên tiếp nhau , mỗi mệnh đề được viết
trên 1 dịng
• Một mệnh đề có thể là :
– một lệnh ( instruction) : được trình biên dịch
( Assembler =ASM) chuyển thành mã máy.
– một chỉ dẫn của Assembler ( Assembler directive) :
ASM không chuyển thành mã máy
Trường Tên ( Name Field)
• Trường tên được dùng cho nhãn lệnh , tên thủ tục
và tên biến . ASM sẽ chuyển tên thành địa chỉ bộ
nhớ .
• Tên có thể dài từ 1 đến 31 ký tự . Trong tên chứa
các ký tự từ a-z , các số và các ký tự đặc biệt
sau : ? ,@ , _ , $ và dấu .
• Khơng được phép có ký tự trống trong phần tên.
Nếu trong tên có ký tự thì nó phải là ký tự đầu tiên.
• Tên khơng được bắt đầu bằng một số.
ASM không phân biệt giữa ký tự viết thường và
viết hoa .
Phân biệt
Tên hợp lệ
Tên không hợp lệ
COUNTER1
TWO WORDS
@CHARACTER2ABC
SUM_OF_DIGITS A45.28
DONE?
YOU&ME
.TEST ADD-REPEAT
Các kiểu số liệu trong chương trình hợp
ngữ
• Các số
• Các ký tự
• Các biến ( variables)
Nhắc lại phương pháp định địa chỉ
• Tức thời (trực hằng)
– Tốn hạng trong lệnh
• Thanh ghi
– Tốn hạng trong thanh ghi
• Trực tiếp
– Địa chỉ trong lệnh là địa chỉ ơ nhớ của tốn hạng
• Gián tiếp qua thanh ghi
– Thanh ghi chứa địa chỉ ơ nhớ của tốn hạng
• Gián tiếp ơ nhớ
– Địa chỉ trong lệnh là địa chỉ ơ nhớ của tốn hạng
• Chỉ số (dịch chuyển)
– Địa chỉ toán hạng là tổng nội dung thanh ghi và độ dời
• Tương đối
– Tổng nội dung PC và độ dời
• Stack
– Thanh ghi SP chứa địa chỉ ô nhớ của toán hạng
Thanh ghi CPU 8086
• 14 thanh ghi 16 bit
• 5 nhóm
– Thanh ghi đoạn
• CS (code segment), DS (data segment),
SS (stack segment), ES (extra segment)
– Thanh ghi con trỏ
• IP (instruction pointer), SP (stack pointer),
BP (base pointer)
– Thanh ghi chỉ số
• SI (source index), DI (Destination index)
– Thanh ghi đa dụng
– Thanh ghi cờ
Thanh ghi đa dụng
• AX (Accumulator register)
– Sử dụng cho tính tốn và xuất nhập
• BX (Base register)
– Thanh ghi duy nhất có thể sử dụng chỉ số
• CX (Counter register)
– Sử dụng cho vịng lặp
• DX (Data register)
– Sử dụng cho xuất nhập và các lệnh nhân chia
• Các thanh ghi đa dụng có thể “chia nhỏ” thành 2 thanh
ghi 8-bit (cao và thấp)
– AH,AL,BH,BL,CH,CL,DH,DL
Thanh ghi cờ (Flag)
Flags Register
Tắt
Tên
bit n
“Mơ tả”
OF
Overflow
11
Tràn số có dấu
DF
Direction
10
Hướng xử lý chuỗi
IF
Interrupt
9
Cho phép ngắt
TF
Trap
8
CPU thực hiện từng bước
SF
Sign
7
Kiểm tra kết quả là số âm
ZF
Zero
6
Kiểm tra kết quả bằng 0
AF
Auxiliary Carry
4
PF
Parity
2
Kiểm tra số bit 1 chẵn
CF
Carry
0
Tràn số không dấu
Các số
• Một số nhị phân là một dãy các bit 0 và 1 và 2
phải kết thúc bằng b hoặc B
Ví dụ: 10111b, 11111b
• Một số thập phân là một dãy các chữ só thập
phân và kết thúc bởi d hoặc D ( có thể khơng cần)
Ví dụ: 64223, -2183d
• Một số hex phải bắt đầu bởi 1 chữ số thập phân
và phải kết thúc bởi h hoặc H
Ví dụ: 183Dh, 1AC0h, 0FFFFH
Các ký tự
• Ký tự và một chuỗi các ký tự phải được đóng
giữa 2 dấu ngoặc đơn hoặc hai dấu ngoặc kép .
Ví dụ: ‘ A ’ và “ HELLO ” .
• Các ký tự đều được chuyển thành mã ASCII
bởi ASM . Do đó trong một chương trình ASM
sẽ xem khai báo ‘A’ và 41h ( mã ASCII của
A) là giống nhau
Các biến ( variables)
Trong ASM biến đóng vai trị như trong ngơn ngữ
cấp cao. Mỗi biến có một loại dữ liệu và nó được
gán một địa chỉ bộ nhớ sau khi dịch chương trình
PSEUDO-OP STANDS FOR
DB
define byte
DW
define word ( doublebyte)
DD
define doubeword ( 2 từ liên tiếp)
DQ
define quadword ( 4 từ liên tiếp )
DT
define tenbytes ( 10 bytes liên tiếp)
Chuỗi các ký tự ( character strings)
• Một mảng các mã ASCII có thể được định nghĩa bằng một
chuỗi các ký tự
Ví dụ :
LETTERS DW 41h, 42h, 43h
↔
LETTERS DW ‘ABC ’
• Bên trong một chuỗi , ASM sẽ phân biệt chữ hoa và chữ thường
. Vì vậy chuỗi ‘abc’ sẽ được chuyển thành 3 bytes : 61h ,62h và
63h.
• Trong ASM cũng có thể tổ hợp các ký tự và các số trong một
định nghĩa .
Ví dụ :
MSG DB ‘HELLO’, 0AH, 0DH, ‘$’
↔
MSG DB 48H, 45H, 4CH, 4Ch, 4FH, 0AH, 0DH, 24H
Các hằng ( constants)
• Trong một chương trình các hằng có thể được đặt tên nhờ chỉ
dẫn EQU (equates) .
Cú pháp của EQU là : NAME
EQU
constant
Ví dụ :
LF
EQU
0AH
• Cũng có thể dùng EQU để định nghĩa một chuỗi:
Ví dụ: PROMPT
EQU ‘TYPE YOUR NAME ’
Sau khi có khai báo này, thay cho
MSG DB
‘TYPE YOUR NAME ’
↔
MSG DB
PROMPT
Cấu trúc của một chương trình hợp ngữ
• Một chương trình ngơn ngữ máy bao gồm
:
– Mã ( code)
– Số liệu ( data)
– Ngăn xếp (stack )
• Mỗi một phần chiếm một đoạn bộ nhớ .
Mỗi một đoạn chương trình là được
chuyển thành một đoạn bộ nhớ bởi ASM .