[]

binaryden ascii dönüşüm?

merhaba. aklıma takılan bir soru var. bu konuların üzerinden uzun zaman geçtiğinden hatırlamadığım noktalar olabilir. teorik olarak düşünelim. 8 bit bir işlemcimiz olsun. toplama işlemi yapmak istiyorum. decimal olarak 9 ve 1'i toplayalım. sonuç 10. binary olarak

0000 0001
0000 1001
+----------
0000 1010

sonucunu elde ettim ve registerimda bu veriyi tutuyorum. şimdi bu adımdan sonra ben bu verinin çıktısını ascii olarak basmak istiyorum.

ascii olarak
1 > 011 0001
9 > 011 1001

işte bu kısımda sıkıntı yaşıyorum. decimal olarak 9 ve 1'i topladığımda 10 elde ediyorum ama 10 ekrana iki karakter olarak basılmalı. yani 1 ve 0 olarak yan yana basılması gerekiyor. registerdaki veriyi doğrudan ascii olarak basarsam ":" basıyor. buradaki dönüşümü nasıl yapıyoruz? kaydırma felan mı yapmam gerekiyor? biraz araştırma yapınca karakter rom falan ile karşılaştım. fakat anlayamadım. burada farklı değerler düşünülebilir. mesela decimal olarak 15 registerda 0000 1111 olarak ifade edilirken ekrana basmak için 1 ve 5'i acii olarak yanyana yazdırmam gerekiyor.

1> 011 0001
5> 011 0101

binary 0000 1111'i doğrudan ascii çevirdiğimde ? ile karşılaşıyorum.

buradaki karakter kodlamasına takılmayın örnek olması açısından bunu verdim. anlamak istediğim nokta cpu tarafında aritmetik işlemleri yaparken eldeki bir ekrana bunun çıktısını anlamlı olarak verebilmek. eski bilgisayarlardaki text tabanlı ekranı düşünecek olursak 9'a basıyorum ekranda 9 yazıyor, sonra 1 e basıyorum ekranda 1 yazıyor, ikisini toplama işlemine tabi tutunca ekranda 10 yazıyor. arka planını merak ediyorum. nedir buradaki teknik? umarım anlatabilmişimdir.

 
islemciniz 16 bit, bu yuzden utf-16 kullaniyor,
asecuritysite.com

buradan : ve ? karakterlerine bakarsaniz aslinda dogru cikti aldiginizi gorursunuz. siz UTF-8 ile calisiyor ancak UTF-16 cikti aliyorsunuz.

su tablo da UTF-8
asecuritysite.com

benim de yillar olmus bakmayali, umarim dogrudur yukaridakiler :)


teknik olarak da sizin 1 ve 0 i ayri ayri basmamaniz gerekiyor, yani aslinda siz sistemleri birbirine ceviriyorsunuz. 2li sistemden 10luk sisteme ceviri yapiyorsunuz gibi dusunun. 10 rakamini 1 ve 0 olarak dusunmeyin. siz binary olarak 0000 1010 degerini bastiginizda zaten 10 yazilacak ekrana.
  • ekyil  (17.04.18 17:35:58) 
oradaki dönüşüm işlemini printf komutu yapıyor zaten.

ya da en basiti printf kullanmadan sayı basmak istiyorsan bir şekilde ondalıklarına ayırır ve sayı üstüne 0x40 değeri eklersin. bu ascii tabloda 0 dan 9 a kadar olan değerlere denk gelir.
  • orpheus  (17.04.18 17:51:26) 
"Ekrana basmak" dediğiniz kısımda bir fonksiyon kullanıyor olmalısınız. Eğer direk assembly'de yazıyorsanız printf olabilir mesela. Bu sayının ekrana nasıl yazıldığı tamamen bu fonksiyon ile alakalı durum. C'de de mesela printf'in bir format argümanı vardır, bu argümana verdiğiniz değere göre ekrana yazacağı formatı belirler.

printf("%c", 97) --> "a" çıktısı verir.
printf("%d", 97) --> "97" çıktısı verir.

Yani burdaki teknik, ekrana basma fonksiyonun kendi yapısı ile alakalı. Bildiğim kadarıyla ne assebly'deki nede C'deki printf fonksiyonunda binary olarak çıktı alma opsiyonu yok. Ama şu linkten ikisi için de örnek görebilirsiniz.

stackoverflow.com
  • talasas  (17.04.18 18:01:49) 
cevaplar için teşekkür ederim ama biraz daha low level tarafına takılmıştım. biraz daha araştırınca sorunu çözdüm. uzun zaman olunca hatırlayamamışım. sormak istediğim şey aslında bcd'den ascii'ye dönüşümmüş. verdiğim linklerden tam olarak ne demek istediğimi anlayabilirsiniz.

jjmk.dk

ayrıca şu slaytta section 6.5'i inceleyebilirsiniz.
slideplayer.com
  • estimated time left  (17.04.18 19:07:52) 
ascii kodlarının toplamayla çıkarmayla yada binaryle alakası yok ki.
yaptığın işlemin sonucunda 15 sayısı çıktı ve ascii kodu kabul eden ekrana ya da yazıcıya bunu bastırmak mı istiyorsun ?
gerekli format icinde 1 ve 5 in ascii kodunu yani 49 ve 53 göndereceksin.
tabi bilgisayarlarımız binary digital oldugundan ikili kodda gönderilecek.
  • herhaltibiliyoring  (18.04.18 01:44:49 ~ 01:45:27) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.