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

tn_bin:

Cch khai bo 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

# 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

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.

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

HDTH Kin trc my tnh & Hp Ng

B mn MMTVT - HCMUS

Nhm lnh nhy


C php

ngha

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

print_int

$a0 = integer

print_float

$f12 = float

print_double

$f12 = double

print_string

$a0 = string

read_int

integer (trong $v0)

read_float

float (trong $f0)

read_double

double (trong $f0)

read_string

$a0 = buffer, $a1 = length

sbrk

$a0 = amount

exit

10

print_character

11

read_character

12

address (trong $v0)

$a0 = char
char (trong $v0)

V d:
.data

Kt qu

# khai bo data segment


4

HDTH Kin trc my tnh & Hp Ng


str:

B mn MMTVT - HCMUS

.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

i s

$a0, $a1, $a2, $a3

Kt qu tr v

$v0, $v1

Bin cc b

$s0, $s1, ... , $s7

a ch quay v

$ra

B mn MMTVT - HCMUS

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

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.
2.
3.
4.

Cho bit ta ang ch thc thi


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).
Cc gi tr trong b nh, c th chnh sa c.
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


5.
6.
7.
8.
9.

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.

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