Professional Documents
Culture Documents
B mn MMTVT - HCMUS
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.
Cu trc ca mt chng trnh hp ng MIPS
.data
.text
...
main:
# im bt u ca chng trnh
tn_bin:
gi_tr
var2: .byte
var3: .space
40
.word 0:30
B mn MMTVT - HCMUS
Tn
ngha
$0
$zero
Hng s 0
$1
$at
Assembler Temporary
$2-$3
$v0-$v1
$4-$7
$a0-$a3
Cc tham s ca hm
$8-$15
$t0-$t7
$16-$23
$s0-$s7
$24-$25
$t8-$t9
Thanh ghi tm
$26-27
$k0-$k1
D tr cho nhn HH
$28
$gp
$29
$sp
Con tr stack
$30
$fp
Con tr frame
$31
$ra
a ch tr v
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.
B mn MMTVT - HCMUS
ngha
lw
Rd, RAM_src
lb
Rd, RAM_src
sw
Rs, RAM_dest
sb
Rs, RAM_dest
li
Rd, value
la
Rd, label
ngha
add
Rd, Rs, Rt
Rd = Rs + Rt (kt qu c du)
addi
sub
Rd = Rs - Rt
Rd, Rs, Rt
mult
Rs, Rt
(Hi,Lo) = Rs * Rt
div
Rs, Rt
Lo = Rs / Rt (thng), Hi = Rs % Rt (s d)
mfhi
Rd
Rd = Hi
mflo
Rd
Rd = Lo
move Rd, Rs
Rd = Rs
B mn MMTVT - HCMUS
ngha
label
jal
label
jr
Rs
bgtz
Rs, label
blez
Rs, label
bltz
Rs, label
beq
bne
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
print_int
$a0 = integer
print_float
$f12 = float
print_double
$f12 = double
print_string
$a0 = string
read_int
read_float
read_double
read_string
sbrk
$a0 = amount
exit
10
print_character
11
read_character
12
$a0 = char
char (trong $v0)
V d:
.data
Kt qu
B mn MMTVT - HCMUS
$v0, $zero, 10
syscall
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:
$t0, ($sp)
$t0, ($sp)
i s
Kt qu tr v
$v0, $v1
Bin cc b
a ch quay v
$ra
B mn MMTVT - HCMUS
Cu trc ca mt th tc:
u th tc
entry_label:
addi $sp,$sp, -framesize
sw $ra, framesize-4($sp)
# ly a ch tr v ra $ra
B mn MMTVT - HCMUS
1.
2.
3.
4.
B mn MMTVT - HCMUS
Bt, tt vic xem a ch v gi tr nh dng thp phn (decimal) hay thp lc phn
(hexa).
a ch ca cc khai bo nhn v d liu.
Cc gi tr trong thanh ghi, c th chnh sa c.
im t breakpoint dng cho vic debug chng trnh.
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:
1.
Nhp vo mt chui, xut li chui ra mn hnh (echo).
V d:
Nhap mot chuoi: Hello
Chuoi da nhap: Hello
2.
Nhp vo mt k t, xut ra k t lin trc v lin sau.
V d:
Nhap mot ky tu: b
Ky tu lien truoc: a
Ky tu lien sau: c
3.
Nhp vo mt k t hoa, in ra k t thng.
V d:
Nhap mot ky tu: A
Ky tu thuong: a
4.
Nhp t bn phm 2 s nguyn, tnh tng, hiu, tch, thng ca 2 s.
V d:
Nhap so thu nhat: 7
8
B mn MMTVT - HCMUS
V d:
Nhp vo mt k t: 5
K t va nhp: 5 l s
Nhp vo mt k t : f
K t va nhp : f l ch thng
Nhp vo mt k t : D
K t va nhp : D l ch hoa
7.
Nhp mt mng cc s nguyn n phn t, xut mng ra mn hnh.
V d:
Nhap n: 5
[0]=4
[1]=2
[2]=7
[3]=9
[4]=3
Mang vua nhap: 4 2 7 9 3
8.
Nhp vo mt s nguyn n, tnh tng t 1 n n.
V d:
Nhap mot so: 4
Tong tu 1 den 4 la: 10
9.
Nhp vo mt chui. Tnh chiu di ca chui.
V d:
Nhap mot chuoi: HCMUS
Chieu dai cua chuoi: 5
10.
Nhp vo mng 1 chiu n s nguyn. Xut gi tr ln nht v nh nht.
V d:
9
B mn MMTVT - HCMUS
Nhap n: 3
[0]=4
[1]=2
[2]=7
Gia tri nho nhat: 2
Gia tri lon nhat: 7
Cc bi tp sau dng stack lm:
11.
Nhp vo mt chui, xut ra chui ngc.
V d:
Nhap vao mot chuoi: hello
Chuoi nguoc la: olleh
12.
Vit li bi 1 di dng th tc.
Hng dn: Hm xut chui c dng sau PRINT(&buf), &buf l a ch ca vng nh cha
chui.
13.
Vit li bi 4 di dng th tc.
Hng dn: Hm tnh tng c dng sau SUM(X, Y, Z), trong X, Y l 2 s nguyn, Z l tng
ca 2 s.
14.
Vit li bi s 10 di dng th tc.
Hng dn: vit hm MinMax(&X, N, Min, Max), trong
&X: a ch bt u ca mng
N: s phn t ca mng
Min, Max: gi tr nh nht, ln nht
10