Download as pdf or txt
Download as pdf or txt
You are on page 1of 10

HDTH Kin trc my tnh & Hp Ng 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 # 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, .ascii, .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
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

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.

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

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

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

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

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

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:

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

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
(dng khi gi hm lng nhau)
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

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

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.

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.

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

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

Nhap so thu hai: 4


Tong: 11
Hieu: 3
Tich: 28
Thuong: 1 du 3

5. Nhp vo 2 s nguyn, xut ra s ln hn.


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 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
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

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

You might also like