Flow Program Modulo dengan Metode Pengurangan
Berikut ini adalah flow program modulo dengan menggunakan metode pengurangan bilangan X terhadap bilangan Y dalam bahasa assembly
==============
ISTILAH-ISTILAH
==============
REGISTER_HASIL, register R0:R1
X_PULUHAN, register R2
X_SATUAN, register R3
Y_PULUHAN, register R4
Y_SATUAN, register R5
==============
FLOW PROGRAM
==============
Start:
CEK PULUHAN, apakah lebih besar / sama dengan puluhan X?
> Jika YA, lanjut CEK SATUAN
> Jika TIDAK, langsung tulis Register_Hasil dengan bilangan X, FINISH_PROGRAM
CEK SATUAN, apakah lebih besar satuan X?
> Jika YA, lanjutkan ke ke PROSES_PENGURANGAN bilangan X
> Jika TIDAK, CEK PULUHAN_AGAIN
CEK PULUHAN_AGAIN, apakah puluhan X sama besar?
> Jika YA, langsung tulis Register_Hasil dengan bilangan X, FINISH_PROGRAM
> Jika TIDAK, lanjutkan ke PROSES_PENGURANGAN bilangan X, FINISH_PROGRAM
PROSES PENGURANGAN:
> Pastikan set Carry menjadi 1 sebelum melakukan instruksi pengurangan (SUB)
> Kurangkan puluhan X dengan puluhan Y, update puluhan X
> Pastikan set Carry menjadi 1
> Kurangkan satuan X dengan satuan Y, update satuan Y
> perhatikan jika satuan X lebih kecil daripada satuan Y, maka satuan X akan meminjam 1 nilai kepada puluhan X
Contoh:
10
1
--- -
0F
*Jika terjadi proses peminjaman seperti contoh diatas, maka anda harus melakukan pengurangan X_PULUHAN secara manual (dapat menggunakan istruksi DAC)
Setelah terjadi proses pengurangan, maka anda harus kembali CEK, apakah bilangan X sudah lebih kecil dari bilangan Y
Jika sudah, maka hasil X modulo Y adalah nilai bilangan X yang sudah dilakukan pengurangan berkali kali oleh Y sampai bilangan X lebih kecil dari bilangan Y.
==============
ISTILAH-ISTILAH
==============
REGISTER_HASIL, register R0:R1
X_PULUHAN, register R2
X_SATUAN, register R3
Y_PULUHAN, register R4
Y_SATUAN, register R5
==============
FLOW PROGRAM
==============
Start:
CEK PULUHAN, apakah lebih besar / sama dengan puluhan X?
> Jika YA, lanjut CEK SATUAN
> Jika TIDAK, langsung tulis Register_Hasil dengan bilangan X, FINISH_PROGRAM
CEK SATUAN, apakah lebih besar satuan X?
> Jika YA, lanjutkan ke ke PROSES_PENGURANGAN bilangan X
> Jika TIDAK, CEK PULUHAN_AGAIN
CEK PULUHAN_AGAIN, apakah puluhan X sama besar?
> Jika YA, langsung tulis Register_Hasil dengan bilangan X, FINISH_PROGRAM
> Jika TIDAK, lanjutkan ke PROSES_PENGURANGAN bilangan X, FINISH_PROGRAM
PROSES PENGURANGAN:
> Pastikan set Carry menjadi 1 sebelum melakukan instruksi pengurangan (SUB)
> Kurangkan puluhan X dengan puluhan Y, update puluhan X
> Pastikan set Carry menjadi 1
> Kurangkan satuan X dengan satuan Y, update satuan Y
> perhatikan jika satuan X lebih kecil daripada satuan Y, maka satuan X akan meminjam 1 nilai kepada puluhan X
Contoh:
10
1
--- -
0F
*Jika terjadi proses peminjaman seperti contoh diatas, maka anda harus melakukan pengurangan X_PULUHAN secara manual (dapat menggunakan istruksi DAC)
Setelah terjadi proses pengurangan, maka anda harus kembali CEK, apakah bilangan X sudah lebih kecil dari bilangan Y
Jika sudah, maka hasil X modulo Y adalah nilai bilangan X yang sudah dilakukan pengurangan berkali kali oleh Y sampai bilangan X lebih kecil dari bilangan Y.
mantep gitu
ReplyDelete