Tải bản đầy đủ (.pdf) (45 trang)

Slide - Các khái niệm hệ thống số Chuyển đổi cơ số docx

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (181.94 KB, 45 trang )

Hợp ngữ
Khoa Điện tử - Viễn thông
Trương Văn Thắng
Giới thiệu
Các khái niệm hệ thống số
Chuyển đổi cơ số
Các thanh ghi của intel 8088,
8086
1/CÁC HỆ THÔNG SỐ
• HỆ 10 HỆ 16 HỆ 2
0 0 0
1 1 1
2 2 10
3 3 11
4 4 100
5 5 101
6 6 110
7 7 111
8 8 1000
9 9 1001
10 A 1010
11 B 1011
12 C 1100
13
D
1101
• a/Chuyển từ cơ số b sang cơ số thập
phân(10)
Ví dụ: chuyển từ cơ số 10 sang số 10
123


10
=100+20+3=1X10
2
+2X10+3X10
0
d
n-1
d
n-2
….d
1
d
0
.d
-1
….d
-m
(*)
b là cơ số
d
i
là chỉ số
0<=d
i
< b
2/Chuyển đổi cơ số
* Đổi từ nhị phân sang thập phân
1011.01
2
> 1X2

3
+1X2
1
+1X2
0
+1X2
-2
* Đổi từ thập lục phân sang thập phân
A4B5
16
 10X16
3
+4X16
2
+11X16
1
+5X16
0
=40960 + 1024 +176 + 5
=42165
b/ Chuyển từ thập phân sang cơ số b
ví dụ: chuyển từ thập phân sang
thập phân
123.5
(10)
123:10=12 dư 3;
12:10=1 dư 2; 1:10=0 dư 1; 0.5x10=1 và
lẻ 0
Các ví dụ:
Chuyển từ thập phân sang cơ số b

d
n-1
b
n-1
+d
n-2
b
n-2
+…+d
1
b
1
+d
0
(***)
d
-1
b
-1
+d
-2
b
-2
+….+ d
-m
b
-m
(****)
Đổi phần nguyên : chia cho cơ số  kết
quả :thương số và dư số. If thương số

bằng 0 thì tổ hợp các dư số chính là số
cần tìm ngược lại thì tiếp tục chia nũa
Đổi phần lẻ: khi nhân 2 số thì được 1 tích
 2 phần: phần nguyên và phần lẻ. If
phần lẻ bằng 0 kết quả:tổ hợp các phần
CÁC VÍ DỤ
Đổi số 26 sang số nhị phân
26/2 =13 dư 0
13/2 =6 dư 1
6 /2 =3 dư 0
3 /2 =1 dư 1
1 /2 = 0 dư 1
26
10
 11010
2
Đổi số 0.25 10sang nhị phân
0.25 x 2 =0.5 lẻ 0.5 nguyên 0
0.5 x 2 = 1.0 lẻ 0 nguyên 1
0.25
10
 0.01
2
Đổi 27110 sang số thập lục phân
271 / 16 =16 dư 15
16 / 16 = 1 dư 0
1 /16 = 0 dư 1
271
10
 10F

16
Đổi nhị nhân sang thập lục phân và
ngược lại
• Nhị phân thành thập lục phân
11001110.110
2
 CD.C
• Thập lục phân sang nhị phân
1AF.8
16
 000110101111.1000
2
3/Các thanh ghi của CPU
8088(8086)
• Trong CPU intel có 14 thanh ghi, chia
thành 4 nhóm
a/ Nhóm thanh ghi đa năng: 4 thanh ghi,
16bits
AX( AH và AL) (Accumulato )
BX(BH và BL) (Base )
CX(CH và CL) (Count )
DX(DH và DL) (Data)
Chức năng: tính toán và chuyển số liệu
• Chức năng riêng:
AX(AH&AL): Có ý nghĩa phép nhân
và chia
BX: Dùng làm con trỏ để tro trong
lòng dữ liệu
CX:Chứa số lần lập lai
DX: Chứa địa chỉ của một cổng

nào đó
b/ Nhóm thanh ghi
segment(đoan)
• Có 4 thanh ghi 16 bits. Dùng để quản lý
một vùng nhớ có kích thước 64 k bytes
Thanh ghi CS (code segment): quản lý một
đoạn code của chương trình
Thanh ghi DS (date segment ):quản lý dữ
liệu chương trình
Thanh ghi ES(Extra data segment): quản lý
dữ liệu chương trình
Thanh ghi SS (stack segment): đoạn ngăn
xếp
c/Nhóm thanh ghi con trỏ
• Gồm có 4 thanh ghi 16 bits
* SI (Source index ) ,DI (destination index
): sử dụng làm con trỏ để trỏ dữ liệu trong
chương trình (địa chỉ )
* SP (Stack pointer ):Dùng để chứa địa
chỉ offset của đỉnh ngăn xếp( SS:SP ) .
Nếu cấp vào stack thì SP=SP-2 còn lấy ra
khỏi stack SP=SP+2
* BP ( Base pointer ) : Dùng để chỉ trong
d/Nhóm thanh ghi khác
• Có 2 thanh ghi 16 bits
I P ( Intruction Pointer ) : Con trỏ lệnh
,dùng để chứa offser của lệnh tiếp theo (
CS:IP ). Khi thực hiện xong một lệnh thì
IP=IP+ độ lớn của lệnh vừa thực hiện tính
theo đợn vị là byte

Thanh ghi cờ :
• + Các cờ phép toán : CF (cờ nhớ ), PF
(cờ kiểm tra chẵn lẻ ) ,AF (cờ phụ ) ,
O
F
D
F
I
F
T
F
S
F
Z
F
A
F
PF CF
4/Segment và offset
Segment là một đoạn vùng nhớ có kích thước 64kB. Được viết là Segment
Offset là một đoạn vùng nhớ có kích thước 1byte. Được viết là Offset
Đinh nghĩa một ô nhớ
SEGMENT:OFFSET
Đinh nghĩa một giá trị:
SEGMENT:[OFFSET]
Định nghĩa giá trị vật lý:
GIÁ TRỊ VẬT LÝ= SEGMENT * 16 +OFFSET
VÍ DỤ:
• Cho segment là 40h
• Cho offset là 63h

ES40h, DI63h, vậy địa chỉ ô nhớ
là ES:DI
Giá trị ô nhớ là
ES:[DI]
• Cho segment là 40h
• Cho offset là 13h
• Địa vật lý là 40h*16+13h=0413h

Địa chỉ tương đối:
Dạng chương trình tổng quát
• Có 2 dang chương trình: COM và EXE
• Dạng .COM
- Tất cả các thanh ghi segment trỏ cùng
một chỗ:
CS, DS, ES, SS
-Chương trình bắt đầu: 100h( ORG 100H)
- Tất cả lệnh nhảy là nhảy gần(NEAR)
-Kích thước chương trình sử dụng là
FFFFH – 100H
Chương trình Dạng tổng quát
.model small
.code
org 100h
start: jmp main
<phần khai báo dữ liệu>
……………
<Phần chương trình con(procedural)>
…….
main proc near
<thân của chương trình chính>

………….
int 20h; Kết thúc chương trình
(mov ax,4c00h
int 21h
main endp
Khai báo dữ liệu
• Tên_biến kích_thước_dữ_liệu dữ liệu
• kích_thước_dữ_liệu: db là một phần tử 1
byte
dw là một phần tử 2 byets(1
word)
dd là một phần tử 4bytes
(1double word)
ví dụ:
ten_1 db 10, 12h
ten_2 db ‘xin chao cac ban’, ‘$’
ten_3 db 20 dup(0)
Ví dụ:Viết chương trình in một
thông báo. Dạng .COM
.model small
.code
org 100h
start: jmp main
str1 db 10, 13,‘ xin chao cac ban’,10,13,’
$’
main proc near
mov ah,09
lea dx,str1; (mov dx,offset str1)
int 21h
int 20h;(mov ax,4c00h; int 21h)

Tiếp theo
• Lưu với tên là bất kỳ ví dụ: VD1
• Và kiểu là ASM
• Cần 2 tập tin để dịch ra mã máy: TASM.EXE
và TLINK.EXE
• Cấn 2 tập tin:NC.EXE và DEBUG.EXE để
soạn thảo và gở rối
• Dịch:
TASM VD1;
nếu không có lỗi thì
TLINK/T VD1;
Ví dụ:In ra man hình 256 ký tự
.Model small
.code
org 100h
start: jmp main
main proc near
mov cx,256
mov ah,2
mov dl,0
ct1: int 21h
inc dl
jnz ct1
int 20
Các chức năng interrupts 21h
• In ký tự ra man hình
input: mov ah,02
mov dl, ký tự
int 21h
output:none

• In một chuỗi ký tự
Input: mov ah,09
lea dx,chuỗi ký tự(offset của chuỗi)
int 21h
Các chức năng interrupts
21h(tt)
• Nhập một ký tự
input: mov ah,01(08)
int 21h
output:alchứa ký tự nhận vào
• Nhận một chuỗi ký tự
input: mov ah,0ah
lea dx, chiều của buffer
int 21h
output: DS:DX=chiều dài của chuỗi
DS:DX+1=số ký tự nhập vào
Chương trình dạng .EXE
.Model small
.data
< khai báo dữ liệu>
.stack
dw n (h)
.code
start: jmp main
< khai báo chương trình con>
main proc near(far)
mov ax,@data
mov ds,ax

<thân chương trình>

mov ax,4c00h
int 21h
main endp
end start

×