imam jedan MIPS assembly kod koji bih volio da bolje razumijem, da vidim "siru sliku", na zalost MARS i SPIM ne podrzavaju "hi" i "lo" registre pa ga ne mogu pokrenuti u emulatoru i izvrsiti lorak po korak, mozda mi neko moze pomoci i oko toga. Evo ga kod i u komentarima sam naveo onoliko koliko znam
Code:
.file 1 "arry.c"
.section .mdebug.abi32
.previous
.gnu_attribute 4, 3
.abicalls
.option pic0
.comm niz,48,4
.globl broj
.section .bss,"aw",@nobits
.align 2
.type broj, @object
.size broj, 4
broj:
.space 4
.text
.align 2
.globl main
.set nomips16
.ent main
.type main, @function
main:
.frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
.mask 0x40000000,-4
.fmask 0x00000000,0
.set noreorder
.set nomacro
addiu $sp,$sp,-8 ;add 8 byts (2words) to current sp and store it in to sp
sw $fp,4($sp) ;save old fp
move $fp,$sp ;move sp to fp
lui $2,%hi(niz) ;Load upper immediate first "num" of A byts
addiu $2,$2,%lo(niz) ;Add immediate unsigned lower half of A
lw $3,32($2) ;loadword lw $3, offset($s)
lui $2,%hi(broj) ;Load upper immediate to register hi to upper 32 bits stored in special register hi
lw $2,%lo(broj)($2) ;Load word register hi to Lower 32 bits stored in special register lo
nop
addu $3,$3,$2 ;add $2+$3 and store it in to $3
lui $2,%hi(niz) ;Load upper immediate first "num" of A byts
addiu $2,$2,%lo(niz) ;Add immediate unsigned lower half of A
sw $3,48($2) ;store word
move $2,$0 ;set $2 to be 0
move $sp,$fp ;move frame ppinter to stack pointer, "exit rutine resore stack"
lw $fp,4($sp) ;loart word stack pointer + 4 to fp "exit rutine resore stack"
addiu $sp,$sp,8 ;add imidiate unisign stack pointer + 8 "exit rutine resore stack"
j $31 ;return
nop
.set macro
.set reorder
.end main
.size main, .-main
.ident "GCC: (Realtek RSDK-4.6.4 Build 424) 4.6.4"
.file 1 "arry.c"
.section .mdebug.abi32
.previous
.gnu_attribute 4, 3
.abicalls
.option pic0
.comm niz,48,4
.globl broj
.section .bss,"aw",@nobits
.align 2
.type broj, @object
.size broj, 4
broj:
.space 4
.text
.align 2
.globl main
.set nomips16
.ent main
.type main, @function
main:
.frame $fp,8,$31 # vars= 0, regs= 1/0, args= 0, gp= 0
.mask 0x40000000,-4
.fmask 0x00000000,0
.set noreorder
.set nomacro
addiu $sp,$sp,-8 ;add 8 byts (2words) to current sp and store it in to sp
sw $fp,4($sp) ;save old fp
move $fp,$sp ;move sp to fp
lui $2,%hi(niz) ;Load upper immediate first "num" of A byts
addiu $2,$2,%lo(niz) ;Add immediate unsigned lower half of A
lw $3,32($2) ;loadword lw $3, offset($s)
lui $2,%hi(broj) ;Load upper immediate to register hi to upper 32 bits stored in special register hi
lw $2,%lo(broj)($2) ;Load word register hi to Lower 32 bits stored in special register lo
nop
addu $3,$3,$2 ;add $2+$3 and store it in to $3
lui $2,%hi(niz) ;Load upper immediate first "num" of A byts
addiu $2,$2,%lo(niz) ;Add immediate unsigned lower half of A
sw $3,48($2) ;store word
move $2,$0 ;set $2 to be 0
move $sp,$fp ;move frame ppinter to stack pointer, "exit rutine resore stack"
lw $fp,4($sp) ;loart word stack pointer + 4 to fp "exit rutine resore stack"
addiu $sp,$sp,8 ;add imidiate unisign stack pointer + 8 "exit rutine resore stack"
j $31 ;return
nop
.set macro
.set reorder
.end main
.size main, .-main
.ident "GCC: (Realtek RSDK-4.6.4 Build 424) 4.6.4"
na pr: nije mi jasno zasto se na pocetku programa "zauzima" 8 bajta ?
[Ovu poruku je menjao vidonk dana 20.03.2020. u 22:50 GMT+1]
vidovic-slobodan.blogspot.com