Özet: Ondalık bir sayıyı ikili ve onaltılı sayı sistemlerine dönüştüren bir program. Sayı sistemleri, birleştirici etiketleri, sayı dönüştürme Onaltılı sistemden ondalık birleştiriciye dönüştürme

1. Giriş

2. Assembly dili hakkında genel bilgi

3. Yazılım kısmı

· Program Açıklaması

· Montaj programlarının gelişim aşamaları ___

· Ondalık sayıları ikili ve onaltılık sayı sistemlerine dönüştürme programı

4. Referanslar


giriiş

Bilgisayar teknolojisinin işleyişini sağlayan araçlar donanım ve yazılım olmak üzere 2 kısma ayrılır.

Donanım aşağıdaki cihazları içerir:

· merkezi işlemci;

· VERİ DEPOSU;

· çevre birimleri;

Yukarıdaki cihazların tümü entegre devreler (IC'ler) üzerine inşa edilmiştir.

Entegre devre, belirli dönüştürme işlevlerini yerine getiren, elektriksel olarak birbirine bağlı eleman ve bileşenlerden oluşan yüksek bir paketleme yoğunluğuna sahip olan ve kabul ve çalıştırma testi gereksinimleri açısından tek bir bütünü temsil eden mikroelektronik bir üründür.

IC'ye örnek olarak dijital cihaz devreleri verilebilir: yazmaçlar, toplayıcılar, yarı toplayıcılar, sayaçlar, kodlayıcılar, kod çözücüler vb.

Yazılım kısmı şunları içerir: çeşitli sorunları çözmek için bir bilgisayar kullanmanıza olanak tanıyan, ilgili tüm belgelerle birlikte bir dizi program ve kural.

Program, belirli bir sorunu çözmek için bir dizi eylem tanımlayan makine komutlarının veya programlama dili ifadelerinin eksiksiz bir dizisidir.

Çalışmamızdaki görev, üç basamaklı bir ondalık sayıyı ikili ve onaltılık sayı sistemlerine dönüştürmektir. Bu görev montaj dili kullanılarak uygulanır. Bu düşük seviyeli dil, makine talimatları ve adresleri için sembolik (anımsatıcı) gösterimler kullanır. Bu dilin avantajı şudur: birincisi, bu dille yazılan programların önemli ölçüde daha az bellek gerektirmesi; ikincisi, bu dilin bilgisi ve sonuçta ortaya çıkan makine kodu, makinenin mimarisi hakkında bir fikir verir ve bu, üst düzey bir programlama dilinde çalışırken sağlanması pek olası değildir.


Montaj dili hakkında genel bilgi

Sembolik montaj dili, makine dili programlamanın dezavantajlarını büyük ölçüde ortadan kaldırabilir.

Başlıca avantajı, montaj dilinde tüm program öğelerinin sembolik biçimde sunulmasıdır. Sembolik komut adlarının ikili kodlarına dönüştürülmesi sorumluluğundadır. özel program– programcıyı emek yoğun işlerden kurtaran ve kaçınılmaz hataları ortadan kaldıran bir montajcı.

Assembly dilinde programlama yaparken girilen sembolik adlar genellikle programın anlambilimini yansıtır ve komutların kısaltması da ana işlevlerini yansıtır. Örneğin: PARAM – parametre, TABLO – tablo, MASK – maske, ADD – toplama, ALT – çıkarma vb. vb. Bir programcının bu tür adları hatırlaması kolaydır.

Montaj dilinde programlama için, makine dilinde programlamaya göre daha karmaşık araçlara sahip olmak gerekir: bir mikrobilgisayar veya bir dizi PC'ye dayalı bilgisayar sistemlerine ihtiyacınız vardır. çevresel aygıtlar(alfanümerik klavye, karakter ekranı, kayan sürücü ve yazdırma cihazı) ve ayrıca gerekli mikroişlemci türleri için yerleşik veya çapraz programlama sistemleri. Montaj dili, makine diline göre çok daha karmaşık programları (1 - 4 KB'a kadar) etkili bir şekilde yazmanıza ve hata ayıklamanıza olanak tanır.

Montaj dilleri makine odaklıdır, yani makine diline ve ilgili mikroişlemcinin yapısına bağlıdır, çünkü bunlarda her mikroişlemci talimatına belirli bir sembolik ad atanır.

Montaj dilleri, makine dillerine kıyasla programcı verimliliğinde önemli bir artış sağlar ve aynı zamanda mikroişlemcinin yazılım tarafından kullanılabilen tüm donanım kaynaklarını kullanma yeteneğini korur. Bu, yetenekli programcıların yüksek seviyeli bir dilde yazılan programlara göre daha kısa sürede çalışan ve daha az bellek kaplayan programlar yazmasına olanak tanır.

Bu bağlamda, oldukça geniş bir yüksek seviye dil yelpazesinin varlığına rağmen, giriş/çıkış aygıtlarını (sürücüleri) kontrol etmeye yönelik hemen hemen tüm programlar, montaj dilinde yazılmıştır.

Programcı, montaj dilini kullanarak şunları belirtebilir: aşağıdaki parametreler:

her mikroişlemci makine dili komutunun anımsatıcıları (sembolik ad);

montaj dilinde yazılmış bir programın satırları için standart bir format;

farklı adresleme yöntemlerini ve komut seçeneklerini belirlemek için bir format;

karakter ve tamsayı sabitlerini belirtmek için kullanılan format çeşitli sistemler hesap;

bir programın derlenmesi (çevirilmesi) sürecini kontrol eden sözde komutlar.

Assembly dilinde bir program satır satır yazılır yani her komuta bir satır ayrılır.

En yaygın mikroişlemci türlerini temel alan mikrobilgisayarlar için, montaj dilinin birkaç çeşidi olabilir, ancak genellikle bir tanesi pratikte yaygın olarak kullanılır - buna standart montaj dili denir. Aşağıda standart montaj dillerini ele alacağız.

Assembly dilinde yazılan bir programın her satırı dört alan içerir:

ETİKET KODU İŞLENENİ AÇIKLAMA

LABEL alanı isteğe bağlıdır; işaretlenen komutun ilk baytının bulunduğu bellek hücresinin adresini işaretler. Etiketler, kontrol aktarım komutları için geçiş adresleri olarak kullanılır ve varlıkları sayesinde programcı mutlak adreslerle çalışamaz, sembolik adresleri kullanabilir ki bu çok daha uygundur. Etiket bir ila altı karakter uzunluğunda olabilir ve bunlardan ilki bir harf olmalıdır. Birçok montajcı herhangi bir uzunluktaki etiketlere izin verir, ancak yalnızca ilk altı karakter tanınır. Etiket boşluk veya noktalama işareti içermemelidir. Bazı montajcılar, etiketin son karakterinden sonra iki nokta üst üste gelmelidir.

Bir etiket alanında her etiket yalnızca bir kez tanımlanmalıdır ancak ona yapılan referanslar gerektiği kadar kullanılabilir. Aksi takdirde montajcı, çoklu tanımlı etiket hakkında bir teşhis mesajı yayınlayacaktır.

KOD alanı, yürütülecek komutun veya sözde komutun sembolik adını içerir. Çoğu komutun anımsatıcısı, İngilizce'deki ana işlevlerini karakterize eden cümlelerin kısaltmasıdır.

Örneğin:

MOV (HAREKET) - aktarma, ileri

EKLE (EKLEME) - ekleme

ALT (ÖZET) - çıkarma

LDA (DOĞRUDAN YÜKLE

AKÜMÜLATÖR) - doğrudan yükleme

INR (Pil ARTIRIMI

REGISTER) - kayıt artışı

REGISTER) kayıt azalması

Komut anımsatıcıları, birleştirici anahtar sözcükleridir ve geçerli anımsatıcılar kümesine dahil edilmezlerse, birleştirici geçersiz bir komut bildirir.

OPERAND alanı genellikle talimat kodu alanına bağlı olarak tanımlanır. Virgülle ayrılmış bir veya daha fazla işlenen içerebilir veya dahili çalışma yazmaçları üzerinde çalışan talimatlar için işlenenler içermeyebilir.

İşlenen, anımsatıcı gösterimi, sabitleri ve işleçleri içeren bir ifadedir.

En basit işlenenler bir anımsatıcı veya bir sabit içerir.

Dahili çalışma kayıtlarının, etiketlerin ve program sayacının mevcut değerinin tanımlayıcıları anımsatıcı olarak kullanılabilir.

Sabitler farklı sayı sistemlerinde temsil edilebilir.

Yazılım bölümü

Tanım programlar

Bu çalışmamızda Assembly dilini kullanarak bir sayıyı ondalık sayı sisteminden ikili ve onaltılı sayı sistemine dönüştürmenin yollarından birine bakacağız. Bir program oluşturmadan önce bunun için hangi adımların atılması gerektiğini detaylı olarak ele alacağız, yani sorunumuzu çözmek için bir algoritma yazacağız. Bir bilgisayarın verileri işleyebilmesi için bu verileri girmesi gerekiyor, bu da sorunumuzu çözmenin ilk adımının bir sayı girmek olacağı anlamına geliyor. İşin ikinci adımı, girilen numarayla ilgili bir mesajın görüntülenmesi olacaktır. Bundan sonra ondalık sayıyı ikili sisteme dönüştürüyoruz ve sayımızı ikili eşdeğeri olarak ekranda gösteriyoruz. Bir sonraki adım, sayıyı onaltılık eşdeğere dönüştürmektir ve son adım, yeni bir ondalık sayı girmeye devam etmenizi sağlayan bir döngüdür. Şimdi tüm noktaları bir araya getirelim:

1. Klavyeden bir sayı girme.

2. Girilen numarayla ilgili bir mesaj görüntüleyin.

3. Bir sayıyı ikili eşdeğerine dönüştürmek.

4. İkili bir sayı görüntüleyin.

5. Bir sayıyı onaltılı sayıya dönüştürme.

6. Onaltılık sayıyı görüntüleyin.

7. Döngü (devam edelim mi?) EVET ise 1. nokta, değilse 8. nokta

8. Programdan çıkın.

Bu bir doğal dil programının algoritmasıdır.

montajcı programlarının gelişim aşamaları

1. Sorunun beyanı. Problemin anlamlı bir tanımını ve algoritmanın geliştirilmesini içerir.

2. Program metninin geliştirilmesi.

3. Bilgisayara metin girme. Programın anımsatıcı kodlardaki metni, herhangi bir metin düzenleyici kullanılarak bilgisayara girilir. Bu aynı zamanda *.ASM uzantılı bir metin dosyası oluşturur.

4. Derleme veya montaj. Dönüşüm devam ediyor Metin dosyası*.ASM uzantılı makine kodundaki bir programı içeren bir nesne dosyasına *.OBJ uzantılı. Ayrıca bu aşamada bir program listesi oluşturulabilir. Program hakkında temel bilgilerin yanı sıra *.CRF uzantılı bir Çapraz Referans Dosyası içeren *.LST uzantılı bir dosya. Bu aşamada program metninde hatalar olup olmadığı kontrol edilir. Montaj, TASM.EXE çevirmen programı (ASM.EXE - montajcıda, MASM.EXE - makro montajcıda) kullanılarak gerçekleştirilir. TASM [seçenekler] *.ASM [,] - çeviri gerçekleştirme komutu. Komutta bir virgül belirtilirse Listeleme Dosyası Oluşturulur. TASM'nin iki seçeneği vardır: /ZI ve /N. Bunlara denir: TASM.

5. Düzen. Bu aşamada herhangi bir hafıza alanına yüklenebilecek, yeri değiştirilebilen bir program oluşturulur. *.EXE veya *.COM uzantılı bir Dosyaya kaydedildi. Bunu yapmak için TLINK.exe'yi kullanın (makro birleştiricisi LINK.EXE için). Seçenekler /T ve /X'tir.

6. Yürütme ve Hata Ayıklama (DEBUG).

7. Programın makine kodunun ROM'a girilmesi (eksik olabilir) Şimdi programımızın blok diyagramına yani sıralı eylemlere bakacağız.


; ONDALIK BİR SAYIYI DÖNÜŞTÜRMEK İÇİN PROGRAM; İKİLİ VE HEXADECİMAL SİSTEMLER; KÜMÜLASYONLAR

;Veri segmenti

;Dönüşüm tablosu“rakam – ASCII-kod

tabl_ascii db "0123456789abcdef"

;____________________________________________________________________

;Dönüşüm tablosu“ASCII-kod numarası

db 0,1,2,3,4,5,6,7,8,9

db 0ah,0bh, 0ch, 0dh, 0eh, 0fh

;____________________________________________________________________

;Bellekteki değişkenlerin rezervasyonu ve başlatılması

x_ascii db 20h dup(?)

t1 db 0dh,0ah,"Bir sayı girin ve Enter'a basın"

db 0dh, 0ah, "$"

t2 db 0dh,0ah,"Bir sayı girdiniz”,0dh,0ah "$"

t3 db 0dh, 0ah, "İkili dosyada şöyle görünür"

t4 db 0dh, 0ah, "Bu şekilde onaltılı olarak"

db 0dh, 0ah, "$"

buf db 16 dup(?),"$"

t5 db 0dh,0ah, "İşleme devam edelim mi? (E/H)?"

;____________________________________________________________________

; Kod segmenti

;Ana prosedür

D: lea dx, t1

;Ondalık sayı girme prosedürü

;Ondalık sayıyı görüntüleme prosedürü

r1: hareket dl,

; Bir sayıyı (ondalık) ikili sayıya dönüştürme

v1:çok si

;İkili sayıyı görüntüleme prosedürü

; Bir sayıyı (ikili) onaltılı sayıya dönüştürme prosedürü

; ve bunu ekranda göster

Notlar :

Programda kullanılan komutlar aşağıdadır:

alt– ikili çıkarma. İkinci işlenenin içeriğini birinci işlenenden çıkarır

Anımsatıcılar:alt< işlenen 1>,< işlenen 2>

Arama– prosedür çağrısı. Kontrolü, adresi işlenen tarafından belirtilen bir prosedüre aktarır; prosedür tamamlandıktan sonra yürütme, çağrı komutunu takip eden komutla devam eder;

Anımsatıcılar: Arama< prosedür adı>

geri– prosedüre geri dön

shr– mantıksal olarak sağa doğru hareket edin

xor- özel veya

Anımsatıcılar:xor<операнд 1>,<операнд 2>

Lea– EA'yı indirin

Anımsatıcılar:lea reg,<операнд>

itmek– yığına dahil et

Anımsatıcılar: itmek< işlenen>

pop– yığından al

Anımsatıcılar: pop<операнд>

hareket- ileri

Anımsatıcılar:hareket< alıcı>,<источник>

dahil– 1 artış

Anımsatıcılar:dahil<операнд>

aralık– 1 oranında azalt

Anımsatıcılar: Aralık< işlenen>

stosb– bağlantıları di yazmacı tarafından işaret edilen al veya ax kaydına iletir

döngü– bir sayaçla bir döngü düzenleme komutu, ayrıca kısa geçişler (127b) komut herhangi bir bayrağı değiştirmeden cx sayacının değerini azaltır, eğer bağlantı cx > 0 ise, verilen etikete geçiş gerçekleştirilir, aksi takdirde döngü sona erer.

Anımsatıcılar: döngü< etiket>

.KOD– bir kod segmenti açar

. VERİ-- bir veri segmenti açar

.YIĞIN N– segment yığınını(a) tanımlar; Bu durumda segment kapatma direktifleri kullanılmaz; N - yığının (a) boyutunu bayt cinsinden gösterir

Not : Bu tür direktifleri kullanırken ds kaydı aşağıdaki gibi başlatılır: hareket baltası,@veri

mov ds, balta

bu durumda kullanılmadığını varsayalım

Kaynakça

1. "IBM PC ve programlama için montaj diliyim" Higher School 1992.

2. “IBM Kişisel Bilgisayar ve MS-DOS İşletim Sistemi” Radyo ve İletişim 1991.

3. Ilyushechkin V.N., Kostin A.E., Khokhlov M.M. “Sistem yazılımı”, M., “Yüksekokul”, 1987

4. Norton P., Souhe D. “IBM PC için montaj dili”, M., Yayınevi “Bilgisayar”, 1993

Bu makale çoğunlukla yeni başlayanlar içindir. Sayı sistemleri konusunda bilginiz varsa, yalnızca makalenin sonunda FASM assembler'ın sözdizimi özelliklerine dikkat edebilirsiniz.

Aslında işlemci yalnızca birler ve sıfırlardan oluşan ikili sayılarla çalışır :) Herhangi bir programın tüm verileri ve komutları ikili sayılar biçiminde saklanır ve işlenir. Bununla birlikte, sayıların ikili gösterimi insanlar için çok hantal ve elverişsiz olduğundan, montaj dili programları diğer sayı sistemlerini de kullanır: ondalık, onaltılı ve sekizli.

Küçük bir teori

Öncelikle sayı sistemleri arasındaki farkın ne olduğunu bulalım. Herhangi bir ondalık sayı aşağıdaki gibi temsil edilebilir:

123 10 = 1 10 2 + 2 10 1 + 3 10 0

Aşağıdaki alt simge bunun ondalık bir sayı olduğunu gösterir. Sağdan sola doğru sıfırdan sayıldığında her rakamın rakamı, rakam numarasının üssüne eşit olacak şekilde 10 ile çarpılır. Daha genel olarak:

ABC R= bir R 2 + b R 1 + c R 0 ,

burada a, b ve c bazı sayılardır ve r sayı sisteminin tabanıdır. Ondalık sistem için R= 10, ikili için - R= 2, üçlü için R= 3 vb. Örneğin diğer sistemlerde aynı numara:

443 5 = 4 5 2 + 4 5 1 + 3 5 0 = 4 25 + 4 5 + 3 1 = 123 10 (beşli sistem)

173 8 = 1 8 2 + 7 8 1 + 3 8 0 = 1 64 + 7 8 + 3 1 = 123 10 (sekizli sistem)

1111011 2 = 1·2 6 + 1·2 5 + 1·2 4 + 1·2 3 + 0·2 2 + 1·2 1 + 1·2 0 = 1·64 + 1·32 + 1·16 + 1 8 + 0 4 + 1 2 + 1 1 = 123 10 (ikili)

Onaltılı sistem

Onaltılı sistemde 9'dan büyük sayıları belirtmek için A = 10, B = 11, C = 12, D = 13, E = 14, F = 15 harfleri kullanılır. Örneğin:

C7 16 = 12 16 1 + 7 16 0 = 12 16 + 7 1 = 199 10

Onaltılık sistemin rahatlığı, ikili sayıları ona (ve ters yönde de) dönüştürmenin çok kolay olmasıdır. İkili bir sayının (tetrad) dört basamağı, onaltılık sayının bir basamağıyla temsil edilir. Çevirmek için, sayıyı 4 bitlik gruplara ayırmanız ve her tetrad'ı karşılık gelen onaltılık rakamla değiştirmeniz yeterlidir.

İkili
dörtlü
Onaltılık
sayı
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 e
1111 F

Bir bayt yazmak için yalnızca 2 onaltılık basamak gereklidir:

0101 1011 2 = 5B 16

0110 0000 2 = 60 16

1111 1111 2 = FF 16

Sekizli sistem

Sekizli sayı, onaltılı sayıya göre çok daha az kullanılmasına rağmen, ikili sayıları temsil etmek için de kullanışlıdır. Hızlı bir şekilde tercüme etmek için ikili sayıyı 3 basamaklı gruplara (üçlü veya üçlü) bölmeniz gerekir.

İkili
üçlü
Sekizli
sayı
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

Örneğin: 001 110 101 2 = 165 8

FASM birleştirici sözdizimi

Varsayılan olarak programdaki sayı, montajcı tarafından ondalık sayı olarak algılanır. İkili bir sayıyı belirtmek için sonuna bir sembol eklemeniz gerekir. 'B'. Sembol kullanılarak benzer şekilde sekizlik bir sayı gösterilir 'Ö'. Onaltılı sayı yazmak için FASM 3 gösterim formunu destekler:

  • semboller sayıdan önce yazılır '0x'(C/C++'da olduğu gibi);
  • sayıdan önce bir sembol yazılır ’$’ (Pascal'da olduğu gibi);
  • sayıdan sonra bir sembol yazılır 'H'. Onaltılık sayı bir harfle başlıyorsa, başına bir sıfır eklemelisiniz (aksi takdirde bunun sayı mı yoksa etiket adı mı olduğu açık değildir).

Bu sözdizimi hem veri bildirimlerinde hem de komutlarda kullanılır. İşte dört sistemin tamamında sayı yazma örnekleri:

hareket baltası, 537 ;Ondalık sistem movbl, 11010001b ;İkili sistem hareket ch, 57o ;Sekizli sistem mov dl, $ C2 ;\mov si, 0x013A; \hareket ah, 18h ; / Onaltılı sistem hareket, 0FFh ;/ hareket, FFh ;Hata!

mov ax,537 ;Ondalık sistem mov bl,11010001b ;İkili sistem mov ch,57o ;Sekizli sistem mov dl,$C2 ;\ mov si,0x013A ; \mov ah,18h; / Onaltılı sistem mov al,0FFh ;/ mov al,FFh ;Hata!


İkili, sekizli, ondalık ve onaltılık sayı sistemleri konumsaldır. Konumsal sayı sistemi, bir basamağın değerinin sayı içindeki konumuna bağlı olduğu sistemdir; basamakların sayıdaki konumlarına sıra veya basamak adı verilir. Esas, baz, temel konumlandırma Sistemi Gösterim, ulaşıldığında sayının bir sonraki sırasının doldurulduğu sayıdır. Aksi halde bir sayı sisteminin tabanı, bu sistemde sayıların yazıldığı sıfır dahil basamak sayısına eşittir.

Birleştirici, sayıların ikili, sekizli, ondalık veya onaltılı olarak kullanılmasına izin verir. Varsayılan olarak, birleştirici programda görünen tüm sayıları ondalık sayı olarak ele alır. Etiketleri kullanarak bir sayının tabanını açıkça belirtebilirsiniz (MASM32 sürüm 11 için): b veya y - ikili sayılar için; o veya q - sekizlik için; d veya t - ondalık sayılar için; h - onaltılık sayılar için. Etiket numaranın sonuna numarayla birlikte yazılır. Bir sayıda alfabetik karakterler (onaltılık sayılar) kullanılıyorsa, başında sıfır yazılır - montaj kurallarına göre sayı tanımlamaları bir sayıyla başlamalıdır. Örneğin:

.data var1 bayt 00001111b ; 15v ikili gösterim var2 bayt 00001111y; İkili gösterimde 15 var3 bayt 17o; sekizlik gösterimde 15 var4 byte 17q ; sekizlik gösterimde 15 var5 byte 15d ; Ondalık gösterimde 15 var6 byte 15t ; Ondalık gösterimde 15 var7 byte 0Fh ; Onaltılı sistemde 15

Programda kullanılan sayı türlerini yönergeler kısmından aşağıdaki gibi talimatlarla ayarlayabilirsiniz.

.RADIX (taban)

burada sayı tabanı ondalık sayı olarak gösterilir. Örneğin, talimatlara göre

.RADIX 16

İkili ve ondalık sayılar için iki etiket seçeneğinin bulunması uyumluluk nedenlerinden kaynaklanmaktadır önceki versiyonlar Hexadecimal formatta sayı yazma özelliği bulunmayan MASM32, daha sonraki sürümlerle birlikte kullanıma sunuldu. Onaltılı sayılar için Arap rakamları yeterli değildir, bu nedenle sayı serisine harfler eklenir:

0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

MASM32'nin önceki sürümlerindeki etiketlerin (b ve d) onaltılık rakamlarla aynı olduğunu görmek kolaydır, bu da bunların .RADIX 16 yönergesiyle kullanılmasını imkansız hale getirir. O etiketi, ilkinin sıfıra benzerliğinden dolayı q etiketi ile kopyalanır. Bu nedenlerden dolayı tercih edilen etiketler y, q, t'dir.

Bilgisayarda tüm sayılar sıfır ve birlerden oluşan diziler halinde saklanır. Program metnine bir sayı yazdığımızda, bunun makine tarafından okunabilir bir gösterime çevirisi çevirici tarafından gerçekleştirilir ve bu sayı, çalıştırılabilir dosyaya uygun (ikili) biçimde yazılacaktır. Ancak programdaki bir sayının çıktısını kullanıcının zaten anlayabileceği bir formatta kendimiz düzenlemeliyiz; bu, kullanıcıya bir sayı göstermemiz gerekiyorsa programda aşağıdakileri yapmamız gerektiği anlamına gelir: a) dönüştür ikili sistemden ondalık sisteme kadar olan sayı - makine gösteriminden insan gösterimine; b) ortaya çıkan ondalık sayıyı sembolüyle, yani karşılık gelen resimle değiştirin, çünkü monitörde sayılar değil resimler görüntülenir.

Bir makine numarasının belirli bir sayı sistemine çevrilmesi, bu sayının ve ortaya çıkan sonucun istenilen sayı sisteminin tabanına sıralı olarak bölünmesiyle gerçekleştirilir. Bölmenin geri kalanı en az anlamlı basamağa girilir, bölüm tekrar sayı sisteminin tabanına bölünür, geri kalanı bir sonraki basamağa girilir - ve bölüm sıfıra ulaşana kadar bu şekilde devam eder. Diyelim ki 250 ondalık sayısını onaltılı sayıya dönüştürmek istiyorsunuz:
250 / 16 = 15 , kalan = A(10),
15 / 16 = 0, kalan = F(15),
dolayısıyla 250 (ondalık) = FA (onaltılık).

Bir bayta yazılabilecek maksimum sayı 255'tir. Program sonuçlarına göre bir baytlık değişkenden ondalık formatta bir sayı görüntülenmesi gerekiyorsa bu sayı en fazla 10'a bölünmelidir. üç kez - 255'te üç ondalık sırada. İÇİNDE tip değişkenleri kelime (iki bayt) maksimum değer 65.535'tir, double word (dört bayt) türündeki değişkenlerde - 4.294.967.295. Buna göre, ondalık formata dönüştürmek için kelime sayıları en fazla beş kez 10'a bölünür, çift kelime - en fazla on. zamanlar .

Karakter kodları şunlardır: "0" - 48; "1" - 49; "2" - 50; "3" - 51; "4" - 52; "5" - 53; "6" - 54; "7" - 55; "8" - 56; "9" - 57. Açıkçası bir sayının değerini sembolik forma dönüştürmek için ona 48 eklemek yeterlidir.

Bir bayt değişkenini ondalık sembolik biçime dönüştüren bir program parçası:

.data bölücü bayt 10; bölen buffer_dec bayt 3 dup (?) parametre bayt 255 ... .code start: ... ; parametre baytının değerlerini ondalık sembolik biçimde mov AH, 0 olarak alın; AH mov AL'yi sıfırla, parametre; bayt değişkenini AL DIV bölücüye kopyalayın; AX'i 10 mov buffer_dec, AH'ye bölün; bölümün geri kalanını buffer_dec mov AH, 0 içine kopyalayın; AH DIV bölücüyü sıfırlayın; AX'i 10 mov buffer_dec, AH'ye bölün; bölümün geri kalanını buffer_dec mov buffer_dec, AL içine kopyalayın; bölümü buffer_dec ADD buffer_dec, 48'e kopyalayın; 48 ekle - "2" sayı sembolünü elde ederiz ADD buffer_dec, 48 ; 48 ekle - "5" sayı sembolünü elde ederiz ADD buffer_dec, 48 ; 48 ekleyin - "5" sayı sembolünü elde ederiz

Yorum ekle

1. Temel sayı sistemleri. Çeviricideki veri bildirimleri

Çalışmanın amacı: öğrencileri sayı sistemlerine alıştırmak - ikili, sekizli, onaltılı; Verilerin bilgisayar belleğinde gösterimi, bellek tahsis direktifleri.

Teorik kısım

Bilgisayarda saklanabilen en küçük bilgi birimi biraz (eng. biraz - bi nary dijital T ), yani. 0 veya 1. Bir bit, bir bilgi atomudur; bölünemez. Bitler bir bayt oluşturacak şekilde 8'li gruplar halinde gruplandırılır. Bilgisayar tarafından işlenen bilgi bir ikili sayı dizisidir. 8 bitten 256 kombinasyon oluşturulabilmektedir. Bu kombinasyonlar büyük ve küçük harfleri, sayıları ve özel karakterleri kodlamak için kullanılır.

Bir bilgisayardaki bilgileri ölçmek için aşağıdaki miktarlar kullanılır:

1 Kilobayt = 1 KB = 2 10 bayt = 1024 bayt;

1 Megabayt = 1 MB = 2 20 bayt = 1024 KB;

1 Gigabayt = 1 GB = 2 30 bayt = 1024 MB.

Sayı sistemleri

Sayı sistemi, sayıları temsil etmeye yönelik bir dizi kural ve sayıdır. Herhangi bir konumsal sayı sistemi için, temsil edilecek basamak sayısı sayı sisteminin tabanına eşittir; örneğin ikili sistem için taban 2 sayısıdır, bu nedenle sayıları temsil etmek için iki basamak 0 ve 1'dir. gerekli, onaltılık sayı sistemi için 0, 1, 2, ..., 9 , A, B, C, D, E, F, burada harfler 10, 11, 12, 13 değerlerine karşılık gelir, Sırasıyla 14 ve 15.

Sayı sistemlerini ayırt etmek için sayının sonuna bir harf yerleştirilir: ikili sistem için B, sekizli sistem için Q, ondalık sistem için D ve onaltılı sistem için H. Ondalık sayı için D gerekli değildir.

Bir sayı b-ary sayı sisteminde şu şekilde yazılırsa

Nr(b) = C n C n-1 C n-2 … C 2 C 1 C 0 , D 1 D 2 D 3 … ,

daha sonra ondalık sayı sisteminde değeri, sayı sisteminin tabanıyla çarpılan basamakların toplamı, sayıdaki basamağın konum numarasına eşit bir güçle temsil edilebilir (numaralandırma 0'dan sağdan sola başlar):

Nr(10) = C n *b n +C n-1 *b n-1 +…+C 2 *b 2 +C 1 *b 1 +C 0 *b 0 +D 1 *b -1 +D 2 * b –2 +D 3 *b –3 +...

Örneğin:

11b, 1100011b şeklinde iki ikili sayı verilsin. Bu sayıları ondalık sayı sistemine çevirelim:

11b =1*2 1 +1*2 0 =3;

11100011b = 1*2 7 +1*2 6 +1*2 5 +0*2 4 +0*2 3 +0*2 2 +1*2 1 +1*2 0 = 227.

Sekizli bir sayıyı ondalık sayı sistemine dönüştürme örneklerine bakalım:

11q = 1*8 1 +1*8 0 = 9;

210q =2*8 2 +1*8 1 +0*8 0 =136.

Onaltılı sayıları ondalık sayıya dönüştürme örneği:

11 sa = 1*16 1 +1*16 0 =17;

CA0h= C*16 2 +A*16 1 +0*16 0 = 3232

Sayıları ondalık sistemden ikili veya onaltılı sisteme dönüştürmek için tamsayı bölümü kullanılır. Sayı, bölünemez bir kalan elde edilene kadar sayı sisteminin tabanına bölünür. Bölme işleminden elde edilen bölüm tekrar bölünür ve bölüm de bölünemez hale gelince işlem sona erer. Bölme işleminde elde edilen kalanlar tersten yazılır. Diyagram, 25 sayısının ikili sayı sistemine dönüştürülmesini ve bunun sonucunda 11001b sayısını elde ettiğimizi ve ayrıca 418 sayısının onaltılık sayı sistemine dönüştürülmesini ve bunun sonucunda sayıyı elde etmemizi göstermektedir. 1A2h, on sayısının A olduğu göz önüne alındığında.

Sayıları onaltılık sistemden ikili sisteme (veya tam tersi) dönüştürmek için aşağıdaki gerçek kullanılır: tabloda sunulduğu gibi her onaltılık basamak dört bitlik bir ikili sayıya karşılık gelir ve bunun tersi de geçerlidir. Bu nedenle, onaltılık sistemden ikili sisteme dönüştürürken, her onaltılık basamak için ikili kodunu yazmanız gerekir ve geri dönüştürürken ikili sayı sağdan sola dört basamaklı gruplara bölünür ve onaltılık yazışma onlar için yazılmıştır.

Onaltılık basamaklar ve ikili sayılar arasındaki yazışma tablosu.

Örneğin, 1FDh sayısını ikili gösterime dönüştürelim:

1FDh = 0001-1111-1101b = 111111101b

1110100101b ikili sayısını onaltılık gösterime dönüştürelim: 0011-1010-0101b = 3A5.

Tam sayıların bilgisayar belleğinde gösterimi

İkili sayı sistemi, bilgisayardaki bilgileri temsil etmek için kullanılır. Tam sayıları depolamak için kesin olarak sabit sayıda bit kullanılır: 8, 16, 32, 64. N ikili konumda -2 n-1 ila 2 n-1 -1 aralığında işaretli bir tam sayı yazabilirsiniz. Pozisyonlar sağdan sola 0'dan n-1'e kadar numaralandırılır. Örneğin, sekiz ikili konumdaki 67 sayısı 01000011b olarak temsil edilecektir. İşaretsiz sayılar 0 ila 2 n -1 aralığında temsil edilebilir.

Bir tam sayı, ikinin tümleyeni veya ikinin tümleyeni biçiminde saklanabilir. Bir sayının işaretini temsil etmek için işaret biti adı verilen bir bit kullanılır. N-1 pozisyonundadır ve sayının en anlamlı bitidir. Pozitif sayılar için bu bit sıfırdır, negatif sayılar için ise birdir.

Doğrudan kod Pozitif veya işaretsiz sayıları saklamak için kullanılır.

Ek kod Negatif sayıları saklamak için kullanılır. Bir sayının tamamlayıcı koddaki gösterimini elde etmek için önce sayının modülünün doğrudan kodu, sonra da ters kodu bulunur. Ters kod, sayının ikili gösterimindeki her rakamın ters çevrilmesiyle elde edilir: 0, 1'e, 1 ise 0'a dönüştürülür. Son adımda ters koda 1 eklenir.

Örneğin -65 sayısını temsil etmek için elimizde:

01000001b direkt numara kodu +65

10111110b dönüş kodu

10111111b ek numara kodu -65

İkinin tamamlayıcısı kodu, tam sayıların çıkarılması işlemini, ikinin tamamlayıcısı kodunda temsil edilen sayıyla bir toplama işlemiyle değiştirmek için kullanılır. Bu durumda işlemcinin tamsayılarda çıkarma işlemi yapmasına gerek yoktur.

Veri tipleri

BAYT. Bu veri tipi 1 byte (8 bit) yer kaplar. Bu türü kullanarak, -128 ila +127 aralığındaki işaretli bir tam sayıyı veya 0 ila 255 aralığındaki işaretsiz bir tam sayıyı, aynı zamanda bir tam sayı olarak kodlanan herhangi bir ASCII karakterini şifreleyebilirsiniz. Tanım Direktifi – D.B.(Baytı tanımlayın).

KELİME. Bu veri türü 2 bayt (16 bit) yer kaplar. Bir değişkene bu türden-32768 ila +32767 veya 0 ila 65535 aralığında bir tam sayı, iki ASCII karakteri veya near türünde göreceli bir bellek adresi yerleştirebilirsiniz. Bu durumda belleğe yazma şu şekilde yapılır: Sayının düşük kısmı düşük adreste, yüksek kısmı ise yüksek adreste bulunur. Bu durum diğer veri türleri için de geçerlidir. Örneğin, eğer 1234h onaltılık tamsayı numarası 1000h adresinde bulunuyorsa, düşük dereceli kısım 34h 1000h adresinde ve 12h ise 1001h adresinde yer alacaktır. Tanım Direktifi – DW(Kelimeyi tanımlayın).

DWORD– 4 bayt (2 kelime), 32 bitlik işaretli veya işaretsiz bir tamsayıyı, kayan noktalı bir sayıyı, 32 bitlik bir bellek adresini veya 4 ASCII karakterini tutabilir. Bir adresi kaydederken, segment adresi belleğin yüksek iki baytında, ofset ise düşük iki baytında bulunur. Tanım Direktifi – GG(Çift kelimeyi tanımlayın).

QWORD– 8 bayt. İşaretli veya işaretsiz bir tam sayı, bir sayı veya çift duyarlıklı kayan noktalı sayı olabilir. Tanım Direktifi – DQ(Dörtlü tanımlayın).

TEN-BYTES– 10 bayt. Verileri ana bellekte veya yardımcı işlemcide saklamak için kullanılır. Paketlenmiş bir BCD numarası, genişletilmiş bir tam sayı veya genişletilmiş bir kayan noktalı sayı olabilir. Tanım Direktifi - D.T.(On baytı tanımlayın).

Verileri tanımlamak için genel sözdizimi şöyledir:

< İsim> < tip> < listedeğerler>

< İsim> < tip> < sayı> dup (ifade),

Nerede İsim– tanımlayıcı, tip– yukarıda tartışılan hafıza tahsis direktiflerinden biri, Değerler listesi– karakter veya sayısal sabitler içerebilen bir liste. Ayrıca şu sembolü de içerebilir: ? , değer tanımsızsa veya adres - bir değişken adı veya etiketi, tırnak veya kesme işareti içine alınmış bir ASCII karakter dizisi. Direktif dup belirtilen ifadeyle tanımlanan değerlerin tekrarını belirtir <число> bir kere. İfade bir sabit, sabitler, aritmetik operatörler, değerler listesi veya bir sembol olabilir ? değer tanımlanmamışsa.

Örneğin,

var_a db 2 dup (0, 3 dup (1)) ; var_a db 0,1,1,1,0,1,1,1'e eşdeğer var_b db 1, 2, 3, ?, ? adr_a dw var_a adr_b3 dd var_b+3

Aşağıdaki değişkenlerin her biri için ayrılan belleğin boyutunu belirleyelim:

m1 db 4, 5, 1, 6; 4*1=4 bayt m2 db “xzyqw” ; 5*1=5 bayt m3 dw 12 dup(?) ; 12*2=24 bayt m4 dd 345h , 234h ; 2*4=8 bayt

m1 db 4, 5, 1, 6; 4*1=4 bayt m2 db “xzyqw” ; 5*1=5 bayt m3 dw 12 dup(?) ; 12*2=24 bayt m4 dd 345h, 234h ; 2*4=8 bayt

Bu direktifler tarafından ayrılan toplam bayt sayısı 41 bayttır. m1 değişkeni 00h, m2 – 04h, m3 – 09h ve m4 – 021h göreceli adreslerinde bulunur.

Bireysel görevler:

1. İkili, onaltılı sisteme dönüştürün ve sekizli sistem ondalık sayılar:

1)42;31;113 5 )46;35;119 9 ) 49;30;103 13 )29;37;97
2 )45;81;89 6)66;25;110 10 )19;53;101 14 )21;87;98
3 )12;38;118 7 )17;63; 96 11)34;50;107 1 5) 28;45;130
4 )11;43;67 8 )13;69;88 1 2 )14;70;99 16)15;72;100

2. Onaltılı sayıları ikiliye dönüştürün:

1)A45;12;56B 5)7C;72EB;31DB 9)34A;6AB;9AD 13)2B9;6F1;81B
2)1EF3;5AB;46F 6)3EB;4D8;A61 10)5AB;79F;AB8 14)7CD;2A1;B53
3)A56;5E9;CDE 7)6A3;9D0;8BE 11)9A;4DE;EF7 15)10B;87F;CD9
4)3B8;DE1;BAE 8)BC;7F9;78A 12)AB;8E4;C17 16)38E;9C7;B89

3. İkili sayıları sekizlik ve onaltılık sayı sistemlerine dönüştürün:

1) 00101011; 00100110;
01110011
5 ) 11110010; 01101010;
11111100;
9 ) 10000101; 11100010;
11001011
13 ) 00011101; 11111001;
00111101
2 ) 01100001; 01101110;
11110011
6) 00110110; 00111011;
10001100
10 ) 00011101; 01010110;
10110010
14 ) 00011100; 01001100;
01101110
3) 11100100; 01011100; 11000001 7 ) 11010010; 01001100; 11000111 11) 11100010; 10100001; 10001110 1 5 ) 10101001; 11010101; 111001100
4 ) 00001111; 10100101; 10010001 8 ) 11100000 11111000; 01000011 1 2 ) 10100101; 01101100; 11100001 16) 11100111; 01100101; 10110010;

4. Aşağıdaki sayıları tamamlayıcı kodla sunun:

1)-42;-31;-96 5)-46;-35;-94 9) -49;-30;-103 13)-29;-37;-97
2)-52;-41;-93 6)-66;-25;-85 10)-19;-53 ; -101 14)-21;-87;-98
3)-12;-38;-93 7)-17;-63;-99 11)-34;-50;-94 15)-28;-45;-95
4)-11;-43;-67 8)-13;-69;-88 12)-14;-70;-99 16)-15;-72;-89

5. Danimarkalılar aşağıdaki tanımlar değişkenler:

1) bir db 45,16,76,-6
Bveritabanı "abcd"
Cdw 15 dup(0),3,3
gün gg 345 saat
2) 2,24 ekle
b db “aaa”,-8.23h,11101b
c db 6 dup(0), 45, 6
d dw -7.4Dh.8 dup(0)
3) a db “Selam”,10,13
b db -16,-20,13h,2 dup(0)
c dw 62.34,-15
d dd 456C9h,4567
4) dd 92.45h,90,-54,-67
b db 10 dup('$'),10.13
c db “amdto”,10,13,'$'
d dw 5 dup(?),7,-80h
5) a db “lucrarea_1”,10,13
b db 2 dup(0)
c dw 38,-15,78,41,12
d dd 678EFh,3489,456
6) bir db 12.24”sss”
b db “ab”,-8.23h
c dd 6 dup(0),45
d dw -7,5 dup(0)
7) bir db 35.53
b db 10 dup(' '),10,13,"$"
c dw 5 dup(0)
gün gg 555 saat
8) bir db 34,6,3,-8,-2
b db “Merhaba”, ‘$’
c dw 6 dup(0),'$',10,13
d dw -68,46h,7 dup(0)
9) bir db 45.16
b db 5 dup(?),10,13,“$”
c dw 55 dup(0)
g dd 34567h
10) bir db 76,87,92,45h
b db 20 dup('$'),10.13
c db “qwert”
d dw 10 dup(0)
11) 78,34,67 ekle
b db “Sonuç”,‘$’
c db 16 dup(0),'$',10,13
12) bir db 73,74,75,77,78,-67
b db 15 dup('?'),10,13
Cgg 777h
13) bir db 24.76,-56
b db “abc”,11101b
c dd 45.4 dup(?)
d dw 4 dup(0),8,3
14) a db “testul_nr_2”,13,10
b db -18,-22,18h,2 dup(0)
c dw 81,-16,44,18
d dd 568ABh
15) 87.45 saat ekle,-9
b db 10 dup(?)
c db “test_1$”
d dw 4 dup(0),2.7
16) bir db “Matematica”,10,13
b db 10,20 saat,2 dup(0)
c dw 60,30,-10,-20,-50
g dd 56789Bh

a) bu direktifler tarafından kaç bayt tahsis edildiğini belirlemek;
b) değişkenlerin her birinin bulunduğu adresleri belirleyin.