02 Dasar Assembly

download 02 Dasar Assembly

of 51

description

asemmbly memang asem

Transcript of 02 Dasar Assembly

Praktikum Organisasi Komputer (Instruksi DEBUG.COM)

Dasar-Dasar Bahasa Assembly2Tugas CPUTugas dasar dari CPU adalah :Menemukan dan mengambil instruksi berikutnya.Mengeksekusi instruksi tersebut :Mengambil data dari memori/registerMenyimpan data ke dalam memori/registerMelakukan perhitungan dan perbandinganMengubah nilai Instruction Pointer (mis. branching)3RegisterTempat penyimpanan berkecepatan tinggi pada CPU yang langsung terhubung ke CU dan ALU.Instruksi yang hanya melibatkan register akan berjalan lebih cepat dibandingkan dengan instruksi yang melibatkan memori ataupun tempat penyimpanan lain.Hampir semua instruksi pada prosesor Intel membutuhkan paling sedikit satu register.4Register (Intel 8086-80286)AHAL8 Bit8 BitAXBHBL8 Bit8 BitBXCHCL8 Bit8 BitCXDHDL8 Bit8 BitDXGeneral PurposeCSSSDSESSegment16 BitBPSPSIDIIndex16 BitFlagsIPStatus and Control16 Bit45Register (Intel 80386-Pentium 4)CSSSDSESFSGSSegmentESPEBPSPBPDISIEDIESI32 BitIndexIPEIPEFLAGSFLAGS32 BitStatus and ControlAHALAX (16 Bit)EAX (32 Bit)BHBLBX (16 Bit)EBX (32 Bit)CHCLCX (16 Bit)ECX (32 Bit)DHDLDX (16 Bit)EDX (32 Bit)General Purpose16 BitAda pada 8088-80286Ada pada 80386-Pentium 46RegisterData (General Purpose) Registers Terdiri atas 4 buah register : AX,BX,CX,DXBisa diakses baik 32 bit (pada prosessor 80386-Pentium 4), 16 bit (pada prosessor 8088-80286) ataupun 8 bitDigunakan untuk perhitungan aritmetika dan data movement

7Register (Lanj.)Data (General Purpose) Registers

Register(16 Bit)8 Bit Terendah8 Bit TeratasKeteranganAXALAH(Accumulator), sering digunakan untuk operasi aritmatika dan data movement. Operasi-operasi lain terkadang lebih efisien jika menggunakan register ini.BXBLBH(Base), digunakan juga dalam operasi aritmatika dan data movement. Mampu menyimpan alamat memori yang menunjuk ke suatu variabel (kemampuan pengalamatan). Register-register lain yang memiliki kemampuan pengalamatan adalah Index Registers (SI, DI dan BP).8Register (Lanj.)Data (General Purpose) Registers

Register(16 Bit)8 Bit Terendah8 Bit TeratasKeteranganCXCLCH(Counter), digunakan sebagai counter dalam instruksi perulangan (looping). Setiap terjadi perulangan secara otomatis register CX nilainya akan dikurangi satu dan perulangan akan berhenti ketika nilai register CX nol.DXDLDH(Data), digunakan untuk menyimpan alamat port I/O (8 bit atau 16 bit)Selain itu, memiliki peran khusus dalam operasi perkalian dan pembagian. Sebagai contoh, dalam perkalian DX akan menyimpan 16 bit nilai teratas dari hasil perkalian.9Register (Lanj.)Segment RegistersDigunakan untuk menyimpan base locations (lokasi awal) untuk instruksi-instruksi program, data, dan stack.Seluruh referensi ke memori pada IBM-PC melibatkan sebuah segment register sebagai base location.Mengenai segment dan offset akan dibahas pada bahasan pengalamatan memori.Terdapat 4 jenis Segment Registers pada IBM-PC dan kompatibelnya (keluarga Intel) : CS (Code Segment), DS (Data Segment), SS (Stack Segment), ES (Extra Segment)10Register (Lanj.)Segment RegistersRegister(16 Bit)KeteranganCS(Code Segment), menyimpan base location dari seluruh instruksi (kode) dari sebuah programMendefiniskan alamat awal (starting address) dari bagian memori yang menyimpan kode program (instruksi)DS(Data Segment), merupakan default base location untuk variabel-variabel. CPU menghitung lokasi memori menggunakan nilai dari register DSSS(Stack Segment), berisi base location untuk stack.Stack entry point ditentukan oleh register SS dan SP (Stack Pointer Special Registers). Register BP (Base Pointer Index Registers) juga dapat digunakan bersama register SS.ES(Extra Segment), base location tambahan untuk variabel-variabel memori.Digunakan oleh beberapa instruksi terkait dengan string untuk menyimpan data tujuan11Register (Lanj.)Index RegistersBerisi offset dari variabel-variabel.Offset adalah jarak suatu variabel atau instruksi dari base segmentnya.Register Index akan mempercepat pemrosesan string, array, dan struktur data lainnya yang terdiri atas banyak elemen.Terdapat 3 jenis Register Index, yaitu : SI (Source Index), DI (Data Index), dan BP (Base Pointer).12Register (Lanj.)Index RegistersRegister(16 Bit)KeteranganSI(Source Index), menyimpan alamat-alamat source dari data string dalam instruksi-instruksi string.Biasanya berisi offset dari register DS.DI(Destination Index), menyimpan alamat-alamat destination dari data string dalam instruksi-instruksi string.Biasanya berisi offset dari register ES, tetapi bisa juga digunakan untuk mengalamati variabel.BP(Base Pointer), Menunjuk ke sebuah lokasi memori (berlaku untuk seluruh jenis mikroprosesor) untuk melakukan proses transfer data pada memori.13Register (Lanj.)Special RegistersMerupakan register-register yang tidak masuk ke kelompok-kelompok register sebelumnya.Ada 2 Special Registers : IP (Instruction Register) dan SP(Stack Pointer).14Register (Lanj.)Special Registers

Register(16 Bit)KeteranganIP(Instruction Pointer), berisi offset dari instruksi berikutnya yang akan dieksekusi.Register CS dan IP akan membentuk alamat memori lengkap dari instruksi berikutnya yang akan dieksekusi.SP(Stack Pointer), berisi offset/jarak dari awal stack segment sampai ke puncak stack.Register SS dan SP akan membentuk alamat memori lengkap dari puncak stack.15Register (Lanj.)Flags RegisterDigunakan untuk menunjukkan status dari CPU dan mengendalikan operasi pada CPU.Panjang Rgister Flag adalah 16 bit pada prosesor 8088-80286 (FLAG) dan 32 bit pada prosesor 80386-Pentium 4 (EFLAG).

151413121110987 6543210xxxxODITSZxAxPxC16Register (Lanj.)Flags Register

BitArtiKeteranganOOverflowAkan diset ketika hasil operasi aritmatika bilangan bertanda terlalu besar sehingga tidak cukup untuk disimpan di area tujuan. Bernilai 1 jika terjadi overflow dan 0 jika tidak terjadi overflow.DDirectionUntuk memilih mode increment atau decrement untuk register DI dan/atau SI dalam instruksi string.Jika D=0 maka register Di dan SI akan secara otomatis dinaikkan (incremented).Flag D diset dengan perintah STD (set direction) dan direset dengan perintah CLD (clear direction). 17Register (Lanj.)Flags Register

BitArtiKeteranganIInterruptMengendalikan operasi dari pin input INTR (interrupt request).I=1 maka INTR dihidupkan. I=0 maka INTR dimatikan.Dikendalikan dengan peritah STI (set I flag) dan CLI (clear I flag).TTrapMemungkinkan trapping melalui fitur on-chip debugging.T=1 maka mikroprosesor akan menginterupsi alur program pada kondisi yang diindikasikan oleh debug registersdan control registers. T=0 fitur untuk trapping (debugging) dimatikan. 18Register (Lanj.)Flags Register

BitArtiKeteranganSSignMenyimpan tanda bilangan hasil instruksi aritmatika atau logika.S=1 maka bagian MSD dari bit diset menjadi 1 yang berarti negatif. S=0 MSD di-clear menjadi 0 yang berarti positif. ZZeroMenunjukkan bahwa hasil operasi aritmatika bernilai nol.Z=1 maka hasil operasi bernilai nol. Z=0 berarti hasil operasi tidak bernilai nol.AAuxiliary CarryMenyimpan nilai carry (half carry) pada penjumlahan atau nilai borrow pada pengurangan antara posisi bit ke-3 dan ke-4 dari hasil.19Register (Lanj.)Flags Register

BitArtiKeteranganPParityBernilai 0 untuk paritas ganjil (odd parity) dan bernilai 1 untuk paritas genap (even parity).Parity merupakan jumlah bit 1 di dalam sebuah bilangan yang dinyatakan genap atau ganjil.Digunakan untuk verifikasi inegritas memori dan software komunikasiCCarryMenyimpan nilai carry pada penjumlahan dan nilai borrow pada pengurangan.Biasanya juga digunakan untuk mengindikasikan error condition yang terjadi pada program atau prosedurxUndifinedUndifined-20Pengalamatan MemoriSatu alamat memori = ruang 8 bit (1 byte).Alamat memori dimulai dari 0 sampai ke lokasi memori tertinggi.Alamat memori:32-bit segment-offset address: kombinasi base location (segment) dengan offset. Contoh : 08F1h:0100h.20-bit absolute address: alamat memori sebenarnya. Contoh : 09010h.Segment * 10h + OffsetAlamat 20-bit dapat mengalamati ruang 1.047.576 byte, tetapi address register hanya memiliki panjang 16 bit solusi:kombinasi segment dan offset.Data Definition DirectivesDirectiveDeskripsiBytesAttributDBMendefinisikan Byte1ByteDWMendefinisikan Word2WordDDMendefinisikan DoubleWord4DoublewordDF,DPMendefinisikan Far Pointer6Far pointerDQMendefinisikan QuadWord8QuadwordDTMendefinisikan TenBytes10tenbye21Data Definition Directives (Lanj.)DB (Mendefinisikan 1 byte untuk satu nilai)Penggunaan : [name] DB nilai,[nilai]Contohlist db 10,20,30,40(multiple values)db 10,20,30,40AssignmentMOV Lvalue, RvalueLvalue = register atau alamat memoriRvalue = literal, register, atau akses memoriTidak semua register bisa digunakan sebagai Lvalue atau Rvalueemu8086org 100h

mov ah,12hmov [150h],ahadd [150h],10hmov al,[150h]int 20h

Gunakan Single Step dan aux > memory untuk mengamati perubahan pada offset 0150h 0151h.

Catat perubahan nilai pada lokasi berikut:AX[0150h][0151h]org 100h.data

x db 10hy db 20h

.codemov ax,1234hmov x,ahmov y,aladd y,10hmov ah,yint 20hendProgram untuk emu8086.Gunakan Single Step dan vars untuk mengamati perubahan pada variabel.

Perhatikan bahwa emu8086 menambahkan perintah JMP 0104h pada program agar baris yang berwarna merah tidak dianggap sebagai instruksi.

Hal ini tidak dilakukan di JWASM.

Catat perubahan nilai pada lokasi berikut: AX IP x y.model tiny.codeorg 100h

jmp startx db 10hy db 20h

start:mov ax,1234hmov x,ahmov y,aladd y,10hmov ah,yint 20hend startPerhatikan perintah jmp Start dan posisi org 100h.

Simpan sebagai 02.asm dan pada command prompt:

C:\jwasm bin Fo 02.com 02.asm

Lalu pada emu8086 buka file 02.com.LatihanBuat program sederhana untuk:menyimpan nilai 012h, 034h, dan 067h ke masing-masing offset 0150h, 0151h, dan 0152menjumlahkan ketiga nilai tersebutmenyimpan hasil penjumlahannya ke offset 0153h dan register AX.Data Definition Directives (Lanj.)DW (Mendefinisikan 2 byte untuk satu nilai)Penggunaan : [name] DW nilai,[nilai]Contohlist dw 1234,5678,9ABC,0DEFdw 1234,5678,9ABC,0DEFReversed storage format Byte terendah disimpan di lokasi memori terendah ciri khas pada prosesor Intel dan kompatibelnya.

org 100hmov ax,1234hmov bx,5678hmov [0150h],axmov [0152h],bxmov ax,[0150h]mov bx,[0151h]int 20hendCatat perubahan nilai pada lokasi berikut: AX BX IP [0150h] [0151h] [0152h] [0153h]org 100h.data

x dw 1234hy dw 5678h

.codemov ax,xmov bx,yadd ax,2mov y,axmov x,bxint 20hendCatat perubahan nilai pada lokasi berikut: AX BX x yData Definition Directives (Lanj.)DD (Mendefinisikan 4 byte untuk satu nilai)Penggunaan : [name] DD nilai,[nilai]Contohlist dw 12345678,9ABC0DEFReversed storage format little endianByte terendah disimpan di lokasi memori terendahCiri khas pada prosesor Intel dan kompatibelnya.

Data Definition Directives (Lanj.)Mengulangi satu atau lebih nilai ketika mengalokasikan memori berguna untuk alokasi ruang tabel atau arrayHanya bisa digunakan setelah Data Definition Drictives (DB,DW, dsb).Contoh :x db 20 dup(0) mengalokasikan 20 bytes, seluruhnya bernilai nol.Data Transfer InstructionsMOV Menyalin (copy) data dari satu operand ke operand yang lainPenggunaan : MOV tujuan,sumberYang bisa dijadikan operand :Register Seluruh register bisa digunakan, kecuali CS dan IP tidak bisa digunakan sebagai tujuanImmediate Nilai konstanta integer bisa dimasukkan ke semua register (kecuali register segmen atau IP) dan ke memori.Direct Alamat memori atau nama variabel, bisa digunakan sebagai salah satu operand.Indirect RegisterAlamat memori operand tersimpan di register.Data Transfer Instructions (Lanj.)Hal-hal yang tidak diperbolehkan dalam MOV :CS atau IP sebagai register tujuan.Memasukkan nilai immediate ke dalam register segment.Menyalin dari register segment ke register segment.Tujuan dan sumber memiliki ukuran yang berbeda.Penyalinan dari memori ke memori.Data Transfer Instructions (Lanj.)Contoh kesalahan:mov ip,axmov ds,1000hmov ds,esmov al,bxmov si,almov 1000h,axmov [0150],[0151]mov name, nameContoh program mov immediate values ke register dan mov antar-register

org 100hmov ax,2810hmov bx,axmov dl,ahmov cl,blint 20hend

Catat perubahan nilai pada lokasi berikut: AX BX CX DXData Transfer Instructions (Lanj.)XCHGMempertukarkan isi dari dua register atau sebuah register dengan memori/variabelPenggunaan : XCHG Op1, Op2Op1 dan Op2 bisa berupa memori atau register, tapi salah satunya harus register.Contohxchg ax,bxxchg ah,alxchg var1,bxorg 100hmov ax, 1122hmov [0150h], axmov ax,1234hmov bx,5678hxchg ax,bxxchg ax,[150]int 20hendCatat perubahan nilai pada lokasi berikut: AX BX [0150h] [0151h]Data Transfer Instructions (Lanj.)Stack Operations (PUSH,POP,PUSHF,POPF,PUSHA,PUSHAD)SS (Stack Segment) registers contains the base location of the stackSP (Stack Pointer) contains the top of the stack, where the last value were pushedPUSHMenyalin isi register 16-bit atau operand ke dalam stack kemudian menurunkan nilai SP yang berisi alamat puncak stack (alamat tampat nilai terakhir dimasukkan).Contohpush ax memasukkan nilai ax ke stackData Transfer Instructions (Lanj.)POPMenyalin isi dari stack yang ditunjuk oleh SP ke dalam register 16-bit atau memori (variabel) kemudian menaikkan nilai SP.Contohpop cx memasukkan nilai dari stack ke register cxorg 100hmov ax,10hpush axmov ax,20hpush axint 20hendProgram untuk emu8086.Gunakan Single Step dan stack untuk mengamati perubahan pada stack.

Catat perubahan nilai pada lokasi berikut: AX SPorg 100hmov ax,10hpush axmov ax,20hpush axpop [0150h]pop [0152h]int 20hendCatat perubahan nilai pada lokasi berikut: AX SP [0150h] [0151h] [0152h] [0153h]Data Transfer Instructions (Lanj.)PUSHF Memasukkan (PUSH) register Flag ke dalam stackPOPFMengambil (POP) nilai flag yang disimpan dalam memoriData Transfer Instructions (Lanj.)PUSHA(80186+) Memasukkan (push) isi dari register AX,CX,DX,BX, original SP,BP, dan DI ke dalam stack secara terurut. POPA (80186+)Melakukan pop dari stack dengan urutan terbalik.Arithmetic InstructionsINCMenambahkan 1 pada operandPenggunaan : INC destinationContoh inc alinc bxDECMengurangkan 1 dari operandPenggunaan : DEC destinationContoh dec aldec bxDestination bisa 8-bit atau 16-bit, INC dan DEC lebih cepat dibandingkan instruksi ADD dan SUB, semua status FLAG dipengaruhi kecuali CARRY FLAGorg 100hmov ax,10hinc axdec axint 20hendCatat perubahan nilai pada lokasi berikut: AXPerulangan (Looping)LOOP addrPerintah LOOP otomatis mengurangi CX dengan 1 dan kembali ke alamat yang diberikanLooping dilakukan selama register > 0

org 100hmov cx,1ahmov dl,41hulang:mov ah,02hint 21hinc dlloop ulangint 20hendGunakan Run untuk mendapatkan output.

Output?

Catat perubahan pada AX, CX, DL.

INTERRUPT 21h SERVICE 02h: mencetak sebuah karakter yang kodenya tersimpan di DL. Kode karakter yang dicetak kemudian akan disimpan di AL.

Catatan: kode 041h / 65 adalah karakter AA-Zorg 100hmov cx,0ahmov dl,39hulang:mov ah,02hint 21hdec dlloop ulangint 20hendOutput?

Catat perubahan pada AX, CX, DL.

Catatan: kode 039h / 57 adalah karakter 9Latihan 1Berapakah nilai register AX dan DX setelah instruksi-instruksi berikut dieksekusi ?org 100hmov ax,FFFFhinc alsub al,2mov dl,aladd dx,2int 20hLatihan 2Tulis program dalam bahasa Assembly yang melakukan hal-hal berikut :Mengisi register-register dengan nilai-nilai berikut : AX=0001, BX=0002, CX=0003, DX=0004Push masing-masing register ke stack dengan urutan : AX,BX,CX,DXPop (ambil) dari stack ke register dengan urutan : AX,BX,CX,DXBerapakah nilai AX,BX,CX,DX setelah baris-baris program tersebut dieksekusi ?Latihan 3Berapakah nilai hexadecimal dari destination operand pada setiap instruksi ? (Jika terdapat instruksi yang ERROR, tuliskan ERRORsebagai jawaban !)

InstruksiNilai SebelumnyaSetelahmov ax,bxAX=0023h BX=00A5hAX=mov ah,3AX=06AFhAX=mov bl,axBX=00A5h AX=4000hBL=mov di,100DI=06E9hDI=mov ds,cxDS=0FB2h CX=0020hDS=mov ah,blAX=0023h BX=00A5hAX=inc blBX=FFFFhBX=dec cxCX=0000hCX=Latihan 4Gunakan instruksi PUSH dan POP untuk membalik bilangan 16bit dalam list yang disimpan pada offset 0200h. Simpan hasilnya di offset 0208hMisalnyaJika:0200h : 1000h, 2000h, 3000h, 4000hHasil0208h: 4000h, 3000h, 2000h, 1000hLatihan 5

Berdasarkan kodes ASCII tersebut, tulislah program dalam bahasa assembly dengan output program sebagai berikut :

ZYXWVUTSRQPONMLKJIHGFEDCBA

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz

Program harus memanfaatkan istruksi LOOP dan INT