Gunakan MimeTex/LaTex untuk menulis simbol dan persamaan matematika.

Selamat datang, Pengunjung. Silahkan masuk atau mendaftar. Apakah anda lupa aktivasi email?

Desember 04, 2020, 02:36:13 AM

Masuk dengan nama pengguna, kata sandi dan lama sesi

Topik Baru

Artikel Sains

Anggota
  • Total Anggota: 26686
  • Latest: mkrxxi
Stats
  • Total Tulisan: 139608
  • Total Topik: 10377
  • Online Today: 33
  • Online Ever: 441
  • (Desember 18, 2011, 12:48:51 AM)
Pengguna Online
Users: 0
Guests: 26
Total: 26

Ikuti ForSa

ForSa on FB ForSa on Twitter

Penulis Topik: Tolongin Perhitungan Data dengan Assembler  (Dibaca 4285 kali)

0 Anggota dan 1 Pengunjung sedang melihat topik ini.

Offline freexs077

  • Siswa Baru
  • *
  • Tulisan: 3
  • IQ: 2
Tolongin Perhitungan Data dengan Assembler
« pada: November 22, 2008, 07:55:09 AM »
Mohon bantuan-nya teman2 semua
Ndra ada masalah pada tugas akhir..??
ada perhitungan :

10 * (TL1/TH1) kemudian hasil keseluruhan dibagi dengan #58

pada perhitungan assemblernya gimana?
Ndra bingung dengan nilai sisa (DIV AB --> B),
karena kalau hasilnya ribuan berarti lebih dari 8 bit,
membagi datanya agar dapat ditampilkan pada seven segment 4 bh
Mohon bantuannya, Tolong balas ke Email.... ^-^
Terima kasih

[email protected]

Offline ksatriabajuhitam

  • Moderator
  • Profesor
  • *****
  • Tulisan: 791
  • IQ: 97
  • Gender: Pria
  • keep holding on
    • hsw weblog
Re: Tolongin Perhitungan Data dengan Assembler
« Jawab #1 pada: November 23, 2008, 06:34:40 AM »
DIV AB
A: 8-bit
B: 8-bit
hasil pembagian disimpan di register A
sisa pembagian disimpan di register B

kalo ngeliat variable yang freexs077 pake, kayaknya pake micro-controller keluarga MCS-51 ya?
karena processor-nya 8-bit, ya kalo handle ribuan tetep aja dinyatakan dalam register 8-bit atau kombinasi beberapa register 8-bit

kalo untuk angka yang besar, ada "dua" solusi:
1. di-scale down, misalnya angka ribuan jadi ratusan: 167700 dianggap 167
2. buat routine untuk pembagian lebih dari 8-bit

untuk solusi ke-2 ini, perlu ditentukan dulu, range datanya mau segimana, misal 0 - 60000, maka bisa pakai 16-bit
untuk pembagian 16-bit, comot aja nih routine:

INPUT:
nilai yang dibagi disimpan di R1:R0, misal 179 --> R1=00000000 R0=10110011
nilai yang membagi disimpan di R3:R2, misal 8 --> R3=00000000 R2=00001000
OUTPUT:
hasil pembagian disimpan di R3:R2

Kode: [Pilih]
div16_16:
  CLR C       ;Clear carry initially
  MOV R4,#00h ;Clear R4 working variable initially
  MOV R5,#00h ;CLear R5 working variable initially
  MOV B,#00h  ;Clear B since B will count the number of left-shifted bits
div1:
  INC B      ;Increment counter for each left shift
  MOV A,R2   ;Move the current divisor low byte into the accumulator
  RLC A      ;Shift low-byte left, rotate through carry to apply highest bit to high-byte
  MOV R2,A   ;Save the updated divisor low-byte
  MOV A,R3   ;Move the current divisor high byte into the accumulator
  RLC A      ;Shift high-byte left high, rotating in carry from low-byte
  MOV R3,A   ;Save the updated divisor high-byte
  JNC div1   ;Repeat until carry flag is set from high-byte
div2:        ;Shift right the divisor
  MOV A,R3   ;Move high-byte of divisor into accumulator
  RRC A      ;Rotate high-byte of divisor right and into carry
  MOV R3,A   ;Save updated value of high-byte of divisor
  MOV A,R2   ;Move low-byte of divisor into accumulator
  RRC A      ;Rotate low-byte of divisor right, with carry from high-byte
  MOV R2,A   ;Save updated value of low-byte of divisor
  CLR C      ;Clear carry, we don't need it anymore
  MOV 07h,R1 ;Make a safe copy of the dividend high-byte
  MOV 06h,R0 ;Make a safe copy of the dividend low-byte
  MOV A,R0   ;Move low-byte of dividend into accumulator
  SUBB A,R2  ;Dividend - shifted divisor = result bit (no factor, only 0 or 1)
  MOV R0,A   ;Save updated dividend
  MOV A,R1   ;Move high-byte of dividend into accumulator
  SUBB A,R3  ;Subtract high-byte of divisor (all together 16-bit substraction)
  MOV R1,A   ;Save updated high-byte back in high-byte of divisor
  JNC div3   ;If carry flag is NOT set, result is 1
  MOV R1,07h ;Otherwise result is 0, save copy of divisor to undo subtraction
  MOV R0,06h
div3:
  CPL C      ;Invert carry, so it can be directly copied into result
  MOV A,R4
  RLC A      ;Shift carry flag into temporary result
  MOV R4,A   
  MOV A,R5
  RLC A
  MOV R5,A
  DJNZ B,div2 ;Now count backwards and repeat until "B" is zero
  MOV R3,05h  ;Move result to R3/R2
  MOV R2,04h  ;Move result to R3/R2
  RET
copy-paste aja dari http://www.8052.com

jadi cara manggilnya:
Kode: [Pilih]
; siapkan bilangan dibagi
mov R1,<dibagi-1>
mov R0,<dibagi-0>
; siapkan bilangan pembagi
mov R3,<pembagi-1>
mov R2,<pembagi-0>
; panggil rutin pembagian 16-bit
acall div16_16
; ambil hasil pembagian
mov A,R3
mov B,R2


thanks to Jorg Rockstroh, yang udah bikin script div16_16 ini.
(pas kuliah diajarin sih, tapi males buka-buka :P  --duh duh koq males sih ?, dulu coba pake PIC yang ga punya assemby DIV sama sekali, mcs-51 masih mendingan)
not all the problems could be solved by the sword, but sword holder take control of problems.
ForSa versi mobile: http://www.forumsains.com/forum?wap2

Offline insan sains

  • Moderator
  • Profesor
  • *****
  • Tulisan: 579
  • IQ: 68
  • Gender: Pria
  • Life is Beatiful
    • Insan Sains
Re: Tolongin Perhitungan Data dengan Assembler
« Jawab #2 pada: Desember 01, 2008, 03:18:10 AM »
Keren... keren...

Bisa juga dong untuk bikin arithmatika 32 bit?

@ksatriabajuhitam
Makasih linknya ya...
Menuju Indonesia sebagai THE COUNTRY MASTER OF TECHNOLOGY, 2030

 

Related Topics

  Subyek / Dimulai oleh Jawaban Tulisan terakhir
4 Jawaban
3483 Dilihat
Tulisan terakhir Mei 06, 2009, 10:12:36 AM
oleh utusan langit
9 Jawaban
6957 Dilihat
Tulisan terakhir Juli 29, 2009, 07:10:06 AM
oleh tAZZZ
9 Jawaban
8612 Dilihat
Tulisan terakhir November 11, 2009, 11:48:11 AM
oleh insan sains
11 Jawaban
6241 Dilihat
Tulisan terakhir Februari 10, 2012, 01:08:21 PM
oleh exile_rstd
1 Jawaban
3105 Dilihat
Tulisan terakhir Agustus 27, 2013, 06:23:00 AM
oleh mhyworld