instruction set Intel P4 . contoh program assembly, komentar fungsi perintah tiap baris

Set instruksi adalah kode-kode dari instruksi-instruksi (instruction mesin) yang dapat diterjemehkan dalam bahasa mesin (machine language). Set instruksi tersebut yang nantinya menjadi bahan dasar dari proses CPU. Setiap CPU memiliki berbeda-beda set insruksinya tergantung dari bagaimana arsitektur CPU dibuat, seorang programmer akan kesulitan memprogram jika programmer tersebut tidak dapat mengetahui arsitektur CPU, karena set instruksi yang menjadi acuan seorang programmer untuk memprogram mesin tersebut. Set instruksi terdiri dari kode operasi (opcode)
Arsitektur 64 bit perama kali dikenalkan oleh AMD yang dikenal dengan AMD64 instruction. Kemudian Intel mengeluarkan set instruksi EM64T yang mampu mengimbangi set instruksi AMD64 dan mampu menjalankan proses-proses yang dilakukan oleh AMD64. pada generasi 64-bit set instruksi antara AMD dan Intel seperti terlihat pada table 3.4

Untuk mendukung Intel P4 (EM64T) register harus mempunyai:
=> 8 new 64 bit GPRs (General Purpose Registers)
=> Extention of 8 original, 32 bit GPRs to 64 bit
=> 8 new 128 bit registers for SSE and SSE2
=> instruction (SSE3 for Intel Xeon)

Memory Controller
Saat ini operasi processor sangatlah cepat dibandingkan dengan memori pada subsistem. Keseluruhan mamfaat dari hasil performa tersebut tidak dapat dicapai dengan mudah hanya dengan meningkatkan kecepatan atau performa dari processor. Intel mengunakan standar memori DDR SDRAM. Tetapi bagaimanapun Intel masih menggunkan arsitektur dari front-side-bus untuk menghubungkan kotrol memori yang terpisah,Intel Front-side-bus (FSB) dan Bandwidth. Ada tiga hal penting dalam arsitektur memori: Bandwidth, Latency, dan Scalability. FSB yang dimiliki intel adalah pararel 64-bit, menggunakan teknologi multi-drop yang membagi bandwidth antara processor dengan memori controller. Memori controller adalah terpisah dari processor dan penggunaanya tergantung dari design teknologi chipsetnya, pada umumnya mendukung sampai 32GB dari dual-chanel DDR SDRAM. Sebagian besar EM64T menggunkan 800Mhz FSB untuk berhubungan dengan processor dengan memori dan alat I/O. ini meningkatkan bandwidth maksimum sebesar 6,4GB/s, sebelunya intel manggunkan FSB 400Mhz atau 533MHz yang menghasilkan total bandwidth 3,2GB/s atau 4,3GB/s.
Intel Latency
Processor intel di buat untuk digunakan pada simetric multi-processing (SMP), yang artinya setiap propocessor memiliki waktu yang sama untuk mengkases memori. Memori latency adalah waktu yang digunakan processor untuk meminta data dari memori (berlaku pada semua jenis processor). Test yang dilakukan oleh HP (Hewlett Packard) intel Xeon memiliki 120ns.

Intel Scalability
Pada sistem single-processor, FSB sangatlah penting dalam meningkatkan kecepatan karena sumber memori dapat dibuat tanpa memerlukan tambahan processor. Pembagian FSB mengahasilkan frekuensi arbitrasi dan meningkatkan latency dan meningkatkan perfeorma serta menjadikan memori terpakai dengan baik.
Hyper-threading
Hypertreading merupakan teknologi terbaru dari EM64T yang merupakan metode yang bermaksud untuk menjaga pipeline tetap penuh. Normalnya processor hanya mengeksekusi instruksi dari satu set instruksi saja. Karena processor saat ini adalah superscallar (mempunyai pararel eksekusi dan eksekusi out-of-order), processor mengubah instruksi dan mengeksekusinya dengan out-of-order untuk menghasilkan pararel instruksi, processor intelmenggunkan instruksi pararel unutk mengeksekusi 3 instruksi per clock. Intel menggunkan hypertreading untuk mengeksekusi urutan instruksi secara pararel (multitreading pararelism). Intel membuat replika dari komponen sebuah processor yang mejadikan sebagai pointer, alokasi tabel register, dan register arsitektur lainnya. Intel meyebut komponen itu sebagai “architecture state” atau logical processor. Semua instruksi dibagi oleh masing masing logical processor tersebut, sehingga processor akan selelu dalam keadaan penuh dan optimal, karena processor ini mengijinkan mengeksekusi instruksi yang masuk dalam “logical procesor” dan proses ini secara signifikan akan meningkatan speed.

Pipeline
Pipeline adalah jalur yang dilewati oleh istruksiset,. Analogi yang dapat diambil adalah misal kita melihat kebakaran dan kita mengambil air dengan ember, jika kita seorang maka akan lama memadamkannya, tetapi jika kita terdiri dari beberapa orang dan tiap orang membawa ember dan berusaha memadamkannya, akan lebih cepat padam apinya, pipeline disini dianalogikan sebagai ember, semakin ember banyak maka akan semakin cepat api padam.

Prosesor saat ini menggunkan pipeline yang panjang guna meningkatkan kecepatannya, tetapi semakin panjang akan semakin berat jika terjadi crash ditengah jalan sehingga pipelineakan dikosongkan dan diulang kembali. Intel mencapai rentang kecepatan 3000MHz.

CONTOH PROGRAM ASSEMBLY
.386 // meminta assembler menggunakan set instruksi 386
model flat, stdcall // menentukan model memori untuk program
option casemap :none // membuat program menjadi case sensitive
// File-file yang harus disertakan dalam compiler
include \masm32\include\windows.inc
include \masm32\include\kernel32.inc
include \masm32\include\masm32.inc
includelib \masm32\lib\kernel32.lib
includelib \masm32\lib\masm32.lib
.data
ProgramText db “Hello World!”, 0 //db berarti ‘define byte’, menentukan ProgramText agar berisi tulisan “Hello World!”
BadText db “Error: Sum is incorrect value”, 0 //menentukan isi BadText
GoodText db “Excellent! Sum is 6”, 0 // menentukan isi GoodText
Sum sdword 0 ; inisialisasi Sum
.code
start:
// eax
mov ecx, 6 //mengisi ecx dengan angka 6
xor eax, eax //mengisi eax dengan angka 0
_label: add eax, ecx
dec ecx // menjumlahkan angka dari 0 sampai 6
jnz _label // memindahkan hasilnya ke _label
mov edx, 7 // mengisi edx dengan nilai _label
mul edx // mengalikan edx dengan 7
push eax // mendorong eax ke dalam stack
pop Sum // mengambil nilai eax dari stack dan memasukkan ke dalam Sum
cmp Sum, 147 //membandingkan nilai Sum dengan angka 147
jz _good //jika sama, menuju ke _good
_bad: invoke StdOut, addr BadText // inisialisasi _bad
jmp _quit // meloncat ke _quit
_good: invoke StdOut, addr GoodText // inisialisasi _good
_quit: invoke ExitProcess, 0 // inisialisasi _quit
end start // akhir program