You are on page 1of 9

HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS

1
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 # khai bo bin sau ch th ny
...
.text # vit cc lnh sau ch th ny
main: # im bt u ca chng trnh


Cch khai bo bin
tn_bin: kiu_lu_tr gi_tr
Cc kiu lu tr h tr: .word, .byte, .asciiz .space
Lu : tn_bin (nhn) phi theo sau bi du hai chm (:)

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



HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
2
Cc thanh ghi trong MIPS

Thanh ghi a nng
S Tn ngha
$0 $zero Hng s 0
$1 $at Assembler Temporary
$2-$3 $v0-$v1 Gi tr tr v ca hm hoc biu thc
$4-$7 $a0-$a3 Cc tham s ca hm
$8-$15 $t0-$t7 Thanh ghi tm (khng gi gi tr trong qu trnh gi hm)
$16-$23 $s0-$s7 Thanh ghi lu tr (gi gi tr trong sut qu trnh gi hm)
$24-$25 $t8-$t9 Thanh ghi tm
$26-27 $k0-$k1 D tr cho nhn HH
$28 $gp Con tr ton cc (global pointer)
$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.


Thanh ghi du phy ng
MIPS s dng 32 thanh ghi du phy ng biu din chnh xc n ca s thc. Cc
thanh ghi ny c tn l : $f0 $f31.
biu din chnh xc kp (double precision) th MIPS s dng s ghp i ca 2 thanh
ghi c chnh xc n.

HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
3
C php tng qut lnh MIPS
<tn-lnh> <r1>, <r2>, <r3>
r1: thanh ghi cha kt qu
r2: thanh ghi
r3: thanh ghi hoc hng s

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

Nhm lnh s hc:
C php ngha
add Rd, Rs, Rt Rd = Rs + Rt (kt qu c du)
addi Rd, Rs, imm Rd = Rs + imm
addu Rd, Rs, Rt Rd = Rs + Rt (kt qu khng du)
sub Rd, Rs, Rt Rd = Rs - Rt
subu Rd, Rs, Rt Rd = Rs - Rt (kt qu khng du)
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

HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
4
Nhm lnh nhy
C php ngha
j label Nhy khng iu kin n nhn 'label'
jal label Lu a ch tr v vo $ra v nhy n nhn 'label' (dng khi gi hm)
jr Rs Nhy n a ch trong thanh ghi Rs (dng tr v t li gi hm)
bgez Rs, label Nhy n nhn 'label' nu Rs >= 0
bgtz Rs, label Nhy n nhn 'label' nu Rs > 0
blez Rs, label Nhy n nhn 'label' nu Rs <= 0
bltz Rs, label Nhy n nhn 'label' nu Rs < 0
beq Rs, Rt, label Nhy n nhn 'label' nu Rs = Rt
bne Rs, Rt, label Nhy n nhn 'label' nu Rs != Rt

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
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
5
str: .asciiz hello world
.text
.globl main
main: # nhn main cho vi x l bit ni thc thi lnh u tin
la $a0, str # ti a ch ca nhn str vo thanh ghi $a0
addi $v0, $zero, 4 # a gi tr 4 vo thanh ghi $v0
syscall
addi $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:
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:
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
6
i s $a0, $a1, $a2, $a3
Kt qu tr v $v0, $v1
Bin cc b $s0, $s1, ... , $s7
a ch quay v $ra
Cu trc ca mt th tc:
u th tc
entry_label:
addi $sp,$sp, -framesize # khai bo kch thc cho stack
sw $ra, framesize-4($sp) # ct a ch tr v ca th tc trong $ra vo ngn xp
Lu tm cc thanh ghi khc (nu cn)
Thn th tc ...
(c th gi cc th tc khc...)
Cui th tc
Phc hi cc thanh ghi khc (nu cn)
lw $ra, framesize-4($sp) # ly a ch tr v ra $ra
addi $sp,$sp, framesize
jr $ra

Gi th tc: jal entry_label

Gii thiu chng trnh MARS
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
7

1. Cho bit ta ang ch son tho
2,3. Thanh menu v thanh cng c h tr cc chc nng ca chng trnh.
4. Ni son tho chng trnh hp ng MIPS


1. Cho bit ta ang ch thc thi
2. Khung thc thi cho ta bit a ch lnh (Address), m my (Code), lnh hp ng MIPS
(Basic), dng lnh trong file source tng ng (Source).
3. Cc gi tr trong b nh, c th chnh sa c.
4. Cho php ta duyt b nh (2 nt mi tn) v i n cc phn on b nh thng dng.
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
8
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.

Ti liu tham kho
[1] http://chortle.ccsu.edu/AssemblyTutorial/index.html - Programmed Introduction to MIPS
Assembly Language, Bradley Kjell
[2] http://www.scribd.com/doc/3577342/MIPS-Assembly-Language-Programming - MIPS
Assembly Language Programming, Robert Britton.
[3] http://dkrizanc.web.wesleyan.edu/courses/231/07/mips-spim.pdf - MIPS Assembly
Language Programming, Daniel J. Ellard.
[4] http://logos.cs.uic.edu/366/notes/MIPS%20Quick%20Tutorial.htm - MIPS Architecture and
Assembly Language Overview
[5] http://www.cs.cornell.edu/~tomf/notes/cps104/mips.html - MIPS Examples

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
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMUS
9
Nhap so thu hai: 4
Tong: 11
Hieu: 3
Tich: 28
Thuong: 1 du 3

5. Nhp vo 2 s nguyn, xut ra php so snh gia 2 s.
V d:
Nhap so thu nhat: 6
Nhap so thu hai: 9
So lon hon la: 9

6. Nhp mt k t t bn phm. Nu k t va nhp thuc [0-9], [a-z], [A-Z] th xut ra
mn hnh k t v loi ca k t (s, ch thng, ch hoa).
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 mang cac so nguyen: 1 2 3 4 5
Mang vua nhap: 1 2 3 4 5

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, xut ra chui ngc.
V d:
Nhap vao mot chuoi: hello
Chuoi nguoc la: olleh

You might also like