You are on page 1of 9

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, .asciiz .space Lu : tn_bin (nhn) phi theo sau bi du hai chm (:) V d: var1: .word var2: .byte var3: .space 3 40 # s nguyn 4-byte c gi tr khi to l 3 # cp 40-byte b nh, cha c khi to a,b # mng 2 phn t, khi to l a v b

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. C php tng qut lnh MIPS <tn-lnh> <r1>, <r2>, <r3>

HDTH Kin trc my tnh & Hp Ng 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 (kt qu c du) Rd = Rs + Rt (kt qu khng du) Rd = Rs - Rt Rd = Rs - Rt (kt qu khng du) (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 Rd, Rs, Rt Rs, Rt Rs, Rt Rd Rd

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

move Rd, Rs Nhm lnh nhy C php

ngha 3

HDTH Kin trc my tnh & Hp Ng j jal jr bgtz blez bltz beq bne label label Rs Rs, label Rs, label Rs, label Rs, Rt, label Rs, Rt, label 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 str: .text 4 # khai bo data segment .asciiz hello world 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 .globl main main: # nhn main cho vi x l bit ni thc thi lnh u tin la $a0, str addi # ti a ch ca nhn str vo thanh ghi $a0 addi $v0, $zero, 4 # a gi tr 4 vo thanh ghi $v0 $v0, $zero, 10 syscall Stack Stack (ngn xp) l vng nh c bit c truy cp theo c trc ra sau (LIFO Last In First Out), ngha l d liu no s c ly ra trc.

B mn MMTVT - HCMUS

syscall

ch vo a vo sau

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) cng pop: copy gi tr trong vng nh c ch n bi $sp, 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: i s Kt qu tr v Bin cc b a ch quay v $a0, $a1, $a2, $a3 $v0, $v1 $s0, $s1, ... , $s7 $ra

Cu trc ca mt th tc: 5

HDTH Kin trc my tnh & Hp Ng u th tc entry_label: addi $sp,$sp, -framesize sw $ra, framesize-4($sp) 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

B mn MMTVT - HCMUS

# khai bo kch thc cho stack # ct a ch tr v ca th tc trong $ra vo ngn xp

Lu tm cc thanh ghi khc (nu cn)

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

HDTH Kin trc my tnh & Hp Ng

B mn MMTVT - HCMUS

1. 2. 3. 4. 5. 6. 7. 8. 9.

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

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

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

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

B mn MMTVT - HCMUS

You might also like