Anda di halaman 1dari 59

Chapter 7: Using Assembly Language With C/C++

Introduction
• Bab ini mengembangkan ide pencampuran C/C++ dan
bahasa assembly..
• Teks ini menggunakan Microsoft Visual C/C++ Express, tetapi
program sering kali dapat disesuaikan dengan versi C/C++
apa pun, selama itu adalah format standar ANSI (American
National Standards Institute) C/C++.
• Jika mau, Anda dapat menggunakan C/C++ untuk
memasukkan dan menjalankan semua aplikasi pemrograman
dalam teks ini..

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Chapter Objectives
Upon completion of this chapter, you will be able to:

• Gunakan bahasa rakitan dalam blok _asm


dalam C/C+.
• Pelajari aturan yang berlaku untuk
pengembangan perangkat lunak bahasa
campuran.
• Gunakan data dan struktur C/C++ umum
dengan bahasa assembly.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Chapter Objectives (cont.)
Upon completion of this chapter, you will be able to:

• Gunakan antarmuka 16-bit (DOS) dan


antarmuka 32-bit (Microsoft Windows) dengan
kode bahasa rakitan.
• Gunakan objek bahasa assembly dengan
program C/C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
7–1   MENGGUNAKAN BAHASA ASSEMBLY
DENGAN C++ UNTUK APLIKASI DOS 16-BIT

• Gunakan perangkat lunak untuk membangun aplikasi 16-bit


saat mencoba program apa pun di bagian ini.
– jika Anda membuat aplikasi 32-bit dan mencoba fungsi
DOS INT 21H, program akan macet
• Untuk membangun aplikasi DOS 16-bit, Anda memerlukan
kompiler 16-bit lama
• Program dibuat menggunakan Notepad atau DOS Edit

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Aturan Dasar dan Program Sederhana

• Sebelum kode bahasa assembly dapat ditempatkan dalam


program C/C++, beberapa aturan harus dipelajari.
• Contoh 7-1 menunjukkan bagaimana menempatkan kode
rakitan di dalam blok bahasa rakitan dalam program C/C++
singkat.
• Kode perakitan dalam contoh ini ditempatkan di blok _asm.
• Label yang digunakan seperti yang diilustrasikan oleh label
big.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Sangat penting untuk menggunakan karakter huruf kecil
untuk setiap kode perakitan sebaris.
– jika Anda menggunakan huruf besar, Anda akan
menemukan beberapa perintah bahasa rakitan dan
register dicadangkan atau kata-kata yang ditentukan
dalam C/C++
• Contoh 7-1 membaca satu karakter dari keyboard konsol,
dan kemudian memfilternya melalui bahasa rakitan sehingga
hanya angka 0 hingga 9 yang dikirim kembali ke tampilan
video.
• Ini menunjukkan cara mengatur dan menggunakan beberapa
konstruksi pemrograman sederhana di C/C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Perhatikan bahwa register AX, BX, CX, DX, dan ES tidak
pernah digunakan oleh Microsoft C / C ++.
– ini mungkin dianggap sebagai register scratchpad,
tersedia untuk digunakan dengan bahasa assembly
• Jika Anda ingin menggunakan register lain, pastikan Anda
menyimpannya dengan PUSH sebelum digunakan dan
memulihkannya dengan POP sesudahnya.
• Jika Anda gagal menyimpan register yang digunakan oleh
suatu program, program tersebut mungkin tidak berfungsi
dengan benar dan dapat membuat komputer crash

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Apa yang Tidak Dapat Digunakan dari MASM
Di Dalam Blok _asm

• MASM berisi fitur, seperti perintah bersyarat


(.IF, .WHILE, .REPEAT, dll.)
• Assembler sebaris tidak menyertakan perintah bersyarat dari
MASM.
• juga tidak menyertakan fitur MAKRO yang ditemukan di
assembler
• Alokasi data dengan assembler inline ditangani oleh C.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Menggunakan String Karakter

• Contoh 7–3 mengilustrasikan program sederhana yang


menggunakan string karakter yang ditentukan dengan C dan
menampilkannya sehingga setiap kata terdaftar pada baris
terpisah.
• perhatikan perpaduan kedua pernyataan C dan pernyataan
bahasa assembly
• Pernyataan WHILE mengulangi perintah bahasa assembly
hingga null (00H) ditemukan di akhir string karakter.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Untuk setiap ruang, program menampilkan
kombinasi carriage return / line feed.
• Hal ini menyebabkan setiap kata dalam string
ditampilkan pada baris terpisah.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Menggunakan Struktur Data
• Contoh 7–5 menggunakan struktur data untuk menyimpan
nama, usia, dan gaji.
• Ini kemudian menampilkan setiap entri dengan menggunakan
beberapa prosedur bahasa rakitan.
• Prosedur string menampilkan string karakter, tidak ada
kombinasi carriage return/line feed yang ditampilkan—
sebagai gantinya, spasi ditampilkan.
• Prosedur Crlf menampilkan kombinasi carriage return/line
feed.
– prosedur Numb menampilkan bilangan bulat

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Contoh Program Bahasa Campuran

• Contoh 7–6 menunjukkan bagaimana program dapat


melakukan beberapa operasi dalam bahasa assembly dan
beberapa dalam bahasa C.
• Bagian bahasa rakitan dari program adalah prosedur Dispn
yang menampilkan bilangan bulat dan prosedur Readnum,
yang membaca bilangan bulat.
• Program tidak berusaha untuk mendeteksi atau memperbaiki
kesalahan.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
7–2  MENGGUNAKAN BAHASA ASSEMBLY
DENGAN VISUAL C/C++ UNTUK APLIKASI 32-
BIT

• Aplikasi 32-bit ditulis dengan Microsoft Visual C/C++ Express


untuk Windows dan aplikasi 16-bit menggunakan Microsoft C+
+ untuk DOS.
• Visual C/C++ Express untuk Windows lebih umum saat ini.
• Visual C/C++ Express tidak dapat dengan mudah memanggil
fungsi DOS seperti INT 2lH.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–1  Pemilihan layar proyek baru dari aplikasi konsol WIN32.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Mengarahkan Port I/O secara Langsung
• Jika sebuah program ditulis yang harus mengakses nomor
port yang sebenarnya, kita dapat menggunakan perintah
konsol I/O seperti perintah _inp(port) untuk memasukkan data
byte, dan perintah _outp(port,byte_data) untuk mengeluarkan
data byte.
• Saat menulis perangkat lunak untuk komputer pribadi, jarang
untuk secara langsung mengalamatkan port I/O, tetapi ketika
perangkat lunak ditulis untuk sistem tertanam, kita sering
langsung mengalamatkan port I/O.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Port I/O mungkin tidak dapat diakses di lingkungan Windows
jika Anda menggunakan Windows NT, Windows 2000,
Windows XP, atau Windows Vista.
• Satu-satunya cara untuk mengakses port I/O dalam sistem
operasi modern ini adalah dengan mengembangkan driver
kernel.
– pada titik ini dalam teks tidak praktis untuk
mengembangkan pendorong seperti itu
• Di Windows 95 atau 98, Anda dapat menggunakan instruksi
masuk dan keluar di C/C++ untuk mengakses port I/O.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Mengembangkan Aplikasi Visual C++ untuk
Windows

• Microsoft Foundation Classes (MFC) adalah kumpulan kelas


yang memungkinkan kita untuk menggunakan antarmuka
Windows tanpa banyak kesulitan.
• MFC telah diubah namanya menjadi common language
runtime (CLR) dalam Visual C++ Express.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Untuk membuat aplikasi berbasis formulir Visual C++, mulai
Visual C++ Express dan klik Buat Proyek di dekat sudut kiri
atas layar mulai.
• Figure 7–2 mengilustrasikan apa yang ditampilkan ketika tipe
aplikasi CLR Windows Forms dipilih di bawah Visual C++
Express Projects.
• Masukkan nama untuk proyek dan pilih jalur yang sesuai
untuk proyek, lalu klik OK.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–2  Memulai program C++ untuk Windows dalam Visual C++ Express..

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Setelah beberapa saat, layar desain akan muncul seperti
pada Figure 7–3.
• Di bagian tengah adalah formulir yang dibuat oleh aplikasi ini.
• Untuk menguji aplikasi, seperti yang muncul, temukan panah
hijau yang terletak di suatu tempat di atas formulir dan di
bawah bilah menu Windows di bagian atas layar dan klik
untuk mengkompilasi, menautkan, dan menjalankan aplikasi
dialog.
• Anda baru saja membuat dan menguji aplikasi Visual C++
Express pertama Anda.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–3  Tangkapan layar jendela desain.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Pada tangkapan layar pada Figure 7–3, beberapa item
penting untuk pembuatan dan pengembangan program.
– margin kanan berisi jendela Properties, dengan sifat-sifat
formulir; margin kiri berisi Solution Explorer
• Tab, di bagian bawah jendela Solution Explorer,
memungkinkan tampilan lain ditampilkan seperti tampilan
kelas dan sebagainya di area ini.
• Tab di bagian bawah jendela Properties memungkinkan
kelas, properti, bantuan dinamis, atau output ditampilkan di
jendela ini.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• IUntuk membuat aplikasi sederhana, pilih toolbox dengan
mengklik Tools di bagian atas layar atau dengan membuka
menu dropdown View dan memilih Toolbox dari daftar.
• Klik pada kontrol tombol di dekat bagian atas kotak alat, yang
memilih tombol.
• Sekarang pindahkan penunjuk tetikus (jangan seret tombol)
ke aplikasi dialog di tengah layar dan gambar, dengan
mengeklik kiri dan mengubah ukuran tombol di dekat tengah.
• Lihat Figure 7–4.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–4 Sebuah tombol kontrol ditempatkan pada formulir.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Setelah tombol ditempatkan di layar, event handler harus
ditambahkan sehingga menekan atau mengklik tombol dapat
ditangani.
• Penangan acara dipilih dengan membuka jendela Properties
dan mengklik petir kuning.
• Pastikan bahwa item yang dipilih untuk acara adalah objek
button1.
• Untuk beralih kembali ke jendela Properties dari jendela
acara, klik ikon tepat di sebelah kiri petir.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Temukan event Click (harus menjadi event pertama) lalu klik
dua kali pada kotak teks di sebelah kanan untuk menginstal
event handler untuk Click.
• Tampilan sekarang akan beralih ke tampilan kode dan
mengubah lokasi perangkat lunak klik tombol.
• Perangkat lunak yang sedang dilihat adalah fungsi
button1_Click, yang dipanggil ketika pengguna mengklik
tombol.
• Prosedur ini diilustrasikan dalam Contoh 7-8.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Kita dapat memodifikasi aplikasi ke aplikasi yang lebih
kompleks seperti yang ditunjukkan pada Figure 7–5.
• Judul pada tombol telah diubah menjadi kata “Convert.”
• Untuk kembali ke layar desain, pilih tab di bagian atas
jendela program yang diberi label Form1.h[desain]*.
• Saat di jendela Desain, ubah keterangan pada tombol1
dengan mengklik tombol dan temukan properti Teks dari
properti tombol1 di jendela Properti.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Ubah properti Teks menjadi “Convert.”
• PadaFigure 7–5 ada tiga Label dan tiga kontrol kotak teks
dalam ilustrasi di bawah dan di sebelah kiri tombol Konversi.
• Kontrol ini terletak di kotak alat.
• Gambarlah mereka di layar di tempat yang kira-kira sama
seperti pada Figure 7–5.
• Label diubah dalam properti untuk setiap kontrol label.
• Ubah teks untuk setiap label seperti yang ditunjukkan.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–5   Aplikasi pertama.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Tujuannya adalah untuk menampilkan angka apa pun yang
dimasukkan dalam kotak Angka Desimal sebagai angka
dengan radix (basis angka) apa pun seperti yang dipilih oleh
angka yang dimasukkan dalam kotak Radix.
• Hasilnya muncul di kotak Result ketika tombol Convert diklik.
• Untuk beralih ke tampilan program, klik pada tab Form1.h di
bagian atas jendela Desain.
• Untuk mendapatkan nilai dari kontrol edit, gunakan properti
Text untuk mendapatkan versi string dari nomor tersebut.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• String harus dikonversi ke integer.
• Kelas Konversi yang disediakan dalam C++ melakukan
konversi dari/ke sebagian besar tipe data.
– fungsi anggota kelas Konversi ToInt32 digunakan untuk
mengubah string menjadi bilangan bulat
• Bagian tersulit dari contoh ini adalah konversi dari basis 10
ke basis angka apa pun.
– hanya akan berfungsi dengan benar jika nomor yang
dimasukkan ke dalam kotak teks1 adalah bilangan bulat
• Jika huruf atau apa pun dimasukkan, program akan macet
dan menampilkan kesalahan.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Windows tidak menggunakan kode ASCII, ia menggunakan
Unicode sehingga Char (16-bit Unicode) diperlukan sebagai
pengganti char 8-bit.
• Sebuah 0x30 ditambahkan ke setiap digit untuk
mengkonversi ke kode ASCII dalam contoh.
• Algoritma Horner:
– membagi angka dengan radix yang diinginkan
– simpan sisanya dan ganti angkanya dengan hasil bagi
– ulangi langkah 1 dan 2 sampai hasil bagi nol

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Karena ini adalah teks bahasa rakitan, kelas Konversi tidak
akan digunakan.
– fungsinya cukup besar
• Untuk melihat seberapa besar, Anda dapat menempatkan
breakpoint di perangkat lunak di sebelah kiri fungsi Konversi
dengan mengklik bilah abu-abu di sebelah kiri baris kode.
– lingkaran coklat, breakpoint, akan muncul
• Jika Anda menjalankan program, itu akan berhenti (berhenti)
pada titik ini dan masuk ke mode debugging sehingga dapat
dilihat dalam bentuk bahasa assembly.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Untuk menampilkan kode yang dibongkar, jalankan program
hingga rusak, lalu masuk ke menu Debug dan pilih Windows.
Di menu Windows, di dekat bagian bawah,
temukan“Disassembly.”
• Register juga dapat ditampilkan untuk melangkah melalui
program dalam bahasa assembly.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Masalah utama dengan menggunakan kode perakitan
sebaris adalah bahwa kode tersebut tidak dapat ditempatkan
ke dalam aplikasi formulir yang dikelola Windows di kelas
yang dikelola.
• Untuk menggunakan assembler, fungsi harus ditempatkan
sebelum kelas terkelola agar dapat dikompilasi.
• Oleh karena itu, di properti proyek, Common Runtime
Support juga harus diubah ke /clr dari pengaturan default
/clr:pure sehingga akan berhasil dikompilasi.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Refer Figure 7–6 untuk cuplikan layar tentang cara
mengubah dukungan Common Language Runtime ke /clr.
• Program yang dikelola berjalan di bawah mesin virtual yang
disebut .net dan aplikasi yang tidak dikelola dioperasikan
dalam mode asli komputer.
• Assembler inline menghasilkan kode asli untuk
mikroprosesor sehingga harus tidak dikelola dan berada
sebelum kelas yang dikelola dalam suatu program.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–6  Mengubah ke /clr untuk bahasa assembly..

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Contoh 7–13 mengilustrasikan bagaimana mengganti bagian
dari algoritma Horner dengan kode assembly dalam fungsi
yang disebut Adjust.
• Fungsi penyesuaian menguji angka untuk 9, dan jika lebih
besar dari 9, ia menambahkan 0x07 dan kemudian 0x30
untuk mengubahnya menjadi ASCII, yang dikembalikan.
• Dengan menempatkan kode rakitan sebelum kelas terkelola,
kode tersebut tersedia untuk seluruh aplikasi dan dijalankan
dalam mode tidak terkelola atau asli.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
7–3  PERAKITAN CAMPURAN DAN OBJEK C+
+

• Assembler inline terbatas karena tidak dapat menggunakan


urutan MAKRO dan arahan aliran program bersyarat.
• Dalam beberapa kasus, lebih baik untuk mengembangkan
modul bahasa assembly yang kemudian dihubungkan dengan
C++ untuk lebih fleksibel.
• Ini terutama benar jika aplikasi sedang dikembangkan oleh tim
pemrogram.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Menghubungkan Bahasa Assembly dengan
Visual C++

• Contoh 7–15 mengilustrasikan prosedur model datar yang


akan ditautkan ke program C++.
• Kami menyatakan bahwa modul perakitan adalah modul C++
dengan menggunakan huruf C setelah kata datar dalam
pernyataan model.
• Keterkaitan yang ditentukan oleh huruf C sama untuk bahasa
C atau C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Model datar memungkinkan perangkat lunak bahasa rakitan
memiliki panjang hingga 2G byte.
• Sakelar .586 muncul sebelum pernyataan model, yang
menyebabkan assembler menghasilkan kode yang berfungsi
dalam mode 32-bit yang dilindungi.
• Prosedur Reverse, ditunjukkan pada Contoh 7-15, menerima
string karakter dari program C++, membalik urutannya, dan
kembali ke program C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Modul bahasa assembly dapat memiliki nama apa saja dan
dapat berisi lebih dari satu prosedur, selama setiap prosedur
berisi pernyataan PUBLIC yang mendefinisikan nama
prosedur sebagai publik.
• Parameter apa pun yang ditransfer dalam program C++ dan
program bahasa rakitan ditunjukkan dengan garis miring
terbalik mengikuti nama prosedur.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Contoh 7–16 mengilustrasikan program bahasa C++ untuk
aplikasi konsol DOS yang menggunakan prosedur bahasa
rakitan Terbalik.
• Pernyataan EXTERN digunakan untuk menunjukkan bahwa
prosedur eksternal yang disebut Reverse akan digunakan
dalam program C++.
• Nama prosedur peka huruf besar/kecil, jadi pastikan
ejaannya sama di modul bahasa rakitan dan modul bahasa
C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Pernyataan EXTERN menunjukkan prosedur bahasa rakitan
eksternal mentransfer string karakter ke prosedur dan tidak
mengembalikan data.
• Jika data dikembalikan dari prosedur, data dikembalikan
sebagai nilai dalam register EAX untuk byte, kata, atau kata
ganda.
• Jika angka floating-point dikembalikan, mereka harus
dikembalikan pada stack coprocessor floating-point.
• Jika pointer dikembalikan, itu harus di EAX.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Setelah program C++ dan program bahasa assembly ditulis,
sistem pengembangan Visual C++ harus diatur untuk
menghubungkan keduanya.
• Untuk penautan dan perakitan, kami akan menganggap
bahwa modul bahasa rakitan disebut Reverse.txt (Anda tidak
dapat menambahkan file ekstensi .asm ke daftar file untuk
dimasukkan ke dalam proyek, jadi gunakan saja ekstensi .txt
dan tambahkan file .txt ) dan modul bahasa C++ disebut
Main.cpp.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Kedua modul disimpan di direktori C:\PROJECT\MINE atau
direktori lain yang Anda pilih.
• Setelah modul ditempatkan di ruang kerja proyek yang sama,
program Meja Kerja Programmer digunakan untuk mengedit
modul bahasa assembly dan bahasa C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Figure 7–7  Menggunakan assembler untuk merakit modul dalam Visual C++..

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Akhirnya, Anda dapat menjalankan program.
• Klik panah hijau. Anda akan melihat dua baris data teks
ASCII ditampilkan.
• Baris pertama dalam urutan maju yang benar dan yang
kedua dalam urutan terbalik.
• Meskipun ini adalah aplikasi sepele, itu menggambarkan
cara membuat dan menautkan bahasa C++ dengan bahasa
assembly.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Menambahkan Instruksi Bahasa Assembly
Baru ke Program C/C++

• Dari waktu ke waktu, ketika mikroprosesor baru diperkenalkan


oleh Intel, instruksi bahasa rakitan baru juga diperkenalkan.
• Ini tidak dapat digunakan di C++ kecuali jika Anda
mengembangkan makro untuk menyertakannya.
• Contohnya adalah instruksi bahasa rakitan CPUID.
– akan berfungsi dalam blok _asm dalam C++ karena
assembler inline tidak mengenalinya.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Kelompok lain dari instruksi yang lebih baru termasuk
instruksi MMX dan SEC.
• Ini juga dikenali, tetapi untuk mengilustrasikan bagaimana
instruksi baru ditambahkan yang tidak ada di assembler,
kami menunjukkan tekniknya.
• Misalnya, kode mesin untuk instruksi CPUlD adalah 0F A2.
• Instruksi 2-byte ini dapat didefinisikan sebagai makro C++,
seperti yang diilustrasikan pada Contoh 7–19.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
• Untuk menggunakan makro baru dalam program C++, yang
perlu kita ketik hanyalah CPUID.
• Makro _emit menyimpan byte yang mengikutinya dalam
program.
• Example 7–19:
• #define CPUID _asm _emit 0x0f _asm _emit 0xa2

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
SUMMARY
• Assembler sebaris digunakan untuk menyisipkan urutan
bahasa rakitan yang pendek dan terbatas ke dalam
program C++.
• Keterbatasan utama assembler inline adalah bahwa ia
tidak dapat menggunakan urutan makro atau instruksi
aliran program bersyarat.
• Dua versi C++ tersedia. Satu untuk aplikasi konsol DOS
16-bit dan yang lainnya untuk aplikasi Windows 32-bit.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
SUMMARY (cont.)
• Jenis yang dipilih untuk aplikasi tergantung pada
lingkungan, tetapi dalam kebanyakan kasus programmer
saat ini menggunakan Windows dan versi Visual Express
32-bit.
• Aplikasi bahasa rakitan 16-bit menggunakan perintah
DOS INT 21H untuk mengakses perangkat dalam sistem.
Aplikasi bahasa rakitan 32-bit tidak dapat secara efisien
atau mudah mengakses panggilan fungsi DOS INT 21H
meskipun banyak yang tersedia.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
SUMMARY (cont.)
• Metode antarmuka bahasa rakitan yang paling fleksibel
dan sering digunakan dalam program C++ adalah melalui
modul bahasa rakitan yang terpisah.
• Satu-satunya perbedaan adalah bahwa modul bahasa
rakitan yang terpisah ini harus didefinisikan dengan
menggunakan direktif C yang mengikuti
pernyataan .model untuk mendefinisikan tautan modul
sebagai kompatibel dengan C/C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
SUMMARY (cont.)
• Pernyataan PUBLIC digunakan dalam modul bahasa
assembly untuk menunjukkan bahwa nama prosedur
bersifat publik dan tersedia untuk digunakan dengan modul
lain.
• Parameter eksternal didefinisikan dalam modul bahasa
rakitan dengan menggunakan nama prosedur dalam
pernyataan PROC. Parameter kembali melalui register EAX
ke prosedur panggilan C/C++ dari prosedur bahasa rakitan.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
SUMMARY (cont.)

• Modul bahasa assembly dideklarasikan di luar program


C++ dengan menggunakan direktif extern. Jika direktif
extern diikuti oleh huruf C, direktif tersebut digunakan
dalam program bahasa C/C++.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
SUMMARY
• Saat menggunakan Visual Studio, kita dapat
menginstruksikannya untuk merakit modul bahasa
assembly dengan mengklik Properties untuk modul dan
menambahkan program bahasa assembler (ml /c /Cx /coff
Filename.txt) dan file output sebagai file objek (File-
name.obj) pada langkah Custom Build untuk modul.
• Modul bahasa assembly dapat berisi banyak prosedur,
tetapi tidak pernah dapat berisi program menggunakan
direktif .startup.

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey
Example 7-1
//Accepts and displays one character of 1 through 9,
//all others are ignored.
void main(void)
{
_asm {
mov ah,8 ;read key no echo
int 21h ; DOS interrupt 21h
cmp al,‘0’
jb big ;filter key code
cmp al,‘9’
ja big
mov dl,al ;echo 0 – 9
mov ah,1 ;wait any key for exit
int 21h
big:
}
}

The Intel Microprocessors: 8086/8088, 80186/80188, 80286, 80386, 80486 Pentium,


Pentium Pro Processor, Pentium II, Pentium, 4, and Core2 with 64-bit Extensions Copyright ©2009 by Pearson Education, Inc.
Architecture, Programming, and Interfacing, Eighth Edition Upper Saddle River, New Jersey 07458 • All rights reserved.
Barry B. Brey

Anda mungkin juga menyukai