Форум программистов, компьютерный форум, киберфорум
Assembler: Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16

Первая программа на gnu asm

20.04.2016, 22:25. Показов 2528. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Жалко, простаивает раздельчик, а тема то очень интересная. Может кто присоединится?
Написала игру пока без использования стека, пользовалась тем с чем успела познакомится.
Пока без коментариев, может так кому будет интересней?

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
#filename stone.s linux_x86_64
.section .data
wellco: .ascii  "Wellcome to the GAME stone-scissors-paper\n"
        we_len = . - wellco
prompt: .ascii  "Choose one of three sample digits\n1-stone\n2-scissors\n3-paper\n"
        pr_len = . - prompt
buff:   .quad   0x0
repr1:  .quad   0x55
repr2:  .quad   0xaa
flag_m: .quad   0x0
flag_u: .quad   0x0
game:   .ascii  "00000000 VS 00000000\n"
win:    .ascii  "You won!!!\n"
lose:   .ascii  "You loose!\n"
draw:   .ascii  "Tied score\n"
stone:  .ascii  "  stone "
scissors: .ascii "scissors"
paper:  .ascii  "  paper "
 
.section .text
.macro  write   arg,    arg_len
        mov     $1,     %rax
        mov     $1,     %rdi
        mov     \arg,   %rsi
        mov     \arg_len,%rdx
        syscall
.endm
.macro  ending
        mov     $60,    %rax
        mov     $0,     %rdi
        syscall
.endm
.macro  scan
        xor     %rax,   %rax
        xor     %rdi,   %rdi
        mov     $buff,  %rsi
        inc     %rdx
        syscall
.endm
 
.globl _start
_start:
        write   $wellco,$we_len
        write   $prompt,$pr_len
 
        mov     $318,   %rax
        mov     $buff,  %rdi
        mov     $1,     %rsi
        mov     $0,     %rdx
        syscall
 
        inc     %rax
        mov     buff,   %r8
        cmp     repr1,  %r8
        cmovg   %rsi,   %rbx
        cmp     repr2,  %r8
        cmovg   %rax,   %rbx
        mov     %rbx,   flag_m
        scan
 
        mov     buff,   %r9
        sub     $0x31,  %r9
        mov     %r9,    flag_u
 
        mov     $game,  %rdx
        cmp     %rax,   %r9
        je      one_u
        jg      two_u
 
        mov     stone,  %rbx
        mov     %rbx,   (%rdx)
        jmp     next
one_u:
        mov     scissors,%rbx
        mov     %rbx,   (%rdx)
        jmp     next
two_u:
        mov     paper,  %rbx
        mov     %rbx,   (%rdx)
next:
        cmp     %rax,   flag_m
        je      one_m
        jg      two_m
 
        mov     stone,  %rbx
        mov     %rbx,   12(%rdx)
        jmp     forwar
one_m:
        mov     scissors,%rbx
        mov     %rbx,   12(%rdx)
        jmp     forwar
two_m:
        mov     paper,  %rbx
        mov     %rbx,   12(%rdx)
forwar:
        mov     flag_m, %r8
        inc     %rax
        cmp     %r8,    %r9
        je      drawg
        add     %r8,    %r9
        cmp     %r9,    %rax
        jne     last
 
        cmp     %r8,    flag_u
        jl      losg
        jg      wing
last:
        cmp     %r8,    flag_u
        jg      losg
wing:
        write   $win,   $11
        jmp     _exit
losg:
        write   $lose,  $11
        jmp     _exit
drawg:
        write   $draw,  $11
 
_exit:
        write   $game,  $21
        ending
1
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
20.04.2016, 22:25
Ответы с готовыми решениями:

Первая программа asm
Надо написать калькулятор, работающий со стеком. Реакции на нажатия на клаве: 1. Ввели число 0..9, необходимо пометстить его на вершину...

Программа GNU Profiler
Уважаемые форумчани, прошу у Вас помощи. Может у кого то есть програма на любом яжыке програмирования действия которой проверяется...

Программа сравнения переменных не работает в gnu
помогите пожалуйста, исправьте программу, в вижуал студии она работает правильно, а в gnu C++ не работает вообще. Условие:Входные данные...

15
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.05.2016, 14:04
Цитата Сообщение от nezabudka Посмотреть сообщение
Жалко, простаивает раздельчик
Не по популярен асм по *nix, не соответствует он идеологии.
Цитата Сообщение от nezabudka Посмотреть сообщение
Может кто присоединится?
Суть-то в чем?
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
06.05.2016, 17:57  [ТС]
Цитата Сообщение от shmkv Посмотреть сообщение
Суть-то в чем?
Вопросы бывает появляются. Думала ваще ни кто не заходит.
Нет учебника, что бы можно было обратится за подробными разъяснениями.
Приходится все собирать из разных источников и в дагонку басурманский подтягивать.
Вот решилась знакомится паралельно с Си для большего понимания.
Хотя боялась не только такой связки но даже по отдельности и Си и
асемблера. Вот теперь когда познакомилась и c gcc, gdb и даже с clang, llvm, lldb
кажется не так все безнадежно. Я к тому что боялась, мозгов не хватит, возьмусь и
не осилю и все такое. А помочь будет некому.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.05.2016, 20:26
Цитата Сообщение от nezabudka Посмотреть сообщение
Нет учебника
Учебника по чему? Тут те же самые x86 команды, только записываются чуть по другому. Я сам привык к интеловскому синтаксису, но при необходимости переписывал на AT&T. Отличий не так уж и много. https://ru.wikipedia.org/wiki/... 0%B8%D1%81.
К тому же можно взять FASM и вообще писать на обычном (intel) синтаксисе.
Цитата Сообщение от nezabudka Посмотреть сообщение
Вот решилась знакомится паралельно с Си для большего понимания.
Хотя боялась не только такой связки но даже по отдельности и Си и
асемблера. Вот теперь когда познакомилась и c gcc, gdb и даже с clang, llvm, lldb
кажется не так все безнадежно. Я к тому что боялась, мозгов не хватит, возьмусь и
не осилю и все такое. А помочь будет некому.
А вообще цель какая?
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
06.05.2016, 21:08  [ТС]
Цитата Сообщение от shmkv Посмотреть сообщение
Тут те же самые x86 команды
x86_64 порядок вызова функций отличается, использование регистров
вместо стека для передачи аргументов, то же и с системными вызововами.
Щас та я уж со скрипом разобралась, но шла через кукурузное поле
Цитата Сообщение от shmkv Посмотреть сообщение
А вообще цель какая?
Разобратся через асемблер с работой процессора, памяти и ос linux в целом.
Сделать задел для более высокоуровневого программирования в дальнейшем.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
06.05.2016, 21:48
Цитата Сообщение от nezabudka Посмотреть сообщение
x86_64 порядок вызова функций отличается
Что конкретно отличается?
Цитата Сообщение от nezabudka Посмотреть сообщение
то же и с системными вызововами.
Ничем они особо не отличаются. Просто таблица системных вызовов (syscalls) другая.
http://blog.rchapman.org/post/... for-x86-64

Добавлено через 41 секунду
Цитата Сообщение от nezabudka Посмотреть сообщение
использование регистров вместо стека для передачи аргументов
Использование регистров или стека никакого отношения к разрядности не имеет.

Добавлено через 3 минуты
Цитата Сообщение от nezabudka Посмотреть сообщение
Разобратся через асемблер с работой процессора, памяти и ос linux в целом.
Похвально, если так.
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
06.05.2016, 22:44  [ТС]
Цитата Сообщение от shmkv Посмотреть сообщение
Что конкретно отличается?
Цитата Сообщение от shmkv Посмотреть сообщение
Использование регистров или стека никакого отношения к разрядности не имеет.
https://www.cyberforum.ru/blog... g4215.html

https://www.cyberforum.ru/blog... g4214.html
0
3410 / 1829 / 489
Регистрация: 28.02.2015
Сообщений: 3,696
06.05.2016, 23:35
Цитата Сообщение от nezabudka Посмотреть сообщение
Использование регистров или стека никакого отношения к разрядности не имеет.
Разрядность - это от процессора, и/или его разработчиков.
Параметры в функцию - это уже от Осеписателей.

Добавлено через 40 минут
nezabudka,

Не по теме:

ну Вы мне репутацию подогнали

Constantin Cat
Модератор
666 / 422 / 151
Регистрация: 28.02.2015
Сообщений: 1,163
:D

1
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
07.05.2016, 02:16
nezabudka, еще раз: разрядность никак не накладывает ограничений на способ передачи параметров. Как разработчики решат, так и будет. В х86-64 версии компилятора разработчики решили передавать параметры через регистры (скорее всего из соображений, что регистров стало больше), но ничего не мешает передавать через стек.
1
in code we trust
 Аватар для __py__
133 / 162 / 12
Регистрация: 29.02.2016
Сообщений: 885
07.05.2016, 06:05
Цитата Сообщение от nezabudka Посмотреть сообщение
Сделать задел для более высокоуровневого программирования в дальнейшем.
И сколько вы изучали asm&c? Сколько осталось изучить + прибавить! И теперь сравните: я изучил высокоуровневый язык за год весь! Сейчас решаю задачи! Соревнуюсь с целью занять 1-ое место среди программистов в мировом рейтинге вот здесь http://www.sololearn.com/Play/Python Ну и зачем этот низкоуровневый вынос мозга?

Добавлено через 7 минут
Конечно если начали изучать надо доводить до конца. Пригодится всё (в далёком будущем(или недалёком(50/50))). Ну и любые знания надо ещё уметь применить (самое нужное умение).

Добавлено через 8 минут
Все языки мейнстрим, востребованы на рынке http://www.sololearn.com/Courses/ вот их и изучайте) Соревнуйтесь! Почувствуйте дух борьбы, победы. Удачи).
1
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
07.05.2016, 08:23  [ТС]
__py__. Вообще то я собралась c html познкомится и вот чето как то углубилась
Главный мой двигатель это интерес. Иду за ним слепо. Знакомлюсь с тем что нравится.
Ну и просто не выношу когда чего то не допонимаю. Я все таки написала тогда сайт и даже
связала страницы с помощью php. Потом зацепило, познакомилась с линукс и понеслось.
Помимо администрирования системы прочла книгу Луца по питону, пару начальных книжек по Golang.
Поверхностно познакомилась с D, порылась в Nim. Не думаю, что у меня хватит способностей добится
чего то серьезного поэтому не заморачиваюсь и иду куда кривая выведет, просто провожу время
с удовольствием. Спасибо за коментарии и желаю вам победить в соревновании.
0
in code we trust
 Аватар для __py__
133 / 162 / 12
Регистрация: 29.02.2016
Сообщений: 885
07.05.2016, 08:52
Цитата Сообщение от nezabudka Посмотреть сообщение
Спасибо за коментарии и желаю вам победить в соревновании.
Соревнование там - как бы побочный эффект. Ты видишь просто как много ты изучил по сравнению с другими в мировом рейтинге. Игровое обучение любому понравится и сертификат в итоге по каждому языку в комплекте в подарок для мотивации.
А изучать надо что-то одно. Так говорят все профессионалы, когда смотрят на свой пройденный путь со стороны.
Точнее одну область выбрать и не метаться, но знать её выше среднего специалиста.

Добавлено через 7 минут
Так что не имеет смысла стать 1-ым среди всех. Я сомневаюсь что кто-то из них вообще "соображает в чём-то одном" на уровне senior programmer.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
07.05.2016, 11:42
Цитата Сообщение от nezabudka Посмотреть сообщение
Разобратся через асемблер с работой процессора, памяти и ос linux в целом.
Сделать задел для более высокоуровневого программирования в дальнейшем
Тогда тебе полезно будет почитать это До слез Хочу научится Ассемблеру!!!
Начальная часть скорее всего тебе будет известна, так что её имеет смысл пробежать бегло и начать читать с того момента, где описывается программа на Си. Возможно, что со временем появится понимание, что "программирование на низком уровне" и "программирование на ассемблере" - далеко не синонимы. На низком уровне куда более эффективно программировать на языке Си (чем, собственно и занимаются разработчики ядра операционной системы)

Добавлено через 2 минуты
Так же тебе рекомендую НЕ слушать товарища __py__. На мой взгляд ты идёшь в правильном направлении. Человек, имеющий широкие знания и понимающий, как всё это хозяйство работает "под капотом", станет гораздо более эффективным программистом, чем человек, умеющий работать только на высокоуровневых монстрах

Добавлено через 6 минут
Цитата Сообщение от nezabudka Посмотреть сообщение
x86_64 порядок вызова функций отличается, использование регистров
Это называется "программные соглашения по передаче параметров" (Реализация __stdcall, __cdecl). Эти соглашения, грубо говоря, нужны всего лишь как стандарт для того, чтобы разные программисты и компиляторы могли построить код, совместимый друг с другом. Когда вся твоя программа написана на ассемблере, то внутри своей программы ты можешь передавать параметры так, как тебе удобно. Хочешь - все на регистрах, хочешь - все в стеке, хочешь - все в глобальной памяти, хочешь - через файл на диске. Процессору глубоко начхать на это, он просто исполняет операции. Другое дело, если ты обращаешься к системным вызовам операционной системы, там, конечно же, нужно передавать именно так, как этого ожидает операционная система (поскольку это уже не твой код, а чужой)
1
in code we trust
 Аватар для __py__
133 / 162 / 12
Регистрация: 29.02.2016
Сообщений: 885
07.05.2016, 12:09
Цитата Сообщение от Evg Посмотреть сообщение
станет гораздо более эффективным программистом, чем человек, умеющий работать только на высокоуровневых монстрах
Конечно станет - лет через 10-20, когда технологии и стандарты senior programmer изменятся и никому не нужны будут ваши глубокие познания. В будущее смотреть - счастье проглядеть).
1 год и 20 - есть разница?

Добавлено через 10 минут
Знания должны строиться по архитектуре пирамиды. Основание-фундамент (определяемся с вершиной-целью), середина- сливки знаний самого нужного полезного что нам даст дивиденты, вершина- дивиденты её достигает 1%.
У некоторых этот треугольник перевёрнут с ног на голову. У некоторых как квадрат. Бардак в общем творится.
0
Эксперт NIX
 Аватар для nezabudka
3334 / 752 / 252
Регистрация: 28.06.2015
Сообщений: 1,552
Записей в блоге: 16
07.05.2016, 12:41  [ТС]
Цитата Сообщение от Evg Посмотреть сообщение
Это называется "программные соглашения по передаче параметров
Я и смотрю, через отладчик при вызове функции, в коротеньких программах, компилятор
делает лишние движения со стеком с локальными переменными. Раз стандарт занчит
безопасней для разных возможных случаев будет. С протоколами я знакома, думаю к ним
с небольшой натяжкой можно отнести и заголовочные файлы в Си. Значит придерживатся их
стоит даже в ущерб оптимизации. Я смотрела через отладчик даже есть разница в наборе команд
в программах скомпилированных clang и gcc. В тех что я смотрела, gcc оказался лаконичней на
десяток байтов.

Добавлено через 5 минут
Цитата Сообщение от __py__ Посмотреть сообщение
Знания должны строиться по архитектуре пирамиды
Да уж, если не систематизировать полученные знания, то каша получится. А вообще
по моему опыту "профессионал" - человек, ограниченный во всем кроме одного. Жалко
таких. Помню как сама была зачарованой, приезжала на работу пару раз вместе с
кульком мусора, который должна была выкинуть возле дома.
0
1378 / 522 / 72
Регистрация: 21.07.2015
Сообщений: 1,308
07.05.2016, 15:20
__py__, бредишь. Попробуй поучаствовать тут например. И ты сразу поймешь свой уровень.

Добавлено через 6 минут
Цитата Сообщение от nezabudka Посмотреть сообщение
заголовочные файлы в Си
Ну вообще формат стандартных функций Си описан в Стандарте (Си, С++).
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
07.05.2016, 15:20
Помогаю со студенческими работами здесь

Первая программа. Код не компилируется и не запускается программа.
Первая программа, первая ошибка Здравствуйте! Решил учить С++. Скачал книгу Programming: Principles and Practice Using C++, Бьерн...

Программа в asm вставке C++
Запнулся на этой задаче: В памяти задан массив из 10-ти элементов. Заменить эти числа произведением их старшего и младшего слова. ...

Программа не выходит из последнего цикла (Asm + Си)
Здравствуйте, мне надо очень срочно найти ошибку. Программа не выходит из последнего цикла((( mov cx, 10h; mov k, 0; lea...

Программа для расчета формулы на ASM
Всем привет. очень нуждаюсь в помощи по написанию программы на ASM. программа должна считать по вот такой формуле (a^3-b^3)^2-3ab/4a^2....

Программа работы стиральной машинки (ASM)
мне нужно делать микропроцесор на ассемблер стиральнои машынки,у меня есть проты входа,выхода и алгоритм(что за чем делается) может ктото...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru