Assembly Yardim

sametehm

Üye
Katılım
1 Ara 2008
Mesajlar
38
Puanları
1
Yaş
39
arkadaslar yolladigim C kodunu Assembly programlamlama diline cevirebilecek var mi acaba? Bu dile daha yeni basladik allah belasini versin bisey anlamiyom Smile


#include<stdio.h>
int main()
{
unsigned char a[10],i,c,temp;
//degerleri girilmish kabul ettim
for(i=0;i<10;i++)
for(c=0;c<9;c++)
if(a[c]>a[c+1])
{
temp=a[c];
a[c]=a[c+1];
a[c+1]=temp;
}
return 0;
}
 
#include<stdio.h>
int main()
{
unsigned char a[10],i,c,temp; i,c degişkenleri atandı sayı 10 olarak alındı
//degerleri girilmish kabul ettim
for(i=0;i<10;i++) ,;i degişkeni sıfır olarak alındı
i nin degeri 10 dan küçükmü
for(c=0;c<9;c++) c degişkeni sıfırlandı c 9 dan küçükmü
if(a[c]>a[c+1]) s,c degişkenleri a degişkeninden büyükmü
degilse c degişkenini 1 artır
{
temp=a[c]; sıcaklık degişkeni a degeri c ile eşitmi
a[c]=a[c+1];a,c ile a degişkeni eşitmi degilse c degerini 1 artır
a[c+1]=temp; c yi 1 artır
}
return 0; sıfır degilkenine geri dön
}


böyel birşey olması lazım pek anlamıorum c den ama yardımcı olmak için yazdım kolay gelsin
 
biotec kafan mı iyi , neyi neye çevirdin sen?
 
Adam gibi cevab yaz bana kafanmı iyi diye cevap olmaz basıc diline çevirdigimi biliyorum adama kolaylık olsun az çok anlayabilsin diye hiç anlamıyorum diye isyanda kimse birşey yazmayınca biraz bilgi vermek istedim anlıyorsan bana saygısızlık edecegine arkadaşımıza faydalı olmaya çalış.
 
adam assembly dilini bilmediğinden yakarıyor , sen ise çoğu mesajın altına saçma sapan mesajlar yazıyorsun , en azından link vermeyi bırakmışın , pardon tutamadım kendimi bu sefer
 
asembler bende yeni öğreniyorum ccsc den asm çevrimini aldım bazıları gereksiz bilgiler..


CCS PCM C Compiler, Version 4.074, 29642 15-Mar-10 23:59



ROM used: 91 words (1%)
Largest free fragment is 2048
RAM used: 23 (6%) at main() level
23 (6%) worst case
Stack: 0 locations

*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 004
0003: NOP
.................... #include "stdio.h"
.................... #include <stdio.h>
.................... //////// Standard Header file for the PIC16F877A device ////////////////
.................... #device PIC16F877A
.................... #list
....................
.................... #device adc=8
....................
.................... #FUSES NOWDT //No Watch Dog Timer
.................... #FUSES RC //Resistor/Capacitor Osc with CLKOUT
.................... #FUSES NOPUT //No Power Up Timer
.................... #FUSES NOPROTECT //Code not protected from reading
.................... #FUSES NODEBUG //No Debug mode for ICD
.................... #FUSES NOBROWNOUT //No brownout reset
.................... #FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
.................... #FUSES NOCPD //No EE protection
.................... #FUSES NOWRT //Program memory not write protected
....................
.................... #use delay(clock=20000000)
.................... #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
....................
....................
....................
....................
.................... int main()
.................... {
0004: CLRF 04
0005: BCF 03.7
0006: MOVLW 1F
0007: ANDWF 03,F
0008: MOVLW 81
0009: BSF 03.5
000A: MOVWF 19
000B: MOVLW A6
000C: MOVWF 18
000D: MOVLW 90
000E: BCF 03.5
000F: MOVWF 18
0010: BSF 03.5
0011: BSF 1F.0
0012: BSF 1F.1
0013: BSF 1F.2
0014: BCF 1F.3
0015: MOVLW 07
0016: MOVWF 1C
.................... unsigned char a[10],i,c,temp;
.................... //degerleri girilmish kabul ettim
.................... for(i=0;i<10;i++)
0017: BCF 03.5
0018: CLRF 2B
0019: MOVF 2B,W
001A: SUBLW 09
001B: BTFSS 03.0
001C: GOTO 058
.................... for(c=0;c<9;c++)
001D: CLRF 2C
001E: MOVF 2C,W
001F: SUBLW 08
0020: BTFSS 03.0
0021: GOTO 056
.................... if(a[c]>a[c+1])
0022: MOVLW 21
0023: ADDWF 2C,W
0024: MOVWF 04
0025: BCF 03.7
0026: MOVF 00,W
0027: MOVWF 2E
0028: MOVLW 01
0029: ADDWF 2C,W
002A: ADDLW 21
002B: MOVWF 04
002C: BCF 03.7
002D: MOVF 00,W
002E: SUBWF 2E,W
002F: BTFSC 03.2
0030: GOTO 054
0031: BTFSS 03.0
0032: GOTO 054
.................... {
.................... temp=a[c];
0033: MOVLW 21
0034: ADDWF 2C,W
0035: MOVWF 04
0036: BCF 03.7
0037: MOVF 00,W
0038: MOVWF 2D
.................... a[c]=a[c+1];
0039: MOVLW 21
003A: ADDWF 2C,W
003B: MOVWF 78
003C: CLRF 7A
003D: BTFSC 03.0
003E: INCF 7A,F
003F: MOVLW 01
0040: ADDWF 2C,W
0041: ADDLW 21
0042: MOVWF 04
0043: BCF 03.7
0044: MOVF 00,W
0045: MOVWF 31
0046: MOVF 78,W
0047: MOVWF 04
0048: BCF 03.7
0049: BTFSC 7A.0
004A: BSF 03.7
004B: MOVF 31,W
004C: MOVWF 00
.................... a[c+1]=temp;
004D: MOVLW 01
004E: ADDWF 2C,W
004F: ADDLW 21
0050: MOVWF 04
0051: BCF 03.7
0052: MOVF 2D,W
0053: MOVWF 00
.................... }
0054: INCF 2C,F
0055: GOTO 01E
0056: INCF 2B,F
0057: GOTO 019
.................... return 0;
0058: MOVLW 00
0059: MOVWF 78
.................... }
....................
....................
005A: SLEEP

Configuration Fuses:
Word 1: 3F3B RC NOWDT NOPUT NODEBUG NOPROTECT NOBROWNOUT NOLVP NOCPD NOWRT
 
@sametehm
C'den asmye geçmek istiyorsan , başlangıç aşamasında daha önceden yazdığın C kodlarını hemen asm'ye çevirmeye çalışma , öncelikle birkaç asm anlatan pic kitabı edin , onları bitir , zamanla kafanda oluşmaya başlayacak zaten
 
Arkadaş C'de yazılan programı assemblyde yazmak istiyor , hazırladığı C kodunun açıklamalarını yanlarına yazıp geri yollar mısınız dememiş.

Program bir dizideki sayıları küçükten büyüğe doğru sıralamaya yarayan bir program.

Oradaki temp de sıcaklık değil , geçici anlamına gelen Temporary'nin kısaltılmışı ve bu TEMP döngü esnasında sırası düzgün olmayan 2 eleman bulunduğunda bu 2 değişkenin yerini değiştirmede kullanılıyor.

Assembly kod yazanlar bilir , bu C kodunu asm'ye çevirmek giriş seviyesi bir programlama sayılamaz , eğer bu içinde dizi işlemi içeren C örneği assembly'e çevrilmek istenirse "Dolaylı Adresleme" kullanılması gerekir aksi taktirde klasik "Direk Adresleme" kullanılarak yapılan program Fatih54'ün CCS den otomatik olarak çevirdiği gibi çok uzun ve anlaşılmaz bir hal alır.

Bu durum soruyu soran ve asm öğrenmek isteyen sametehm için iyice kötü bir hal alır , eğer asm öğrenmek istiyorsa asm öğrenmeye sondan başlamış olur , C'den sonra asm'ye geçtiği için hevesi kırılır , iyice lanet eder . Asm'ye bu şekilde balıklama atlanılmaz .
Ama eğer sametehm ASM öğrenmek istemiyorsa sadece ödevini yaptırmak için buraya bu kodu yazdıysa , burası ödev yaptırma yeri değildir , şahsen ben hazırcılara yardım etmiyorum sadece tavsiye veriyorum. Copy-paste paylaştığı kodun yeni halini copy-paste olarak alıcak , o kodu çalıştırmaya çalışacak çalışmayacak , olmadı yarım yamalak hocaya vereyim dicek , eğer hoca da dikkatli ise copy-paste aldığını anlayacak ve 0 alacak ödevden , en önemlisi hiçbirşey öğrenemeyecek.

Ama madem konu bu noktaya kadar geldi biotec'ün güzel hatırına bu kodu "Dolaylı Adresleme" kullanarak yazıvereyim , hem sametehm eğer hala forumda ise nasiplenmiş olur hem de ASM programlamaya başlayan Aykut54 için fikir olur.

Açıklamalarıyla beraber. Buyrun kodlar:


Kod:
;Pic16f84a kullanığımızı varsayaraktan diziyi 0x0C adresinden başlatıyorum
;Bu program ile 16f84a ile 67 adet değişen küçükten büyüğe sıralanabilir


;=======Kullanılan Yazmaçlar======
	
		CBLOCK		0x0C		;a dizisinin eleman sayısı 67	
		a1				;dizinin ilk elemanın ismi a1 adresi:0x0C
		a2				;0x0D
		a3				;0x0E
		a4				;0x0F
		a5				;0x10
;		....
;		...
		a67				;0x4E
		TEMP				;0x4F
		ENDC

;..................
;...............
;...................

BASLA		movlw		0x0B		;dizinin ilk elemanın bir önceki adresi FSR yazmacına yüklendi
		movwf		FSR

UP		movlw		0x4E		
		subwf		FSR,w
		btfsc		STATUS,Z	;dizinin son elemanı kontrol edildi mi?
		GOTO		CIKIS		;dizilim tamamlandı , ÇIKIŞ

		incf		FSR		;dizinin 2 elemanını karşılaştıran bölüm
		movf		INDF,w
		incf		FSR
		subwf		INDF,w
		btfss		STATUS,C	;sıralama doğru mu?
		GOTO		UP		;evet doğru , sıradakine bak
						
		movf		INDF,w		;doğru değil yerlerini değiştir
		movwf		TEMP
		decf		FSR
		movf		INDF,w
		incf		FSR
		movwf		INDF
		decf		FSR
		movf		TEMP,w
		movwf		INDF
		GOTO		UP		;Başa dön

CIKIS 		nop				;işlem tamam , a dizisi küçükten büyüğe dizildi
;............
;..............
;...............
 

Forum istatistikleri

Konular
128,212
Mesajlar
915,855
Kullanıcılar
449,990
Son üye
alpersirakaya

Yeni konular

Çevrimiçi üyeler

Geri
Üst