Програма за превод на бройни системи в асемблер. Анотация: Програмата за преобразуване на десетично число в двоична и шестнадесетична бройна система. Обща информация за асемблерния език

Шестнадесетична бройна система(също шестнадесетичен код) е позиционна бройна система с целочислена основа 16. Понякога в литературата се използва и терминът шестнадесетичен (произнася се „шестнадесетичен“, съкратено от английски шестнадесетичен). Числата на тази бройна система са широко използвани арабски цифри 0-9, както и първите знаци от латинската азбука A-F. Буквите съответстват на следните десетични стойности:

  • * A -10;
  • *Б-11;
  • *С-12;
  • *D-13;
  • * Е - 14;
  • * F - 15.

Така десет арабски цифри, заедно с шест латински букви, съставят шестнадесетте цифри на системата.

Между другото, на нашия уебсайт можете да конвертирате всеки текст в десетичен, шестнадесетичен, двоичен код с помощта на онлайн калкулатора на кодове.

Приложение. Шестнадесетичен кодшироко използван в програмирането на ниско ниво, както и в различни компютърни справочни документи. Популярността на системата се оправдава от архитектурните решения на съвременните компютри: те имат байт (състоящ се от осем бита) като минимална единица информация - и е удобно да се напише стойността на байт с помощта на две шестнадесетични цифри. Стойността на байта може да варира от #00 до #FF (0 до 255 в десетичен запис) - с други думи, използвайки шестнадесетичен код, можете да запишете всяко състояние на байта, докато няма "допълнителни" цифри, които не са използвани в записа.

Кодиран Unicodeчетири шестнадесетични цифри се използват за представяне на номера на знака. Цветовата нотация RGB (червено, зелено, синьо) също често използва шестнадесетичен код (например #FF0000 е яркочервена нотация).

Начин за писане на шестнадесетичен код.

Математически начин на писане. В математическата нотация основата на системата се записва в десетична форма в долен индекс отдясно на числото. Десетичната нотация за числото 3032 може да се запише като 3032 10 , в шестнадесетична система това число ще бъде записано като BD8 16 .

В синтаксиса на езиците за програмиране. Синтаксисът на различните езици за програмиране задава формата за използване на запис на число шестнадесетичен код:

* В синтаксиса на някои разновидности на асемблерния език се използва латинската буква "h", която се поставя вдясно от числото, например: 20Dh. Ако числото започва с латинска буква, то се предхожда от нула, например: 0A0Bh. Това се прави, за да се разграничат стойностите от използването на константи шестнадесетичен код;

* Други разновидности на асемблер, както и Pascal (и неговите разновидности като Delphi) и някои основни диалекти, използват префикса "$": $A15;

* В езика за маркиране HTML, както и в каскадните CSS файлове, за указване на цвят в RGB формат с шестнадесетичен запис се използва префиксът "#": #00DC00.

Как да преведете шестнадесетичен код в друга система?

Преобразуване от шестнадесетичен в десетичен.За да се извърши операция за преобразуване от шестнадесетична система в десетична, е необходимо да се представи оригиналното число като сума от произведенията на цифрите в цифрите на шестнадесетичното число по степента на основата.

Двоичен SS

шестнадесетичен ss

Например, трябва да преведете шестнадесетичното число A14: то има три цифри. Използвайки правилото, ние го записваме като сбор от степени с основа 16:

A14 16 = 10,16 2 + 1,16 1 + 4,16 0 = 10,256 + 1,16 + 4,1 = 2560 + 16 + 4 = 2580 10

Преобразуване на числа от двоични в шестнадесетични и обратно.

За превод се използва таблица с тетрадки. За да преобразувате число от двоично в десетично, е необходимо да го разделите на отделни тетради отдясно наляво и след това, като използвате таблицата, заменете всяка тетрада със съответната шестнадесетична цифра. В този случай, ако броят на цифрите не е кратен на четири, тогава е необходимо да добавите съответния брой нули отдясно на числото, така че общият брой на двоичните цифри да стане кратен на четири.

Таблица с тетрадки за превод.

За да конвертирате от шестнадесетичен в двоичен, трябва да извършите обратната операция: заменете всяка цифра с тетрада от таблицата.

Двоичен SS

Осмичен SS

Пример преобразуване от шестнадесетичен в двоичен: A5E 16 = 1010 0101 1110 = 101001011110 2

Пример преобразуване от двоично в шестнадесетично: 111100111 2 = 0001 1110 0111 = 1E7 16

В този пример броят на цифрите в оригиналното двоично число не беше четири (9), така че бяха добавени нули в края, за да се доведе общият брой цифри до 12.

Автоматичен превод. Бързо преобразуване от шестнадесетична в една от трите популярни системи (двоична, осмична и десетична), както и обратен превод, могат да бъдат извършени с помощта на стандартен калкулатор, доставен с Windows. Отворете калкулатора, изберете Изглед -> Програмист от менюто. В този режим можете да зададете използваната в момента бройна система (вижте менюто вляво: Hex, Dec, Oct, Bin). В този случай промяната на текущата бройна система автоматично се превежда.

1. Въведение

2. Обща информация за асемблерния език

3. Софтуерна част

· Описание на програмата

Етапи на разработване на асемблиращи програми ___

Програма за преобразуване на десетични числа в двоични и шестнадесетични бройни системи

4. Препратки


Въведение

Средствата, които осигуряват функционирането на компютърната техника, се разделят на 2 части: хардуер и софтуер.

Хардуерът включва следните устройства:

централния процесор;

· RAM;

· периферни устройства;

Всички горепосочени устройства са изградени върху интегрални схеми (IC).

Интегралната схема е микроелектронен продукт, който изпълнява определени функции на преобразуване, има висока плътност на опаковане на електрически взаимосвързани елементи и компоненти и представлява едно цяло по отношение на изискванията за приемане и изпитване на работа.

Пример за ИС са схеми на цифрови устройства: регистри, суматори, полусуматори, броячи, енкодери, декодери и др.

Софтуерната част включва: набор от програми и правила с цялата документация, свързана с тях, което позволява използването на компютър за решаване на различни проблеми.

Програмата е пълна последователност от машинни инструкции или оператори на език за програмиране, която дефинира последователност от действия за решаване на определен проблем.

Задачата в нашата работа е: преобразуване на трицифрено десетично число в двоична и шестнадесетична бройна система. Тази задача се изпълнява с помощта на асемблер. Този език от ниско ниво използва символна (мнемонична) нотация за машинни инструкции и адреси. Предимството на този език е: първо, че програмите, написани на него, изискват много по-малко памет; второ, познаването на този език и полученият машинен код дава представа за архитектурата на машината, която едва ли се предоставя при работа на език за програмиране на високо ниво.


Обща информация за асемблерния език

Символният асемблер позволява до голяма степен да се премахнат недостатъците на машинното програмиране.

Основното му предимство е, че в асемблерния език всички програмни елементи са представени в символна форма. Преобразуването на символните имена на команди в техните двоични кодове се възлага на специална програма - асемблер, която освобождава програмиста от трудоемка работа и елиминира неизбежните грешки.

Символичните имена, въведени при програмиране на асемблер, като правило отразяват семантиката на програмата, а съкращението на командите - тяхната основна функция. Например: PARAM - параметър, TABLE - таблица, MASK - маска, ADD - събиране, SUB - изваждане и т.н. н. Такива имена се запомнят лесно от програмиста.

За програмиране на асемблер е необходимо да имате сложни инструменти, отколкото при програмиране на машинен език: имате нужда от компютърни системи, базирани на микрокомпютри или компютри с набор от периферни устройства (буквено-цифрова клавиатура, символен дисплей, флопидисково устройство и печатащо устройство), както и резидентно или междусистемно програмиране за необходимите типове микропроцесори. Асемблерният език ви позволява ефективно да пишете и дебъгвате много по-сложни програми от машинния език (до 1 - 4 KB).

Асемблиращите езици са машинно ориентирани, т.е. зависят от машинния език и структурата на съответния микропроцесор, тъй като те присвояват специфично символно име на всяка микропроцесорна инструкция.

Асемблерните езици осигуряват значително увеличение на производителността на програмистите в сравнение с машинните езици и в същото време запазват способността да използват всички софтуерно достъпни хардуерни ресурси на микропроцесора. Това позволява на квалифицирани програмисти да пишат програми, които се изпълняват за по-кратко време и заемат по-малко памет от програми, написани на език от високо ниво.

В тази връзка почти всички програми за управление на I / O устройства (драйвери) са написани на асемблер, въпреки наличието на доста голям набор от езици на високо ниво.

Използвайки асемблер, програмистът може да зададе следните параметри:

мнемоника (символно име) на всяка команда от машинния език на микропроцесора;

стандартен формат за редове на програма, описана в асемблер;

формат за указване на различни методи за адресиране и командни опции;

формат за указване на символни константи и константи от целочислен тип в различни бройни системи;

псевдокоманди, които контролират процеса на асемблиране (превод) на програмата.

В асемблерния език програмата се записва ред по ред, т.е. за всяка инструкция се отделя един ред.

За микрокомпютрите, изградени на базата на най-често срещаните типове микропроцесори, може да има няколко варианта на асемблерния език, но практическото разпространение обикновено има един - това е така нареченият стандартен асемблерен език. В бъдеще ще разгледаме стандартните асемблерни езици.

Всеки ред от програма, написана на асемблер, съдържа четири полета:

КОД НА ЕТИКЕТА ОПЕРАНД КОМЕНТАР

Полето LABEL не е задължително, то маркира адреса на клетката от паметта, където се намира първият байт от маркираната инструкция. Етикетите се използват като преходни адреси за команди за прехвърляне на управление и поради тяхното наличие програмистът не може да работи с абсолютни адреси, а използва символни адреси, което е много по-удобно. Етикетът може да бъде с дължина от един до шест знака, първият от които трябва да е буква. Много асемблери позволяват етикети с всякаква дължина, но само първите шест знака се разпознават. Етикетът не трябва да съдържа интервали или препинателни знаци. В някои асемблери последният символ на етикета трябва да бъде последван от двоеточие.

В полето за етикет всеки етикет трябва да бъде дефиниран само веднъж, но може да бъде препратен толкова пъти, колкото е необходимо. В противен случай асемблерът ще издаде диагностично съобщение за умножено дефинирания етикет.

Полето CODE съдържа символното име на командата или псевдокомандата, която се изпълнява. Мнемониката на повечето команди е съкращение на изречения на английски, които характеризират основната им функция.

Например:

MOV (MOVE) - прехвърляне, напред

ADD (ADDITION) - добавяне

SUB (SUBSTRACT) - изваждане

LDA (ЗАРЕЖДАНЕ ДИРЕКТНО

АКУМУЛАТОР) - директно зареждане

INR (INSCREMENT батерия)

REGISTER) - нарастване на регистъра

REGISTER) намаляване на регистъра

Командните мнемоники са ключови думи на асемблера и ако не са включени в набора от валидни мнемоники, тогава асемблерът издава невалидно съобщение с инструкции.

Полето OPERAND обикновено се дефинира в зависимост от полето на кода на инструкцията. Може да съдържа един или повече операнди, разделени със запетаи, или може да не съдържа операнд за онези инструкции, които работят с вътрешни работни регистри.

Операндът е израз, съдържащ мнемонична нотация, константи и оператори.

Най-простите операнди съдържат една мнемонична нотация или една константа.

Като мнемоника могат да се използват идентификатори на вътрешни работни регистри, етикети и текущата стойност на програмния брояч.

Константите могат да бъдат представени в различни бройни системи.

Софтуерна част

Описание програми

В тази работа ще разгледаме един от начините за преобразуване на число от десетична система в двоична и шестнадесетична с помощта на асемблер. Преди да създадем програма, ще разгледаме подробно какви стъпки трябва да предприемем за това, тоест, с други думи, ще напишем алгоритъм за решаване на нашия проблем. За да може компютърът да обработва данни, той трябва да въведе тези данни, което означава, че първата стъпка в решаването на нашия проблем ще бъде въвеждането на число. Втората стъпка в работата ще бъде извеждане на съобщение за въведения номер. След това преобразуваме десетичното число в двоичната система и показваме нашето число в двоичен еквивалент на екрана. Следващата стъпка е да преобразувате числото в шестнадесетичен еквивалент, а последната стъпка е цикъл, който ви позволява да продължите да въвеждате ново десетично число. Сега нека съберем всички точки заедно:

1. Въвеждане на число от клавиатурата.

2. Извеждане на съобщение за въведения номер.

3. Преобразуване на число в двоичен еквивалент.

4. Показване на двоично число.

5. Преобразуване на число в шестнадесетична система.

6. Показване на шестнадесетично число.

7. Цикъл (продължете?), ако ДА, тогава точка 1, в противен случай точка 8

8. Излезте от програмата.

Това е програмният алгоритъм на естествен език.

етапи на развитие на асемблерните програми

1. Постановка на проблема. Включва смислено описание на проблема и разработване на алгоритъм.

2. Разработване на текста на програмите.

3. Въвеждане на текст в компютъра. Текстът на програмата в мнемонични кодове се въвежда в компютъра с помощта на произволен текстов редактор. Той също така създава текстов файл с разширение *.ASM.

4. Компилация или асемблиране. Текстов файл с разширение *.ASM се преобразува в обектен файл, съдържащ програма с машинен код с разширение *.OBJ. Също така на този етап може да се създаде списък на програмата. Файл с разширение *.LST, който съдържа основна информация за програмата, както и Cross-reference файл с разширение *.CRF. На този етап текстът на програмата се вари за грешки. Сглобяването се извършва с помощта на програмата за преводач TASM.EXE (ASM.EXE - в асемблер, MASM.EXE - в макро асемблер). TASM [опции] *.ASM [,] - команда за извършване на превод. Ако командата съдържа една запетая, тогава листинг файлът е формиран. TASM има две опции: /ZI и /N. Те се наричат: TASM.

5. Оформление. На този етап се създава преместваема програма, която може да бъде заредена във всяка област на паметта. Записва се във файл с разширение *.EXE или *.COM. За това се използва TLINK.exe (за асемблера на макроси LINK.EXE). Опциите са /T и /X.

6. Изпълнение и отстраняване на грешки (DEBUG).

7. Въвеждане на машинния код на програмата в ROM (може да липсва) Сега ще видим блоковата диаграма на нашата програма, тоест подредени действия.


; ПРОГРАМА ЗА ПРЕОБРАЗУВАНЕ НА ДЕСЕТИЧНО ЧИСЛО КЪМ; БИНАРНИ И ХЕКСАДИМИЧНИ СИСТЕМИ; ЦИФРИ

;Сегмент от данни

;Таблица за преобразуване“цифра - ASCII-кодът

tabl_ascii db "0123456789abcdef"

;____________________________________________________________________

;Таблица за преобразуване„ASCII-код - цифра

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

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

;____________________________________________________________________

;Резервиране и инициализация на променливи в паметта

x_ascii db 20h дублиране (?)

t1 db 0dh,0ah,"Въведете число и натиснете Enter"

db 0dh, 0ah, "$"

t2 db 0dh,0ah,"Въведохте число",0dh,0ah "$"

t3 db 0dh, 0ah, "Изглежда така в двоичен код"

t4 db 0dh, 0ah, "В шестнадесетичен като този"

db 0dh, 0ah, "$"

buf db 16 dup(?),"$"

t5 db 0dh,0ah, "Да продължим ли процеса? (Да/Не)?"

;____________________________________________________________________

; Кодов сегмент

;Основна процедура

д: lea dx, t1

;Процедура за въвеждане на десетични числа

;Процедура за извеждане на десетично число

r1: movdl,

; Преобразуване на число (десетично) в двоично

v1: mul si

;Процедура за извеждане на двоично число

; Преобразуване на число (двоично) в шестнадесетично

; и го покажете на екрана

Бележки :

По-долу са командите, използвани в програмата:

суб- двоично изваждане. Съдържанието на втория операнд се изважда от първия операнд.

Мнемоника: суб< операнд 1>,< операнд 2>

повикване- извикване на процедура. Прехвърля управлението на процедурата, чийто адрес е даден от операнда, след завършване на процедурата изпълнението продължава с командата, следваща командата за извикване

Мнемоника: повикване< име на процедурата>

ret- връщане към процедурата

shr- изместете логично надясно

xor- XOR

Мнемоника:xor<операнд 1>,<операнд 2>

леа- изтегляне на EA

Мнемоника: leareg,<операнд>

тласък- включване в стека

Мнемоника: бутане< операнд>

поп- екстракт от стека

Мнемоника:поп<операнд>

mov- напред

Мнемоника:mov< приемник>,<источник>

вкл– увеличение с 1

Мнемоника: вкл<операнд>

дек– намаление с 1

Мнемоника: дек< операнд>

stosb- препраща връзки на регистър al или ax, посочени от регистър di

цикъл– команда за организиране на цикъл с брояч, също къси скокове (127b) командата намалява стойността на брояча cx, без да променя никакви флагове, ако връзката cx > 0, тогава се извършва преход към посочения етикет, в противен случай цикълът завършва.

Мнемоника: цикъл< етикет>

.КОД- отваря кодовия сегмент

. ДАННИ-- отваря сегмент с данни

.СТЕК н– дефинира сегмента на стека(а); в този случай не се използват директиви за затваряне на сегменти; N - показва размера на стека(a) в байтове

Забележка : когато се използват такива директиви, регистърът ds се инициализира, както следва: mov ax,@data

mov ds,ax

Предполагам не се използва в този случай

Библиография

1. "Аз съм асемблер за IBM PC и програмиране" Гимназия 1992г.

2. "Персонален компютър IBM и операционна система MS-DOS" Радио и комуникация 1991г.

3. Илюшечкин В.Н., Костин А.Е., Хохлов М.М. "Системен софтуер", М., "Висше училище", 1987 г

4. Norton P., Souhe D. “Assembly language for IBM PC”, M., Computer Publishing House, 1993


Позиционни са двоични, осмични, десетични, шестнадесетични бройни системи. Позиционна бройна система е тази, в която стойността на цифрата зависи от нейната позиция в числото, позициите на цифрите в числото се наричат ​​порядъци или цифри. Основата на позиционната бройна система е резултатът, при достигането на който се попълва следващият ред на номера. В противен случай основата на бройна система е равна на броя на цифрите, включително нула, които представляват числата в тази система.

Асемблерът позволява използването на числа в двоична, осмична, десетична или шестнадесетична система. По подразбиране асемблерът счита всички числа, срещани в програмата, за десетични. Можете изрично да посочите основата на число с помощта на тагове (за MASM32 версия 11): b или y - за двоични числа; o или q за осмично; d или t за десетични числа; h - за шестнадесетични числа. Етикетът се изписва в края на номера, заедно с номера. Ако в номера се използват азбучни знаци (шестнадесетични числа), в началото се записва нула - според правилата на асемблера обозначенията на числата трябва да започват с цифра. Например:

.data var1 байт 00001111b; 15 в двоично представяне var2 байт 00001111y; 15 в двоично представяне var3 байт 17o; 15 в осмична променлива 4 байт 17q; 15 в осмична променлива 5 байт 15d; 15 в десетична var6 байт 15t; 15 в десетична нотация var7 byte 0Fh; 15 в шестнадесетичен

Можете да зададете вида на числата, използвани в програмата, в секцията с инструкции с инструкция на формуляра

.RADIX (база)

в който основата на числото е обозначена с десетично число. Например, според инструкциите

.RADIX 16

Съществуването на два варианта на тагове за двоични и десетични числа се дължи на съображения за съвместимост на по-ранните версии на MASM32, в които нямаше възможност за запис на числа в шестнадесетичен формат, с по-късни версии. За шестнадесетични числа арабските цифри не са достатъчни, така че числовият ред се допълва с букви:

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

Лесно се вижда, че таговете от по-ранни версии на MASM32 - b и d - съвпадат с шестнадесетичните цифри, което прави невъзможно използването им с директивата .RADIX 16. Тагът o се дублира от тага q, защото първият е подобен на нула. Поради тези причини таговете y , q , t са предпочитани.

В компютъра всички числа се съхраняват като последователности от нули и единици. Когато запишем число в текста на програмата, асемблерът го превежда в машинно четимо представяне и това число ще бъде записано в изпълнимия файл в правилната (двоична) форма. Но ние сами трябва да организираме изхода на номера от програмата във формат, който вече е разбираем за потребителя, което означава, че ако се изисква да покажем на потребителя номер, тогава трябва да направим следното в програмата: a) преобразуване на числото от двоична система в десетична - от машинно представяне в човешко; б) заменете полученото десетично число с неговия символ, тоест картината, съответстваща на числото, тъй като мониторът показва картини, а не числа.

Преводът на машинно число в дадена бройна система се извършва чрез последователно разделяне на това число и получения резултат на основата на желаната бройна система. Остатъкът от делението се въвежда в най-малката цифра, частното отново се дели на основата на бройната система, остатъкът се въвежда в следващата цифра - и така докато делението стигне до нула. Да приемем, че искате да преобразувате десетичното число 250 в шестнадесетично:
250 / 16 = 15 , остатък = A (10),
15 / 16 = 0, остатък = F (15),
по този начин 250 (десетичен) = FA (шестнадесетичен).

Максималното число, което може да бъде записано в байт, е 255. Ако според резултатите от програмата е необходимо да се изведе число в десетичен формат от еднобайтова променлива, това число трябва да бъде разделено на 10 не повече от три пъти - 255 е три знака след десетичната запетая. В променливи от тип дума (два байта) максималната стойност е 65 535, в променливи от тип двойна дума (четири байта) - 4 294 967 295. Съответно разделяме номерата на думите на 10, за да преобразуваме в десетичен формат не повече от пет пъти, двойна дума - не повече от повече от десет пъти.

Кодовете на знаците-цифри са: "0" - 48; "1" - 49; "2" - 50; "3" - 51; "4" - 52; "5" - 53; "6" - 54; "7" - 55; "8" - 56; "9" - 57. Очевидно е, че за да преобразувате стойността на цифра в символна форма, достатъчно е да добавите 48 към нея.

Фрагмент от програмата, която преобразува байтова променлива във форма на десетичен знак:

.разделител на данни байт 10; делител buffer_dec байт 3 дублиран (?) параметър байт 255 ... .code start: ... ; вземете стойностите на параметъра байт в десетична символна форма mov AH, 0 ; нулиране AH mov AL, параметър; копиране на байтова променлива в разделител AL DIV; разделяне на AX на 10 mov buffer_dec, AH; копиране на остатъка от разделянето в buffer_dec mov AH, 0; нулиране на делител AH DIV; разделяне на AX на 10 mov buffer_dec, AH; копирайте остатъка от делението в buffer_dec mov buffer_dec, AL; коефициент на копиране към buffer_dec ДОБАВЯНЕ buffer_dec, 48; add 48 - получава цифрен знак "2" ADD buffer_dec, 48 ; add 48 - получава цифрен знак "5" ADD buffer_dec, 48 ; добавете 48 - вземете знака на числото "5"

Добави коментар



Продължение на темата:
Windows

Наталия Комарова , 28.05.2009 г. (25.03.2018 г.) Когато четете форум или блог, запомняте авторите на публикациите по псевдоним и ... по снимката на потребителя, така наречения аватар ....

Нови статии
/
Популярен