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

Деклариране на символи в NASM x86

В x86 можем да декларираме данни с различни размери в секцията .data. За да декларираме символ, трябва да вземем предвид какъв е размерът на символа от текста. За ASCII знаци считаме, че един знак е с размер 8 бита. Ако искаме да декларираме ASCII символ, ще използваме DB като формат на данните. Ако искаме да използваме по-обширен набор от символи като Unicode (UTF-32), ще използваме DD за разпределяне на 32-битов размер. За стойността бихме поставили един знак с единични кавички около него, както е показано в следния код.

Този пример дефинира 8-битова променлива с име char със стойност A. Тъй като стойността е 8-битова, можем да приемем, че това е ASCII знак. Обърнете внимание, че когато използвате стойността на char, ще видите неговото числово ASCII кодиране, а не знака A. В този пример това би означавало, че стойността на променливата е 65, а не A. Пълен списък на съпоставянията на ASCII стойности могат да бъдат намерени в ASCII диаграма като: http://sticksandstones.kstrom.com/appen.html

За да преместим тези данни в регистър, трябва да сме сигурни, че размерът на регистъра отговаря на размера на данните. За нашия 8-битов знак това означава, че регистърът, в който поставяме данните, също трябва да бъде с размер 8 бита. За да постигнем това, трябва да използваме долните или горните 8 бита на регистъра. Например, за да преместим данните в регистър b, ще използваме bl.

В този пример регистърът bl сега съхранява стойността 65, която съответства на символа A в ASCII кодиране.

Списъци и низове

Низът е основно просто списък от знаци, така че преди да подходим към низовете, нека обсъдим малко списъците. Списък може да бъде деклариран в секцията с данни, като се използва списък със стойности, разделени със запетая, като следния код:

За достъп до първия елемент от списъка можете да използвате [списък]. За достъп до втория елемент просто добавяте 1 към списъка, което ви дава [списък+1]. Следващият елемент е в списък+2 и това продължава, докато стигнете до края на списъка.

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

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

Вече успешно научихте как да съхранявате и препращате към символи, списъци и низове в NASM x86!