Thursday, 20 December 2012

MIPS SIMULATOR: FUNDAMENTALS OF EMULATION & QTSPIM

FUNDAMENTALS OF EMULATION

  • untuk mempelajari seni bina MIPS, kita menggunakan emulator untuk memahami processor.
  • emulator sering digunakan untuk debugging.
  • untuk program pemasangan, kita boleh debug dan melihat bagaimana processor melaksanakan operasi pada cip melalui emulator.


QtSPIM

  • menjalankan program MIP32 dengan mengemulasi MIPS processor.
  • MIPS processor mumpunyai 32 registers, masing-masing memegang 32 bits.
  • freeware dan boleh didapatkan dengan senang melalui WWW
  • website: http://spimsimulator.sourceforge.net/


  1. Register display: memaparkan kesemua 32 registers dan kandungannya, sama ada dalan hex, binary atau decimal mengikut tetapan pengguna. Semua kandungan dalam registers adalah 0 pada mula-mulanya.
  2. Data display: mengandungi User Data Segment, User Stack dan Kernel Data Segment.
  3. Text display: lajur pertama merupakan alamat memori. Lokasi arahan mesin ditunjukkan pada lajur kedua dalam hexadecimal. lajur ketiga pula menunjukkan kod assembly.
  4. SPIM Messages: menunjukkan mesej simulator sama ada terdapat kesilapan kod atau tidak.

Wednesday, 19 December 2012

MEMORY: RAM

RAM (Random-Access Memory)

  • ingatan meruap, memerlukan bekalan elektrik untuk mengekalkan maklumat
  • dibahagikan kepada 2 jenis RAM utama, SRAM & DRAM

SRAM (Static RAM)

  • RAM statik
  • transistor digunakan dalam sel memori
  • tidak mempunyai kapasitor dalam sel
  • lebih mahal, tetapi lebih cepat dan memerlukan kuasa yang kurang daripada DRAM
  • sering digunakan sebagai cache memory untuk CPU

DRAM (Dynamic RAM)

  • RAM dinamik
  • menyimpan setiap bit data dalam kapasitor berasingan dalam litar bersepadu
  • kapasitor berkeadaan sama ada caj atau dicaj yang mewakili 1 atau 0 masing-masing
  • disebabkan keadaan kebocoran caj kapasitor, maklumat akan mengalami kepudaran, dan mesti dibarui dari semasa ke semasa

FPM DRAM (Fast Page Mode DRAM)

  • bentuk asal DRAM
  • menunggu proses mencari data mengikut lajur dan baris, kemudian membaca sebelum bermulanya bit seterusnya

EDO DRAM (Extended Data Out DRAM)

  • tidak menunggu proses mencari data
  • ini membolehkan pertindihan dalam operasi (pipelining)

SDRAM (Synchronous DRAM)

  • menggunakan kelebihan konsep burst mode untuk meningkatkan prestasi, dengan konsep pipelining
  • bermakna bahawa cip boleh menerima arahan baru sebelum proses sebelumnya diselasaikan
  • arahan menulis boleh diikuti dengan arahan lain, tanpa perlu menunggu data dituliskan

DDR SDRAM (Double Data Rate SDRAM)

  • generasi lanjutan SDRAM
  • dua kali ganda jalur lebar SDRAM yang mempunyai kekerapan jam yang sama, dengan menggunakan konsep double pumping

RDRAM (Rambus DRAM)

  • menggunakan bas data kelajuan tinggi khas yang dipanggil Rambus channel
  • menjana haba yang lebih

PCMCIA Card

  • PCMCIA - Personal Computer Memory Card International Association
  • juga dekenali sebagai PC Card
  • direka untuk komputer riba, digantikan oleh CardBus pada tahun 1995 dan seterusnya ExpressCard pada tahun 2003

CMOS RAM

  • juga dikenali sebagai Nonvolatile BIOS memory
  • digunakan untuk mengingati perkara-perkara seperti tetapan cakera keras
  • menggunakan bateri kecil untuk menyediakan ia kuasa yang diperlukan untuk mengekalkan memori

VRAM (Video RAM)

  • digunakan khas untuk 3-D accelerators
  • faktor penentu dalam resolusi dan warna paparan
  • digunakan untuk memegang maklumat grafik

MEMORY MODULE

SIMM (Single In-line Memory Module)

  • menggunakan penyambung 30, 64, atau 72-pin
  • bersaiz kira-kira 3.5 x 0,75 inci (kira-kira 9 x 2 cm)
30-pin (atas) and 72-pin (bawah) SIMMs


DIMM (Dual In-line Memory Module)

  • menggunakan penyambung 72, 100, 144, 168, 172, 184, 200, 204, 214, 240, atau 244-pin
  • bersaiz kira-kira 5.4 x 1 inci (kira-kira 14 x 2.5 cm)
  • pelbagai kapasiti dari 8 MB ​​hingga 1 GB setiap modul
168-pin SDRAM module (atas) and a 184-pin DDR SDRAM module (bawah)

SDRAM DIMM slots

SO-DIMM (Small Outline DIMM)

  • bersaiz kira-kira 2 x 1 inci (kira-kira 5 x 2.5 cm)
  • mempunyai 100, 144, 200, atau 204 pin
  • pelbagai kapasiti dari 512 MB hingga 1 GB setiap modul
DDR2 SO-DIMM (200-pin)

DDR3 SO-DIMM (204-pin)

SO-DIMM slot

LANGUAGE OF THE COMPUTER: R & I FORMAT

R-FORMAT


op
rs
rt
rd
shamt
funct
6 bits
5 bits
5 bits
5 bits
5 bits
6 bits

  • op: kod operasi
  • rs: sumber register pertama
  • rt: sumber register kedua
  • rd: destinasi register
  • shamt: digunakan dengan arahan peralihan dan putaran
  • funct: mengandungi kod kawalan yang diperlukan untuk membezakan arahan yang berbeza bagi arahan yang megunnakan kod operasi yang sama
  • R-format digunakan apabila semua data nilai-nilai yang digunakan terletak di register

Jadual MIPS register

Contoh:
add $t0, $s0, $s1
Special
$s0
$s1
$t0
0
Add
0
16
17
8
0
32
000000
10000
10001
01000
00000
100000

  • boleh dituliskan dalam bentuk hexadecimal
  • contoh: 1111 1100 1010 1000 0110 0100 0010 0000 = FCA8 6420

Pertukaran antara nombor hexadecimal & binary

I-FORMAT

op
rs
rt
Constant or address
6 bits
5 bits
5 bits
16 bits

  • op: kod operasi
  • rs, rt: sumber & destinasi register
  • constant: nilai 16 bit (–2^15 to +2^15 – 1)

Contoh kod operasi:

Mnemonic
Type
Opcode
Funct
add
R
0x00
0x20
addi
I
0x08
NA
addiu
I
0x09
NA
addu
R
0x00
0x21
and
R
0x00
0x24
andi
I
0x0C
NA
beq
I
0x04
NA
bne
I
0x05
NA
div
R
0x00
0x1A
divu
R
0x00
0x1B
j
J
0x02
NA
jal
J
0x03
NA
jr
R
0x00
0x08
lbu
I
0x24
NA
lhu
I
0x25
NA
lui
I
0x0F
NA
lw
I
0x23
NA
mfhi
R
0x00
0x10
mflo
R
0x00
0x12
mfc0
R
0x10
NA
mult
R
0x00
0x18
multu
R
0x00
0x19
nor
R
0x00
0x27
xor
R
0x00
0x26
or
R
0x00
0x25
ori
I
0x0D
NA
sb
I
0x28
NA
sh
I
0x29
NA
slt
R
0x00
0x2A
slti
I
0x0A
NA
sltiu
I
0x0B
NA
sltu
R
0x00
0x2B
sll
R
0x00
0x00
srl
R
0x00
0x02
sub
R
0x00
0x22
subu
R
0x00
0x23
sw
I
0x2B
NA

Tuesday, 18 December 2012

LANGUAGE OF THE COMPUTERS : TRANSLATION AND STARTUP



Dalam pengkomputeran, kompilasi just-in-time (JIT), juga dikenali sebagai terjemahan dinamik, adalah satu kaedah untuk meningkatkan prestasi runtime program komputer berdasarkan kod bait (kod mesin maya). Sejak kod bait ditafsirkan ia melaksanakan lebih perlahan daripada kod mesin disusun, melainkan jika ia sebenarnya disusun kepada kod mesin, yang boleh dilakukan sebelum pelaksanaan - membuat program memuatkan perlahan atau semasa pelaksanaan. Dalam kes ini kedua - yang merupakan asas untuk penyusunan JIT - program disimpan dalam ingatan sebagai kod bait, tetapi segmen kod sedang berjalan preparatively dikumpulkan untuk kod mesin fizikal untuk berjalan lebih cepat.
JIT penyusun mewakili pendekatan hibrid, dengan terjemahan yang berlaku secara berterusan, dengan jurubahasa, tetapi dengan caching kod diterjemahkan untuk mengurangkan kemerosotan prestasi. Ia juga menawarkan kelebihan lain lebih kod disusun statik pada masa pembangunan, seperti pengendalian jenis data lewat terikat dan keupayaan untuk menguatkuasakan jaminan keselamatan.
JIT membina atas dua idea awal dalam persekitaran masa jalanan: bytecode pengumpulan dan penyusunan dinamik. Ia menukarkan kod di runtime sebelum melaksanakan ia natively, contohnya bytecode ke dalam kod mesin asli.
Beberapa persekitaran runtime moden, seperti Rangka Kerja Microsoft. BERSIH dan kebanyakan pelaksanaan Jawa, bergantung pada kompilasi JIT untuk kelajuan tinggi pelaksanaan kod.
JIT adalah serasi dengan mprotect ciri Pax dimasukkan dengan Linux kernel patch Grsecurity serta mencegah permohonan memori benar randomisation pada OpenBSD.

Dalam sistem bytecode-disusun, kod sumber diterjemahkan kepada perwakilan perantaraan yang dikenali sebagai bytecode. Bytecode bukan adalah kod mesin bagi mana-mana komputer tertentu, dan mungkin mudah alih di kalangan seni bina komputer. Bytecode kemudian boleh ditafsirkan oleh, atau menjalankan di, mesin maya. Orang yang mengkompilasi JIT membaca bytecodes dalam seksyen banyak (atau sepenuhnya, jarang) dan mengumpulkan mereka dinamik ke dalam bahasa mesin supaya program ini boleh berjalan lebih cepat. Jawa melakukan cek runtime pada pelbagai bahagian kod dan ini adalah sebab keseluruhan kod tidak disusun di sekali.Ini boleh dilakukan per-fail, setiap fungsi atau walaupun pada serpihan mana-mana kod sewenang-wenangnya;. Kod boleh disusun apabila ia adalah kira-kira untuk dilaksanakan (maka nama "just-in-time"), dan kemudian cache dan diguna semula kemudian tanpa perlu recompiled.

Sebaliknya, tradisional ditafsirkan mesin maya hanya akan mentafsir bytecode, secara amnya dengan prestasi yang lebih rendah. Beberapa penterjemah mentafsirkan kod sumber, tanpa langkah pertama menyusun bytecode, dengan prestasi yang lebih buruk lagi. Kod statik disusun atau kod asli disusun sebelum penempatan. Persekitaran kompilasi dinamik adalah salah satu di mana pengkompil boleh digunakan semasa pelaksanaan. Sebagai contoh, yang paling biasa Lisp sistem mempunyai fungsi menyusun yang boleh menyusun fungsi-fungsi baru yang diwujudkan semasa menjalankan. Ini menyediakan banyak kelebihan JIT, tetapi pengaturcara, bukannya runtime, adalah dalam kawalan apa bahagian kod disusun. Ini juga boleh menyusun kod yang dijana secara dinamik, yang boleh, dalam senario banyak, memberikan kelebihan besar prestasi lebih kod disusun statik [petikan diperlukan], serta lebih kebanyakan JIT sistem.
Satu matlamat yang sama menggunakan teknik JIT adalah untuk mencapai atau mengatasi prestasi kompilasi statik, manakala mengekalkan kelebihan tafsiran bytecode: Banyak "mengangkat berat" menghuraikan kod sumber asal dan melaksanakan pengoptimuman asas sering dikendalikan pada masa kompil, sebelum untuk penempatan: kompilasi dari bytecode kepada kod mesin adalah lebih cepat daripada menyusun dari sumber. Bytecode dikerahkan adalah mudah alih, tidak seperti kod asli. Sejak runtime mempunyai kawalan ke atas penyusunan, seperti bytecode ditafsirkan, ia boleh menjalankan dalam kotak pasir yang selamat. Penyusun dari bytecode kepada kod mesin adalah lebih mudah untuk menulis, kerana pengumpul bytecode mudah alih telah melakukan banyak kerja.
JIT kod umumnya menawarkan prestasi yang jauh lebih baik daripada jurubahasa. Di samping itu, ia boleh dalam beberapa kes menawarkan prestasi yang lebih baik daripada himpunan statik, sebagai pengoptimuman banyak hanya boleh dilaksanakan pada jangka masa:
1).Kompilasi boleh dioptimumkan kepada CPU disasarkan dan model sistem operasi di mana permohonan itu berjalan. Sebagai contoh JIT boleh memilih arahan CPU SSE2 apabila ia mengesan bahawa CPU menyokong mereka. Untuk mendapatkan tahap ini spesifisiti pengoptimuman dengan pengkompil statik, satu sama ada perlu menyusun binari untuk setiap platform dicadangkan / seni bina, atau lain termasuk versi pelbagai bahagian kod dalam binari tunggal.
2).Sistem ini adalah dapat mengumpul statistik tentang bagaimana program ini sebenarnya berjalan dalam persekitaran ia adalah dalam, dan ia boleh menyusun semula dan susun semula untuk prestasi yang optimum. Walau bagaimanapun, sesetengah penyusun statik juga boleh mengambil maklumat profil sebagai input.
Sistem boleh melakukan pengoptimuman kod global (misalnya 'inlining' fungsi perpustakaan) tanpa kehilangan kelebihan menghubungkan dinamik dan tanpa overhed wujud kepada penyusun linkers dan statik. 3).Khususnya, apabila melakukan penggantian sebaris global, proses penyusunan statik mungkin perlu cek masa jalanan dan memastikan bahawa panggilan maya akan berlaku jika kelas sebenar objek mengatasi kaedah inlined, dan cek keadaan sempadan pada capaian pelbagai mungkin perlu untuk diproses dalam gelung. Dengan penyusunan just-in-time dalam banyak kes pemprosesan ini boleh berpindah keluar gelung, sering memberi kenaikan besar kelajuan.
4).Walaupun ini adalah mungkin dengan statik disusun bahasa sampah dikutip, sistem bytecode lebih mudah boleh menyusun semula kod yang dilaksanakan bagi penggunaan cache yang lebih baik.

Kelewatan Permulaan dan Pengoptimalan
JIT biasanya menyebabkan sedikit kelewatan dalam pelaksanaan awal permohonan, kerana masa yang diambil untuk memuatkan dan menyusun bytecode. Kadang-kadang kelewatan ini dipanggil "masa kelewatan permulaan". Secara umum, lebih pengoptimuman JIT melaksanakan, lebih baik kod ia akan menjana, tetapi kelewatan awal juga akan meningkatkan. A pengkompil JIT itu mempunyai untuk membuat trade-off antara masa penyusunan dan kualiti kod ia berharap untuk menjana. Walau bagaimanapun, ia kelihatan bahawa banyak masa permulaan adalah kadang-kadang disebabkan oleh IO terikat operasi bukannya kompilasi JIT (sebagai contoh, kelas rt.jar data fail untuk Mesin Maya Java adalah 40 MB dan JVM mesti mendapatkan banyak data dalam fail ini Kontekstual besar).
Salah satu mungkin pengoptimuman, yang digunakan oleh Mesin Maya Java HotSpot Matahari, adalah untuk menggabungkan tafsiran dan kompilasi JIT. Kod permohonan mulanya ditafsirkan, tetapi monitor JVM yang urutan bytecode kerap dilaksanakan dan menterjemahkan mereka kepada kod mesin untuk pelaksanaan langsung kepada perkakasan. Untuk bytecode yang dilaksanakan hanya beberapa kali, ini menjimatkan masa kompilasi dan mengurangkan kependaman awal; untuk bytecode kerap dilaksanakan, kompilasi JIT digunakan untuk berjalan pada kelajuan tinggi, selepas fasa awal tafsiran perlahan. Selain itu, sejak program menghabiskan kebanyakan masa melaksanakan minoriti kod, masa kompilasi dikurangkan adalah penting. Akhirnya, semasa tafsiran kod awal, statistik pelaksanaan boleh dikumpul sebelum kompilasi, yang membantu untuk melaksanakan pengoptimuman yang lebih baik.
Tradeoff betul boleh berbeza disebabkan oleh keadaan. Sebagai contoh, Mesin Jawa Matahari Maya mempunyai dua mod utama-pelanggan dan pelayan. Dalam mod pelanggan, penyusunan minimum dan pengoptimuman dilakukan, untuk mengurangkan masa permulaan. Dalam mod pelayan, penyusunan yang luas dan pengoptimuman dilakukan, untuk memaksimumkan prestasi sekali permohonan itu berjalan dengan mengorbankan masa permulaan. Java lain just-in-time penyusun telah digunakan ukuran runtime beberapa kali kaedah telah dilaksanakan digabungkan dengan saiz bytecode kaedah sebagai satu heuristik untuk memutuskan bila untuk menyusun. Masih lagi menggunakan bilangan kali yang dilaksanakan digabungkan dengan pengesanan gelung. Secara umum, ia adalah lebih sukar meramalkan dengan tepat yang kaedah untuk mengoptimumkan dalam aplikasi berjalan pendek berbanding dengan orang-orang lama berjalan.
Imej Generator asli (Ngen) oleh Microsoft merupakan satu lagi pendekatan untuk mengurangkan kelewatan awal. Ngen pra-menyusun (atau "pra-jits") bytecode dalam imej Bahasa Common Intermediate ke dalam kod mesin asli. Hasilnya, tiada kompilasi runtime diperlukan. . BERSIH rangka kerja 2.0 dihantar dengan Visual Studio 2005 berjalan Ngen pada semua Microsoft perpustakaan DLL tepat selepas pemasangan. Pra-jitting menyediakan satu cara untuk meningkatkan masa permulaan. Walau bagaimanapun, yang berkualiti kod ia menjana tidak mungkin menjadi sebagai baik sebagai yang sedang jitted, untuk itu sebab yang sama mengapa kod disusun statik, tanpa profil-berpandu pengoptimuman, tidak boleh sebagai baik sebagai JIT disusun kod dalam kes yang melampau: kekurangan profil data untuk memandu, misalnya, selari caching.
Terdapat juga wujud Jawa pelaksanaan yang menggabungkan AOT (hadapan-of-masa) pengkompil dengan sama ada JIT pengkompil (Excelsior JET) atau jurubahasa (Pengkompil GNU untuk Java.)


MIPS SIMULATOR : SYSTEM CALLS AND MIPS ASSEMBLY LANGUAGE FORMAT

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.