Обсуждение:Ассемблер в Linux для программистов C: различия между версиями
Gribozavr (обсуждение | вклад) ответы |
Gribozavr (обсуждение | вклад) Обсуждение правки 193.201.100.154 |
||
Строка 23: | Строка 23: | ||
: Вполне согласен, что и другие архитектуры забывать не стоит. Даже в текущем виде книга уже немного устарела, так как сейчас уже вполне популярны x86_64, а там очень много своей специфики. Хотелось бы придумать более стройную структуру книги: в каждом разделе сначала идёт общая информация для обоих архитектур, а затем абзацы, специфичные для 32 и 64 отмечены специальными значками. |
: Вполне согласен, что и другие архитектуры забывать не стоит. Даже в текущем виде книга уже немного устарела, так как сейчас уже вполне популярны x86_64, а там очень много своей специфики. Хотелось бы придумать более стройную структуру книги: в каждом разделе сначала идёт общая информация для обоих архитектур, а затем абзацы, специфичные для 32 и 64 отмечены специальными значками. |
||
: Переименовывать не хотелось бы, название вполне красиво звучит. А то может получиться «Ассемблер IA-32, x86_64 в Linux для программистов C с использованием синтаксиса gas в редакторе vim и оболочке bash» --[[Участник:Gribozavr|Gribozavr]] 11:43, 18 августа 2010 (UTC) |
: Переименовывать не хотелось бы, название вполне красиво звучит. А то может получиться «Ассемблер IA-32, x86_64 в Linux для программистов C с использованием синтаксиса gas в редакторе vim и оболочке bash» --[[Участник:Gribozavr|Gribozavr]] 11:43, 18 августа 2010 (UTC) |
||
== Правка участника 193.201.100.154 == |
|||
Здраствуйте! Вы добавили этот абзац в раздел про процедуры: |
|||
Существует также возможность реализовать вычисление факториала без функций: |
|||
<pre> |
|||
movl $1, %eax /* Аккумулятор результата. 1 исходное значение, поскольку 0! = 1*/ |
|||
movl $5, %ebx /* счетчик цикла, по совместительству - то самое (n - 1) */ |
|||
loop_start: |
|||
mull %ebx |
|||
decl %ebx |
|||
cmp $0, %ebx |
|||
jne loop_start |
|||
ret |
|||
</pre> |
|||
Я не вижу в этом никакого смысла, так как: |
|||
* раздел про процедуры; |
|||
* этот кусок кода не демнстрирует ничего нового; |
|||
* не является самостоятельным; |
|||
* не выводит ничего не экран. |
|||
[[Участник:Gribozavr|Gribozavr]] 18:13, 12 января 2011 (UTC) |
Версия от 18:13, 12 января 2011
Мне кажется, что лучше опустить информацию о количестве системных и пользовательских регистров. Поскольку совершенно не понятно, куда автор отнес регистры FPU,XMM,SSE и MSR-регистры. 158.250.33.187 10:51, 17 июня 2008 (UTC)
- Немного исправил. Так лучше? Gribozavr 12:27, 17 июня 2008 (UTC)
- Спасибо, стало на много лучше. 194.88.210.254 19:13, 17 июня 2008 (UTC)
Возможно я ошибаюсь, но, кажется, в разделе "Регистровая адресация" попутан порядок операндов у команды movl. --Xaionaro 09:38, 17 декабря 2008 (UTC)
Так же мне кажется, что в разделе "Команда lea" корректнее сказать не "вызовет ошибку при компиляции, так как $0x32 не является адресом", а "вызовет ошибку при компиляции, так как константа $0x32 не имеет адреса". --Xaionaro 09:48, 17 декабря 2008 (UTC)
- Нет, всё дело в том, что у команды lea источник не может быть непосредственным операндом. В документации Intel:
lea r32, m
- Тут используется синтаксис Intel, а не AT&T, lea назначение, источник. --Gribozavr 01:38, 11 мая 2009 (UTC)
Это, конечно, вообще никак не меняет логику кода, но в разделе "Конструкция switch", в "Этот код эквивалентен следующему коду на Си:", в "default" надо убрать "break;", ибо в ассемблерном коде в "case_default:" нет команды "jmp switch_end". --Xaionaro 16:02, 17 декабря 2008 (UTC)
Константы в двоичной системе счисления
В разделе «Логическая арифметика» при описании команды test использована команда «testb $0b00001000, %al». 0b00001000 — это обозначение двоичного 00001000 что ли? Я, как изучавший в университете ANSI C и MASM 4, этого не знал и не сразу догадался. Если это так, то может стоит добавить объясняющий комментарий? 80.86.240.197 17:16, 6 мая 2009 (UTC)
- Да, это так. Добавил коментарий. --Gribozavr 11:43, 18 августа 2010 (UTC)
Intel-only?
Мне совсем не понятно почему в этой статье используется Intel архетектура. На данный момент сушествуют другие очень популярные, такие как arm, mips. Возможно имеет смысл переименовать статью, добавивл слово Intel, или описать другие архитектуры(так как последним заниматься врятли кто будет, можно остановится на первом). [P.S. Говорить что Intel самая популярная смысла нет, наиболее часто если людям и приходится писать на ассебмлере, то как правило под иную архиектуру, типо arm, mips, пусть даже avr] А так очень хорошая статья, спасибо. 193.232.173.109 08:28, 28 июля 2010 (UTC)
- Вполне согласен, что и другие архитектуры забывать не стоит. Даже в текущем виде книга уже немного устарела, так как сейчас уже вполне популярны x86_64, а там очень много своей специфики. Хотелось бы придумать более стройную структуру книги: в каждом разделе сначала идёт общая информация для обоих архитектур, а затем абзацы, специфичные для 32 и 64 отмечены специальными значками.
- Переименовывать не хотелось бы, название вполне красиво звучит. А то может получиться «Ассемблер IA-32, x86_64 в Linux для программистов C с использованием синтаксиса gas в редакторе vim и оболочке bash» --Gribozavr 11:43, 18 августа 2010 (UTC)
Правка участника 193.201.100.154
Здраствуйте! Вы добавили этот абзац в раздел про процедуры:
Существует также возможность реализовать вычисление факториала без функций:
movl $1, %eax /* Аккумулятор результата. 1 исходное значение, поскольку 0! = 1*/ movl $5, %ebx /* счетчик цикла, по совместительству - то самое (n - 1) */ loop_start: mull %ebx decl %ebx cmp $0, %ebx jne loop_start ret
Я не вижу в этом никакого смысла, так как:
- раздел про процедуры;
- этот кусок кода не демнстрирует ничего нового;
- не является самостоятельным;
- не выводит ничего не экран.