Konuyu görüntüle
IUCODERS FORUM > Programlama > Diğer (COBOL,asp php js..) > assembly language
Yazar
saskin


avatar

Kayıt: 22.09.2006
10.03.2007-10:40 #17812
assembly.de 32 bitlik bir sayıyı toplama programını yazabılırmısınız






Yazar
burakkanmaz


avatar
Gaziantep
Kayıt: 02.10.2006
10.03.2007-13:25 #17820
Şöyle birşey buldum ama ne kadar işine yarar bilemicem. Toplama da ki taşmayı anlatmış burda. Sonuçta mantık aynı o yzden işine yarar diye düşndm. Bende bir ara yüzeysel öğrenmeliyim şu asm yi d oh

2.1.5.1 Carry Biti
İşlemci tarafından yapılan herhangi bir işlem sırasında alıcı alana yerleştirilen sayının alıcı
alana sığmamasından doğan olaya “carry”(taşma) denir. CPU bir işlem sonucunda taşma ile
karşılaşırsa carry flagın değeri 1 yapılar.
Aşağıda 16-bitlik iki sayı toplanmıştır ve sonuçta bir taşma olmuştur. (Taşan bit kırmızı ile
gösterilmiştir)
1111 1001 0110 1010 􀃆F96A
0010 1010 1111 1001 􀃆2AF9
+----------------------------
1 0010 0100 0110 0011 􀃆2463 CF=1
F96A ile 2AF9’un toplanması sonucu 2463 sayısı elde edilmiştir ki bu iki sayıdan da küçüktür.
Elimizdeki sayılar pozitif olduğuna göre toplama işlemi sonucunda elimizdeki sayılardan daha
küçük bir sayı elde etmemiz imkansızdır. CPU bu durumda carry flagın değerini 1 yaparak 17-
bitlik bir sayı elde eder.
C:WINDOWS>debug
-a100
1E40:0100 MOV AX,F96A
1E40:0103 MOV BX,2AF9
1E40:0106 ADD AX,BX
1E40:0108
-t
AX=F96A BX=0000 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1E40 ES=1E40 SS=1E40 CS=1E40 IP=0103 NV UP EI PL NZ NA PO NC
1E40:0103 BBF92A MOV BX,2AF9
-t
AX=F96A BX=2AF9 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1E40 ES=1E40 SS=1E40 CS=1E40 IP=0106 NV UP EI PL NZ NA PO NC
1E40:0106 01D8 ADD AX,BX
-t
AX=2463 BX=2AF9 CX=0000 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000
DS=1E40 ES=1E40 SS=1E40 CS=1E40 IP=0108 NV UP EI PL NZ AC PE CY
1E40:0108 A394D3 MOV [D394],AX DS394=A2A2

İlk önce “MOV AX,F96A” ile AX register’ının değeri F96A yapılmıştır. Bunu ilk t
komutundan sonra AX=F96A ile görebiliriz (1. t komutundan sonraki bölümde AX’in değerini
inceleyin). Daha sonra “MOV BX,2AF9” ile BX’in değeri 2AF9 yapılmıştır (2. t komutundan
sonraki bölümde BX’in değerini inceleyin). En son “ADD AX,BX” ile bu iki değer toplanıp
AX’e atanmıştır. Son “t” komutundan sonra AX=2463 olmuştur ve en sondaki “NC” ifadesi
“CY”ye dönüşmüştür ki bu da işlemin sonucunda bir taşma olduğunu gösterir.






Yazar
ali


avatar
istanbul
admin
Kayıt: 04.01.2006
10.03.2007-15:27 #17829
bu programı ne tür bir işlemcide yazıcaksın?

yani 16 bitlik bir işlemci için iki kere , 8 bitlik bir işlemci için 4 kere yapmalısın. ama 64 yada 32 bitlik işlemciler için arkadaşın verdiği örnek yeterli olucaktır.

ayrıca 8 ve 16 bitlik işlemcilerden kullanacağın mimarinin de önemli olduğunu unutmamalısın.





free software is a matter of liberty, not price. to understand the concept, you should think of free speech, not free beer.
Del.icio.us
Digg
Facebook
Furl
Google
Blink
Simpy
Spurl
Y! MyWeb