Professional Documents
Culture Documents
Mips
Mips
LP TRNH HP NG MIPS
Mc ch
Lm quen vi hp ng MIPS.
Bit cch vit, bin dch v chy chng trnh hp ng MIPS vi cng c MARS.
Tm tt l thuyt
Hp ng (Assembly) l ngn ng lp trnh bc thp, n gm tp cc t kha v t gi nh
rt gn vi ngn ng my (machine code).
Mi kin trc vi x l u c tp lnh (instruction set) ring, do s c hp ng ring dnh
cho kin trc . y, ta tp trung nghin cu v hp ng dnh cho kin trc MIPS. Mi
trng lp trnh c s dng l chng trnh MARS. MARS l mi trng lp trnh gi lp
gip ta vit, bin dch v chy hp ng MIPS trn cc my x86.
V d:
var1: .word 3 # s nguyn 4-byte c gi tr khi to l 3
var2: .byte a,b # mng 2 phn t, khi to l a v b
var3: .space 40 # cp 40-byte b nh, cha c khi to
char_array: .byte 'A':10 # mng 10 k t c khi to l 'A', c th thay 'A' bng 65
int_array: .word 0:30 # mng 30 s nguyn c khi to l 0
1
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
Thanh ghi HI v LO
Thao tc nhn ca MIPS c kt qu cha trong 2 thanh ghi HI v LO. Bit 0-31 thuc LO v
32-63 thuc HI.
2
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
Mt s lnh MIPS c bn
Ghi ch:
Rd: thanh ghi ch, Rs, Rt: thanh ghi ngun.
cc lnh mu xanh l cc lnh gi (pseudo instructions).
Lnh Load / Store
y l cc lnh duy nht c php truy xut b nh RAM trong tp lnh ca MIPS.
C php ngha
lw Rd, RAM_src Chp 1 word (4 byte) ti v tr trong b nh RAM vo thanh ghi
lb Rd, RAM_src Chp 1 byte ti v tr trong b nh RAM vo byte thp ca thanh ghi
sw Rs, RAM_dest Lu 1 word trong thanh ghi vo v tr trong b nh RAM
sb Rs, RAM_dest Lu 1 byte thp trong thanh ghi vo v tr trong b nh RAM
li Rd, value Khi to thanh ghi vi gi tr
la Rd, label Khi to thanh ghi vi a ch ca nhn
3
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
System Call:
Lnh syscall lm treo s thc thi ca chng trnh v chuyn quyn iu khin cho HH
(c gi lp bi MARS). Sau , HH s xem gi tr thanh ghi $v0 xc nh xem chng
trnh mun n lm vic g.
Bng cc system call
Dch v Gi tr trong $v0 i s Kt qu
print_int 1 $a0 = integer
print_float 2 $f12 = float
print_double 3 $f12 = double
print_string 4 $a0 = string
read_int 5 integer (trong $v0)
read_float 6 float (trong $f0)
read_double 7 double (trong $f0)
read_string 8 $a0 = buffer, $a1 = length
sbrk 9 $a0 = amount address (trong $v0)
exit 10
print_character 11 $a0 = char
read_character 12 char (trong $v0)
V d:
.data # khai bo data segment
4
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
Stack
Stack (ngn xp) l vng nh c bit c truy cp theo c
ch vo trc ra sau (LIFO Last In First Out), ngha l d
liu no a vo sau s c ly ra trc.
Hnh bn l cu trc stack trong b nh, mi phn t c kch
thc mt word (32-bit).
Thanh ghi $sp ng vai tr l con tr ngn xp (stack
pointer), lun ch n nh ca stack. Stack pht trin theo chiu gim ca a ch vng nh
(nh ca stack lun c a ch thp).
Hai thao tc c bn trong stack l push (a mt phn t vo stack) v pop (ly mt phn t
ra khi stack). C ch nh sau:
push: gim $sp i 4, lu gi tr vo nh m $sp ch n.
V d: push vo stack gi tr trong $t0
subu $sp, $sp, 4
sw $t0, ($sp)
pop: copy gi tr trong vng nh c ch n bi $sp,
cng 4 vo $sp.
V d: pop t stack ra $t0
lw $t0, ($sp)
addu $sp, $sp, 4
Th tc
MIPS h tr mt s thanh ghi lu tr cc d liu phc v cho th tc:
5
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
6
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
7
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
5. Bt, tt vic xem a ch v gi tr nh dng thp phn (decimal) hay thp lc phn
(hexa).
6. a ch ca cc khai bo nhn v d liu.
7. Cc gi tr trong thanh ghi, c th chnh sa c.
8. im t breakpoint dng cho vic debug chng trnh.
9. iu chnh tc chy chng trnh, cho php ngi dng c th xem nhng g din
ra thay v chng trnh kt thc ngay.
Bi tp
Hy vit chng trnh hp ng MIPS (khng dng lnh gi) gii quyt cc bi ton sau:
8
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
9
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
Nhap n: 3
[0]=4
[1]=2
[2]=7
Gia tri nho nhat: 2
Gia tri lon nhat: 7
10