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

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 var2: .byte var3: .space int_array: 3 40 .word 0:30 # s nguyn 4-byte c gi tr khi to l 3 # cp 40-byte b nh, cha c khi to # mng 30 s nguyn c khi to l 0 a,b # mng 2 phn t, khi to l a v b

char_array: .byte 'A':10 # mng 10 k t c khi to l 'A', c th thay 'A' bng 65

HDTH Kin trc my tnh & Hp Ng Cc thanh ghi trong MIPS Thanh ghi a nng S $0 $1 $2-$3 $4-$7 $8-$15 $16-$23 $24-$25 $26-27 $28 $29 $30 $31 Tn $zero $at $v0-$v1 $a0-$a3 $t0-$t7 $s0-$s7 $t8-$t9 $k0-$k1 $gp $sp $fp $ra ngha Hng s 0 Assembler Temporary

B mn MMTVT - HCMUS

Gi tr tr v ca hm hoc biu thc Cc tham s ca hm Thanh ghi tm (khng gi gi tr trong qu trnh gi hm) Thanh ghi lu tr (gi gi tr trong sut qu trnh gi hm) Thanh ghi tm D tr cho nhn HH Con tr ton cc (global pointer) Con tr stack Con tr frame 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 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).

B mn MMTVT - HCMUS

Lnh Load / Store y l cc lnh duy nht c php truy xut b nh RAM trong tp lnh ca MIPS. C php lw lb sw sb li la Rd, RAM_src Rd, RAM_src Rs, RAM_dest Rs, RAM_dest Rd, value Rd, label ngha Chp 1 word (4 byte) ti v tr trong b nh RAM vo thanh ghi Chp 1 byte ti v tr trong b nh RAM vo byte thp ca thanh ghi Lu 1 word trong thanh ghi vo v tr trong b nh RAM Lu 1 byte thp trong thanh ghi vo v tr trong b nh RAM Khi to thanh ghi vi gi tr Khi to thanh ghi vi a ch ca nhn

Nhm lnh s hc: C php add addi sub mult div mfhi mflo Rd, Rs, Rt ngha Rd = Rs + Rt (c th gy ra overflow exception) Rd = Rs + Rt (b qua overflow exception) Rd = Rs - Rt (c th gy ra overflow exception) Rd = Rs - Rt (b qua overflow exception) (Hi,Lo) = Rs * Rt Lo = Rs / Rt (thng), Hi = Rs % Rt (s d) Rd = Hi Rd = Lo Rd = Rs

Rd, Rs, imm Rd = Rs + imm (c th gy ra overflow exception) Rd, Rs, Rt Rs, Rt Rs, Rt Rd Rd

addu Rd, Rs, Rt subu Rd, Rs, Rt

move Rd, Rs

HDTH Kin trc my tnh & Hp Ng Nhm lnh nhy C php j jal jr bgtz blez bltz beq bne label label Rs Rs, label Rs, label Rs, label Rs, Rt, label Rs, Rt, label ngha Nhy khng iu kin n nhn 'label'

B mn MMTVT - HCMUS

Lu a ch tr v vo $ra v nhy n nhn 'label' (dng khi gi hm) Nhy n a ch trong thanh ghi Rs (dng tr v t li gi hm) Nhy n nhn 'label' nu Rs >= 0 Nhy n nhn 'label' nu Rs > 0 Nhy n nhn 'label' nu Rs <= 0 Nhy n nhn 'label' nu Rs < 0 Nhy n nhn 'label' nu Rs = Rt Nhy n nhn 'label' nu Rs != Rt

bgez Rs, label

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 print_int print_float print_double print_string read_int read_float read_double read_string sbrk exit print_character read_character V d: .data # khai bo data segment 4 Gi tr trong $v0 1 2 3 4 5 6 7 8 9 10 11 12 $a0 = char char (trong $v0) $a0 = buffer, $a1 = length $a0 = amount address (trong $v0) i s $a0 = integer $f12 = float $f12 = double $a0 = string integer (trong $v0) float (trong $f0) double (trong $f0) Kt qu

HDTH Kin trc my tnh & Hp Ng str: .asciiz hello world .text .globl main main: # nhn main cho vi x l bit ni thc thi lnh u tin la $a0, str 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). # ti a ch ca nhn str vo thanh ghi $a0 addi $v0, $zero, 4 # a gi tr 4 vo thanh ghi $v0

B mn MMTVT - HCMUS

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 addiu $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) addiu $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 Kt qu tr v Bin cc b a ch quay v $a0, $a1, $a2, $a3 $v0, $v1 $s0, $s1, ... , $s7 $ra

B mn MMTVT - HCMUS

Cu trc ca mt th tc: u th tc entry_label: addi $sp,$sp, -framesize sw $ra, framesize-4($sp) # khai bo kch thc cho stack # 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) addi $sp,$sp, framesize jr $ra Gi th tc: jal entry_label Gii thiu chng trnh MARS # ly a ch tr v ra $ra

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.mrc.uidaho.edu/mrc/people/jff/digital/MIPSir.html - MIPS Instruction Reference [6] http://www.cs.cornell.edu/~tomf/notes/cps104/mips.html - MIPS Examples [7] http://pages.cs.wisc.edu/~cs354-1/onyourown/arrays.html - Code Implementations Dealing with Arrays

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 8

HDTH Kin trc my tnh & Hp Ng Ky tu thuong: a

B mn MMTVT - HCMUS

4. Nhp t bn phm 2 s nguyn, tnh tng, hiu, tch, thng ca 2 s. V d: Nhap so thu nhat: 7 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. Hng dn: Syscall read_string c mt chui nhp t bn phm cho n khi gp k t '\n' 9

HDTH Kin trc my tnh & Hp Ng

B mn MMTVT - HCMUS

(k t xung dng) hoc t n chiu di ti a cho php. Chui kt qu gm chui nhp, '\n' v '\0' (k t kt thc 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: 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 ===== THE END ====

10

You might also like