Sistem Calls
- digunakan untuk membaca atau mencetak nilai atau rentetan dari tetingkap input / output, dan menunjukkan program akhir
- menggunakan syscall rutin sistem operasi panggilan
- pertama membekalkan nilai-nilai yang sesuai dalam daftar $ v0 dan $ a0-$ a1
- nilai hasil (jika ada) dikembalikan dalam mendaftarkan $ v0
Jadual berikut menyenaraikan perkhidmatan syscall mungkin.
Service
|
Code
in $v0
|
Arguments
|
Results
|
print_int
|
1
|
$a0 = integer to be printed
|
|
print_float
|
2
|
$f12 = float to be printed
|
|
print_double
|
3
|
$f12 = double to be printed
|
|
print_string
|
4
|
$a0 = address of string in memory
|
|
read_int
|
5
|
|
integer returned in $v0
|
read_float
|
6
|
|
float returned in $v0
|
read_double
|
7
|
|
double returned in $v0
|
read_string
|
8
|
$a0 = memory address of string
input buffer
$a1 = length of string buffer (n)
|
|
sbrk
|
9
|
$a0 = amount
|
address in $v0
|
exit
|
10
|
|
|
*Perkhidmatan print_string menjangka alamat untuk memulakan rentetan aksara dengan penamat null.Arahan. Asciiz mewujudkan rentetan aksara dengan penamat null.
*Perkhidmatan read_int, read_float dan read_double membaca seluruh barisan input sehingga dan termasuk watak newline.
*Perkhidmatan read_string mempunyai semantices sama seperti UNIX rutin fgets perpustakaan.
-Ia berbunyi sehingga n-1 aksara ke dalam buffer dan menamatkan rentetan dengan watak nol.
-Jika kurang daripada n-1 aksara berada dalam baris semasa, ia membaca sehingga dan termasuk newline dan menamatkan rentetan dengan watak batal.
*Perkhidmatan sbrk mengembalikan alamat blok memori bait mengandungi n tambahan. Ini akan digunakan untuk peruntukan memori dinamik.
*Perkhidmatan keluar berhenti program daripada berjalan.
e.g. Print out integer value contained in register $t2
li $v0, 1 # load appropriate system call code into register $v0;
# code for printing integer is 1
move $a0, $t2 # move integer to be printed into $a0: $a0 = $t2
syscall # call operating system to perform operation
e.g. Read integer value, store in RAM location with label int_value (presumably declared in data section)
li $v0, 5 # load appropriate system call code into register $v0;
# code for reading integer is 5
syscall # call operating system to perform operation
sw $v0, int_value # value read from keyboard returned in register $v0;
# store this in desired location
e.g. Print out string (useful for prompts)
.data
string1 .asciiz "Print this.\n" # declaration for string variable,
# .asciiz directive makes string null terminated
.text
main: li $v0, 4 # load appropriate system call code into register $v0;
# code for printing string is 4
la $a0, string1 # load address of string to be printed into $a0
syscall # call operating system to perform print operation
e.g. To indicate end of program, use exit system call; thus last lines of program should be:
li $v0, 10 # system call code for exit = 10
syscall # call operating sys
MIPS Bahasa Himpunan Format
MIPS Daftar
- MIPS bahasa himpunan adalah bahasa perhimpunan 3-alamat. Operan adalah sama ada immediates atau dalam daftar.
- Terdapat 32 daftar yang kita biasanya menggunakan. Setiap 32 bit lebar. Daftar dikenal pasti dengan integer, bernombor 0-31.
- Untuk rujukan daftar sebagai satu operan, gunakan sintaks $ x, di mana x ialah nombor daftar yang anda mahu.contoh: $ 12, $ 15
- Beberapa batasan pada penggunaan daripada 32 daftar 32-bit. Disebabkan konvensyen yang ditetapkan oleh penyelaku, dan oleh seni bina, daftar tertentu digunakan untuk tujuan khas. Ia adalah bijak untuk mengelakkan penggunaan daftar mereka, sehingga anda memahami bagaimana untuk menggunakannya dengan betul.
1).$ 0
0 (gunakan seperti yang diperlukan)
2).$ 1
digunakan oleh penghimpun (simulator dalam kes kami) - tidak menggunakannya dalam program anda.
3).$ 2-7
digunakan oleh penyelaku - jangan gunakan mereka melainkan anda tahu apa yang mereka dan bagaimana ia digunakan. (Mereka boleh digunakan sebagai tempat untuk lulus parameter, mengembalikan hasil daripada fungsi, dan tersirat yang akan digunakan untuk lulus nilai-nilai dalam pelaksanaan MAL I / O arahan.)
4).$ 26-27
digunakan untuk melaksanakan mekanisme untuk memanggil prosedur khas yang melakukan I / O dan menjaga keadaan ralat yang lain (seperti limpahan)
5).$ 29
adalah penunjuk timbunan - anda secara automatik diperuntukkan timbunan (perkataan), dan $ 29 dimulakan mengandungi alamat perkataan kosong di bahagian atas timbunan pada permulaan mana-mana program.
Format arahan dan Sintaksis
Operasi Aritmetik dan Logik
Ini bukanlah satu senarai lengkap arahan; ini adalah arahan anda perlu tahu mengenai, dan boleh digunakan apabila perlu.
mnemonic number operands C or C++ or Java
of operands
move 2 d, s1 d = s1;
add 3 d, s1, s2 d = s1 + s2; two's complement
addu 3 d, s1, s2 d = s1 + s2; unsigned
sub 3 d, s1, s2 d = s1 - s2; two's complement
subu 3 d, s1, s2 d = s1 - s2; unsigned
mul 3 d, s1, s2 d = s1 * s2; two's complement
div 3 d, s1, s2 d = s1 / s2; gives quotient
divu 3 d, s1, s2 d = s1 / s2; gives quotient
rem 3 d, s1, s2 d = s1 % s2; gives remainder
remu 3 d, s1, s2 d = s1 % s2; gives remainder
and 3 d, s1, s2 d = s1 & s2; bitwise AND
or 3 d, s1, s2 d = s1 | s2; bitwise OR
not 2 d, s1 d = ~s1; bitwise complement
nand 3 d, s1, s2 d = s1 NAND s2; no C equivalent
nor 3 d, s1, s2 d = s1 NOR s2; no C equivalent
xor 3 d, s1, s2 d = s1 ^ s2; bitwise XOR
rol 3 d, s1, s2 d = rotate left of s1 by s2 places
ror 3 d, s1, s2 d = rotate right of s1 by s2 places
sll 3 d, s1, s2 d = logical left shift of s1 by s2 places
sra 3 d, s1, s2 d = arithmetic right shift of s1 by s2 places
srl 3 d, s1, s2 d = logical right shift of s1 by s2 places
NOTA:
1).Untuk semua 3 operan arahan, di mana hanya 2 muncul dalam kod sumber, operan pertama adalah kedua-dua sumber dan destinasi keputusan.
2).tidak boleh meningkatkan bilangan operan.
3).d sentiasa daftar.
4).s2 boleh menjadi suatu daftar atau terdekat (berterusan dalam kod mesin)
Examples:
move $4, $9 # copy contents of $9 into $4
mul $12, $13, $14 # place 32-bit product of $13 and $14 into $12
# does not work correctly if result requires
# more than 32 bits
add $8, $9, $10 # two's complement sum of $9 and $10 placed in $8
add $20, $20, 1 # add (immediate value) 1 to the value in $20,
# result goes to $20
Perhatikan bahawa terdapat lain MAL aritmetik dan arahan logik, tetapi senarai ini adalah mencukupi buat masa sekarang.
Pada pemproses sebenar, operasi pembahagian integer memberikan dua keputusan: darjah dan bakinya. Apa yang berlaku dengan kedua-dua keputusan berbeza di kalangan seni bina.
Arahan beban dan Kedai
Pada senibina beban / stor, arahan sahaja yang menentukan operan yang datang dari atau pergi ke memori adalah beban dan kedai-kedai.
mnemonic number operands operation
of operands
lw 2 d, addr a word is loaded from addr and placed into d;
the addr must be word aligned
lb 2 d, addr a byte is loaded from addr and placed into
the rightmost byte of d;
sign extension defines the other bits of d
lbu 2 d, addr a byte is loaded from addr and placed into
the rightmost byte of d;
zero extension defines the other bits of d
li 2 d, immed the immediate value is placed into d
sw 2 d, addr a word in d is stored to addr;
the addr must be word aligned
sb 2 d, addr a byte in the rightmost byte of d is stored to addr
la 2 d, label the address assigned to label is placed into d
nota:
1).terakhir dinyatakan dalam kod sumber di salah satu daripada 3 cara:
-anjakan (reg)
Nilai segera (anjakan) ditambah kepada kandungan daripada reg untuk membentuk alamat yang berkesan.
-(reg)
Kandungan reg itu adalah alamat.
-label
Alamat adalah seperti yang diberikan kepada label.
2).d mesti spesifikasi daftar
Examples:
la $10, x # place the address assigned for label x into register $10
lw $8, x # load the word from memory at address x into register $8
sb $9, y # store the contents of register $9 to memory at address y
lb $8, ($12) # load the byte from the address given by the contents
# of register $12 into the least significant byte of
# register $8, sign extending to define the other bits
sw $10, 8($9) # store the contents of register $10 to the address
# obtained by adding the value 8 to the contents of
# register $9
Kawalan Arahan
Arahan kawalan cawangan dan / atau melompat.
Seni bina PowerPC melaksanakan hanya satu subset ini, dan tugas penghimpun untuk mensintesis mereka yang tidak termasuk dalam arahan yang ditetapkan dari orang-orang yang dimasukkan. Dari senarai ini, anda tidak boleh membezakan yang disintesis daripada orang-orang yang dimasukkan.
mnemonic number operands operation
of operands
b 1 label unconditional branch to label
beq 3 r1, r2, label branch to label if (r1) == (r2)
bne 3 r1, r2, label branch to label if (r1) != (r2)
bgt 3 r1, r2, label branch to label if (r1) > (r2)
bge 3 r1, r2, label branch to label if (r1) >= (r2)
blt 3 r1, r2, label branch to label if (r1) < (r2)
ble 3 r1, r2, label branch to label if (r1) <= (r2)
beqz 2 r1, label branch to label if (r1) == 0
bnez 2 r1, label branch to label if (r1) != 0
bgtz 2 r1, label branch to label if (r1) > 0
bgez 2 r1, label branch to label if (r1) >= 0
bltz 2 r1, label branch to label if (r1) < 0
blez 2 r1, label branch to label if (r1) <= 0
j 1 label unconditional jump to label
jal 1 label unconditional jump to label, return address in $31
Examples:
beq $8, $14, do_else # branch to do_else if the contents of register $8
# is the same as the contents of register $14
Input dan Output Arahan
Input dan output dilaksanakan oleh penyelaku yang kita gunakan untuk kursus. Mereka tidak tunjuk sebenarnya, tetapi cara untuk kod sumber (arahan) menyebabkan simulator untuk melakukan fungsi I / O. Sejak simulator telah ditulis dalam C, yang paling mudah I / O fungsi untuk meniru adalah mudah, standard CI / O fungsi.
mnemonic number operands operation
of operands
putc 1 r1 print the ASCII character in the least
significant byte of r1
getc 1 r1 read a character, placing it in the least
significant byte of r1
puts 1 r1/label print the null-terminated string that begins
at the address within r1 or given by label
Examples:
.data
str1: .asciiz "hello."
.text
puts str1
-------------
|hello.
| ^
more output starts here, when more is printed
.data
str1: .asciiz "hello."
.text
la $12, str1 # address of first character in string
puts $12 # address of first character to print is in $12
-------------
|hello.
| ^
more output starts here, when more is printed
.data
str1: .asciiz "hello.\nMy name is George."
.text
puts str1
-------------
|hello.
|My name is George.
| ^
more output starts here, when more is printed
.data
str1: .ascii "Hi.\n"
str2: .asciiz "I am a badger."
.text
puts str1
-------------
|Hi.
|I am a badger.
| ^
more output starts here, when more is printed
Keterangan: pengisytiharan hanya meletakkan watak-watak dalam ingatan. Watak-watak yang berdampingan. Arahan ascii tidak menambah watak nol menamatkan rentetan. Meletakkan arahan tahu untuk menghentikan aksara percetakan apabila ia menghadapi watak NULL ('\ 0'). Ia tidak mencari watak nol pada akhir rentetan pertama, jadi ia hanya menyimpan akan (melalui rentetan kedua) sehingga ia bertemu watak nol pada akhir rentetan kedua.