Laman

Selasa, 02 April 2013

Panjang String

Panjang dari sebuah null-terminated string adalah jumlah dari character yang berada di dalamnya, tidak termasuk null (null tidak dihitung). Untuk menghitung panjangnya, mulailah mengitung dari nol dan naik satu angka setiap byte yang tidak berisi null. Saat kamu mencapai null maka stop hitungannya.

Gambar flowchart di bawah ini memperlihatakan prosedur tadi. Flowchart di bawah mendeskribsikan algoritma dalam bentuk yang umum. Ditail dari bahasa assembly ada di bawah. Berikut adalah gambaran programnya:





## strlen.asm
##
## Count the characters in a string
##
## Registers:
## $8 -- count
## 

        .text
        .globl  main
  
# Initialize
main:    ori     $8,$0,0     #  count = 0

# while not ch==null do
loop:    . . . 
         . . .
         . . .
         
         j    loop
         sll   $0,$0,0       # branch delay slot
   
# finish
done:    sll   $0,$0,0       # target for branch

         .data
string:  .asciiz  "Time is the ghost of space."

Quest 3: kenapa null tidak ikut dihitung sebagai panjang dari string? (petunjuk: pikir apa yang terjadi jika dua string menjadi dempet)
jawab: karena untuk memisahkan string dengan string yang lain
jawaban yang benar: jika null ikut dihitung maka kombinasi dari dua string akan menyebabkan dua null padahal satu string hanya perlu satu null

Null-Terminated String

Sebuah null terminated string adalah rentetan ASCII character, byte demin byte, yang diakhiri oleh sebuah null byte (zero byte). Null terminated string sudah umun di bahasa C dan C++. Berikut adalah bagaimana sebuah string di deklarkan di bahasa assembly:
 
        .data
str:    .asciiz "Time is the ghost of space."

Character-character dari string ini disimpan di dalam memori sesuai urutan, dimulai dari 'T'.Gambar di bawah ini menunjukkan urutan tersebut. Character blank adalah diisi dengan spasi ASCII (0x20). Character terakhir diisi dengan 0x00, direpresentasikan seperti sebuah slash


Dan di bawah ini adalah apa yang terlihat di display SPIM yang berjalan di Windows PC. Character-character ini diletakkan ke memory dalam bentuk berurutan yang dimulai dari 'T' (pada addres 0x10000000). Ribet kalau melihat di display.



Display ini menunjukkan integer 32-bit little endian. Setiap grup dari 4 byte diperlihatkan dari kanan ke kiri (untuk 32-bit integer, hal ini meletakkan most significant byte di seblah kiri, kamu baru bisa menyangka hal ini kalau integer sudah diprint). Sayangnya cara ini membuat display susah untuk dilihat sebagai data daripada sebagai integer.

'T' ada di address 0x10000000.
'i' ada di address 0x10000001.
'm' ada di address 0x10000002.
'e' ada di address 0x10000003.

 Di tulisan merah, spasi (0x20) ditunjukkan sebagai '_'. Null byte berada di addres 0x1000000B

Quest 2: apa character yang ada di alamat 0x10000005?
jawab: i
jawaban yanga benar: i

BAB 20 — Contoh-contoh Loop dan Branch

Bab ini berisi dua contoh program yang mengilustrasikan pemrograman struktur loop dan branch. Bab ini juga membahas bagaimana character string dan integer array direpresentasikan pada bahasa assembly.

Topik:
  • null-terminated character string
    • program penghitung panajang string
  • integer array
    • program penjumlah array
Sebuah character string adalah barisan byte-byte yang berisi pola ascii.

Quest 1: apa yang berada di akhir sebual null-terminated string?
jawab: null
jawaban yang benar: zero byte (juga dikenal sebagai null byte).