- 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
move $a0, $t2 # move integer to be printed into $a0: $a0 = $t2li $v0, 1 # load appropriate system call code into register $v0;
# code for printing integer is 1
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.
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.
No comments:
Post a Comment