You are on page 1of 10

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

LP TRNH HP NG MIPS
Mc ch
Lm quen vi hp ng MPS.
Bit cch vit, bin dch v chay chuong trnh hp ng MPS vi cng cu 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 du c tp lnh (instruction set) ring, do d s c hp ng ring dnh
cho kin trc d. dy, ta tp trung nghin cu v hp ng dnh cho kin trc MPS. Mi
trung lp trnh duc s dung l chuong trnh MARS. MARS l mi trung lp trnh gi lp
gip ta vit, bin dch v chay hp ng MPS trn cc my x86.
Cu t!c c"# m$t ch%&'( t)'h h*+ '(, MIPS
.data # khai bo bin sau chi th ny
...
.text # vit cc lnh sau chi th ny
main: # dim bt du ca chuong trnh
.
C-ch .h#/ 0-1 0/'
tn_bin: kiu_luu_tr gi_tr
Cc kiu luu tr h tr: .word, .byte, .ascii, .asciiz, .space
!"# $% tn_bin (nhn) phi theo sau bi du hai chm (:)
V du:
var1: .word 3 # s nguyn 4-byte c gi tr khi tao l 3
var2: .byte 'a','b' # mng 2 phn t, khi tao l a v b
var3: .space 40 # cp 40-byte b nh, chua duc khi tao
char_array: .byte 'A':10 # mng 10 k tu duc khi tao l 'A', c th thay 'A' bng 65
int_array: .word 0:30 # mng 30 s nguyn duc khi tao l 0
1
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
C-c th#'h (h/ t1'( MIPS
Thanh ghi da 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 tam (khng gi gi tr trong qu trnh goi hm)
$16-$23 $s0-$s7 Thanh ghi luu tr (gi gi tr trong sut qu trnh goi hm)
$24-$25 $t8-$t9 Thanh ghi tam
$26-27 $k0-$k1 Du tr cho nhn HH
$28 $gp Con tr ton cuc (global pointer)
$29 $sp Con tr stack
$30 $fp Con tr frame
$31 $ra a chi tr v
Thanh ghi H v LO
Thao tc nhn ca MPS c kt qu cha trong 2 thanh ghi H v LO. Bit 0-31 thuc LO v
32-63 thuc H.
Thanh ghi du phy dng
MPS s dung 32 thanh ghi du phy dng d biu din d chnh xc don ca s thuc. Cc
thanh ghi ny c tn l : 234 5 23678
biu din d chnh xc kp (double precision) th MPS s dung su ghp di ca 2 thanh
ghi c d chnh xc don.
2
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
C! +h-+ t9'( :u-t l;'h MIPS
<tn-lnh> <r1>, <r2>, <r3>
r1: thanh ghi cha kt qu
r2: thanh ghi
r3: thanh ghi hoc hng s
M$t <= l;'h MIPS c& 0>'
Ghi ch:
Rd: thanh ghi dch, Rs, Rt: thanh ghi ngun.
cc lnh mu xanh l cc lnh gi (pseudo instructions).
Lnh Load / Store
y l cc lnh duy nht duc php truy xut b nh RAM trong tp lnh ca MPS.
C php ngha
lw Rd, RAM_src Chp 1 word (4 byte) tai v tr trong b nh RAM vo thanh ghi
lb Rd, RAM_src Chp 1 byte tai v tr trong b nh RAM vo byte thp ca thanh ghi
sw Rs, RAM_dest Luu 1 word trong thanh ghi vo v tr trong b nh RAM
sb Rs, RAM_dest Luu 1 byte thp trong thanh ghi vo v tr trong b nh RAM
li Rd, value Khi tao thanh ghi vi gi tr
la Rd, label Khi tao thanh ghi vi da chi ca nhn
Nhm lnh s hoc:
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 (thuong), Hi = Rs % Rt (s du)
mfhi Rd Rd = Hi
mflo Rd Rd = Lo
move Rd, Rs Rd = Rs
3
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
Nhm lnh nhy
C php ngha
label Nhy khng diu kin dn nhn 'label'
al label Luu da chi tr v vo $ra v nhy dn nhn 'label' (dng khi goi hm)
r Rs Nhy dn da chi trong thanh ghi Rs (dng d tr v t li goi hm)
bgez Rs, label Nhy dn nhn 'label' nu Rs >= 0
bgtz Rs, label Nhy dn nhn 'label' nu Rs > 0
blez Rs, label Nhy dn nhn 'label' nu Rs <= 0
bltz Rs, label Nhy dn nhn 'label' nu Rs < 0
beq Rs, Rt, label Nhy dn nhn 'label' nu Rs = Rt
bne Rs, Rt, label Nhy dn nhn 'label' nu Rs = Rt
System Call:
Lnh syscall lm treo su thuc thi ca chuong trnh v chuyn quyn diu khin cho HH
(duc gi lp bi MARS). Sau d, HH s xem gi tr thanh ghi $v0 d xc dnh xem chuong
trnh mun n lm vic g.
Bng cc system call
Dch vu 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 du:
.data # khai bo data segment
4
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
str: .asciiz hello world
.text
.globl main
main: # nhn main cho vi x l bit noi thuc thi lnh du tin
la $a0, str # ti da chi ca nhn str vo thanh ghi $a0
addi $v0, $zero, 4 # dua gi tr 4 vo thanh ghi $v0
syscall
addi $v0, $zero, 10
syscall
St#c.
Stack (ngn xp) l vng nh dc bit duc truy cp theo co
ch vo truc ra sau (LO Last n irst Out), ngha l d
liu no dua vo sau s duc ly ra truc.
Hnh bn l cu trc stack trong b nh, mi phn t c kch
thuc mt word (32-bit).
Thanh ghi $sp dng vai tr l con tr ngn xp (stack
pointer), lun chi dn dinh ca stack. Stack pht trin theo chiu gim ca da chi vng nh
(dinh ca stack lun c da chi thp).
Hai thao tc co bn trong stack l push (dua mt phn t vo stack) v pop (ly mt phn t
ra khi stack). Co ch nhu sau:
push: gim $sp di 4, luu gi tr vo nh m $sp chi dn.
V du: push vo stack gi tr trong $t0
subu $sp, $sp, 4
sw $t0, ($sp)
pop: copy gi tr trong vng nh duc chi dn bi $sp,
cng 4 vo $sp.
V du: pop t stack ra $t0
lw $t0, ($sp)
addu $sp, $sp, 4
Th" tc
MPS h tr mt s thanh ghi d luu tr cc d liu phuc vu cho th tuc:
5
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
i s $a0, $a1, $a2, $a3
Kt qu tr v $v0, $v1
Bin cuc b $s0, $s1, ... , $s7
a chi quay v $ra
Cu trc ca mt th tuc:
u th tuc
entry_label:
addi $sp,$sp, -framesize # khai bo kch thuc cho stack
sw $ra, framesize-4($sp) # ct da chi tr v ca th tuc trong $ra vo ngn xp
(dng khi goi hm lng nhau)
Luu tam cc thanh ghi khc (nu cn)
Thn th tuc ...
(c th goi cc th tuc khc...)
Cui th tuc
Phuc hi cc thanh ghi khc (nu cn)
lw $ra, framesize-4($sp) # ly da chi tr v ra $ra
addi $sp,$sp, framesize
r $ra
Goi th tuc: al entry_label
G/?/ th/;u ch%&'( t)'h M@RS
6
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
1. Cho bit ta dang ch d soan tho
2,3. Thanh menu v thanh cng cu h tr cc chc nng ca chuong trnh.
4. Noi soan tho chuong trnh hp ng MPS
1. Cho bit ta dang ch d thuc thi
2. Khung thuc thi cho ta bit da chi lnh (Address), m my (Code), lnh hp ng MPS
(Basic), dng lnh trong file source tuong ng (Source).
3. Cc gi tr trong b nh, c th chinh sa duc.
4. Cho php ta duyt b nh (2 nt mi tn) v di dn cc phn doan b nh thng dung.
7
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
5. Bt, tt vic xem da chi v gi tr nh dang thp phn (decimal) hay thp luc phn
(hexa).
6. a chi ca cc khai bo nhn v d liu.
7. Cc gi tr trong thanh ghi, c th chinh sa duc.
8. im dt breakpoint dng cho vic debug chuong trnh.
9. iu chinh tc d chay chuong trnh, cho php ngui dng c th xem nhng g din
ra thay v chuong trnh kt thc ngay.
TA/ l/;u th#m .h>1
1 http://chortle.ccsu.edu/AssemblyTutorial/index.html - Programmed ntroduction to MPS
Assembly Language, Bradley Kjell
2 http://www.scribd.com/doc/3577342/MPS-Assembly-Language-Programming - MPS
Assembly Language Programming, Robert Britton.
3 http://dkrizanc.web.wesleyan.edu/courses/231/07/mips-spim.pdf - MPS Assembly
Language Programming, Daniel J. Ellard.
4 http://logos.cs.uic.edu/366/notes/MPS%20uick%20Tutorial.htm - MPS Architecture and
Assembly Language Overview
5 http://www.cs.cornell.edu/tomf/notes/cps104/mips.html - MPS xamples
BA/ tC+
Hy vit chuong trnh hp ng MPS (khng dng lnh gi) d gii quyt cc bi ton sau:
1. Nhp vo mt chui, xut lai chui d ra mn hnh (echo).
V du:
Nhap mot chuoi: Hello
Chuoi da nhap: Hello
2. Nhp vo mt k tu, xut ra k tu lin truc v lin sau.
V du:
Nhap mot ky tu: b
Ky tu lien truoc: a
Ky tu lien sau: c
3. Nhp vo mt k tu hoa, in ra k tu thung.
V du:
Nhap mot ky tu: A
Ky tu thuong: a
4. Nhp t bn phm 2 s nguyn, tnh tng, hiu, tch, thuong ca 2 s.
V du:
Nhap so thu nhat: 7
8
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
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 hon.
V du:
Nhap so thu nhat: 6
Nhap so thu hai: 9
So lon hon la: 9
6. Nhp mt k tu t bn phm. Nu k tu va nhp thuc 0-9, a-z, A- th xut ra
mn hnh k tu d v loai ca k tu d (s, ch thung, ch hoa).
V du:
Nhp vo mt k tu: 5
K tu va nhp: 5 l s
Nhp vo mt k tu : f
K tu va nhp : f l ch thung
Nhp vo mt k tu : D
K tu va nhp : D l ch hoa
7. Nhp mt mng cc s nguyn n phn t, xut mng d ra mn hnh.
V du:
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 dn n.
V du:
Nhap mot so: 4
Tong tu 1 den 4 la: 10
9. Nhp vo mt chui. Tnh chiu di ca chui.
V du:
Nhap mot chuoi: HCMS
Chieu dai cua chuoi: 5
10. Nhp vo mng 1 chiu n s nguyn. ut gi tr ln nht v nh nht.
V du:
9
HDTH Kin trc my tnh & Hp Ng B mn MMTVT - HCMU
Nhap n: 3
0 = 4
1 = 2
2 = 7
Gia tri nho nhat: 2
Gia tri lon nhat: 7
C-c 0A/ tC+ <#u DE'( <t#c. F lAmG
11. Nhp vo mt chui, xut ra chui nguc.
V du:
Nhap vao mot chuoi: hello
Chuoi nguoc la: olleh
12. Vit lai bi 1 dui dang th tuc.
Hung dn: Hm xut chui c dang sau PRNT(buf), buf l da chi ca vng nh cha
chui.
13. Vit lai bi 4 dui dang th tuc.
Hung dn: Hm tnh tng c dang sau SM(, , ), trong d , l 2 s nguyn, l tng
ca 2 s.
14. Vit lai bi s 10 dui dang th tuc.
Hung dn: vit hm MinMax(, N, Min, Max), trong d
: da chi bt du ca mng
N: s phn t ca mng
Min, Max: gi tr nh nht, ln nht
10

You might also like