Уважаемые пользователи Голос!
Сайт доступен в режиме «чтение» до сентября 2020 года. Операции с токенами Golos, Cyber можно проводить, используя альтернативные клиенты или через эксплорер Cyberway. Подробности здесь: https://golos.io/@goloscore/operacii-s-tokenami-golos-cyber-1594822432061
С уважением, команда “Голос”
GOLOS
RU
EN
UA
azrael
6 лет назад

Assembler #5. Подпрограмма для вывода строк


Доброго времени суток, господа. Сегодня мы напишем подпрограмму для вывода строк на ЯП ASM. Этот урок будет очень коротким и вообще он не был мною запланирован. Но я думаю, что он поможет Вам поднять Вашу квалификацию, как программиста.
Для начала я предлагаю Вам увидеть код на сегодня:

section .data
text db "Hello, World!",10,0
text2 db "World?",10,0
section .text
global _start

_start:
mov rax, text
call _print
mov rax, text2
call _print

mov rax, 60
mov rdi, 0
syscall

;input: rax as pointer to string
;output: print string at rax
_print:
push rax
mov rbx, 0

_printLoop:
inc rax
inc rbx
mov cl, [rax]
cmp cl, 0
jne _printLoop
mov rax, 1
mov rdi, 1
pop rsi
mov rdx, rbx
syscall
ret

Теперь попробуем разобраться что к чему тут.

Теперь я буду подавать Вам информацию с расчётом на то, что Вы уже знаете базис и не буду повторяться, как в предыдущих статьях.

Наша подпрограмма будет сама уметь считать длину строки. Для этого мы будем использовать rbx, именно в нём мы будем хранить её. Путём inc rax мы перемещаемся по нашей строке и при наличии в неё символа, не равного "0", увеличиваем rbx на 1.

1
0.057 GOLOS
На Golos с August 2018
Комментарии (0)
Сортировать по:
Сначала старые