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
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
3
B mn MMTVT - HCMUS
ngha
label
jal
label
jr
Rs
bgtz
Rs, label
blez
Rs, label
bltz
Rs, label
beq
Bgt
Rs , i label
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
Y nghia
print_int
$a0 = integer
Xuat so nguyen
print_float
$f12 = float
Xuat so thuc
print_double
$f12 = double
Xuat chuoi
print_string
$a0 = string
Xuat chuoi
print_character
11
$a0 = char
Xuat ky tu
read_character
12
Nhap ky tu
read_int
read_float
Nhap so thuc
read_double
Nhap so thuc
dai
read_string
sbrk
$a0 = amount
exit
10
4
Kt qu
Nhap chuoi
address (trong $v0)
B mn MMTVT - HCMUS
V d:
.data
str:
$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)
B mn MMTVT - HCMUS
i s
Kt qu tr v
$v0, $v1
Bin cc b
a ch quay v
$ra
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.