|
|
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
Здравствуйте. Собственно код: Код: plaintext 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. Программа сортирует массив по убыванию. Не обращайте внимание на начало, программа писалась в си++, дальше идет вставка ассемблера. Не могу понять что идет после loop cikl1 Какое значение у нас в а, зачем его перемещать и т.д. Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.03.2011, 23:43 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
bosscsВот код: int *a = mas .................... Какое значение у нас в а? Странный вопрос... Такое же как и перед сортировкой. Указатель на начало массива. автор, зачем его перемещать и т.д. Его никто и не перемещает. В цикле элементы массива кладутся в bx. После чего, eax очевидно указывает на конец массива. Не знаю зачем это нужно. Закоментируй блок, что изменится? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2011, 10:30 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
Хм, действительно без него все отлично работает. Спасибо) У меня еще осталось пару непонятных вопросов. Точнее вопросы понятные, ответы непонятные) pop ecx зачем это нужно? И еще, как я понял сортировка заканчивает проходить заново тогда, когда у нас не остается элементов, за которыми идут больше элементы. Как оно понимает вообще это? И когда останавливаться... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2011, 12:31 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
bosscspop ecx зачем это нужно? ecx - счетчик цикла. так-как циклы вложены, то одного счетчика не хватает. поэтому, перед началом вложенного цикла, сохраняем старое значение счетчика командой push, заносим в ecx - необходимой кол-во шагов внутреннего цикла, а поле завершения внутреннего цикла - возвращаем старое значение командой pop. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.03.2011, 19:16 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaN, что-то я не сильно понимаю. Можно тоже самое только с примером, там типа какое там сразу значение, как оно меняется во время цикла....плз ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 14:46 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
bosscsZyK_BotaN, что-то я не сильно понимаю. Можно тоже самое только с примером, там типа какое там сразу значение, как оно меняется во время цикла....плз можно. вот цикл на 5 шагов: mov ecx, 5 :l ; loop :l операция loop работает так, сначала делает декремент ecx, а потом, если ecx не равен нулю, то переходит на заданную метку. чтобы сделать вложенный цилк, нужно юзать поп и пуш. Пример: mov ecx, 5 :l1 push ecx mov ecx, 5 :l2 : loop l2 pop ecx loop l1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 15:04 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
ZyK_BotaNчтобы сделать вложенный цилк, нужно юзать поп и пуш. Не так уж и нужно в данном случае. В циклах ebx свободен. Можно было использовать явный декремент и jnz. А если вежливо попросить, то с ebp можно поиграть. Я кстати не понял - а где ecx для первого цикла инициализируется? cikl2 выполняется size-1 раз, а cikl1? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 15:58 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
Как я понял ecx это то, сколько будет выполняться цикл, написанный после него. авторmov ecx, 5 :l1 push ecx mov ecx, 5 :l2 : loop l2 pop ecx loop l1 Пуш сохраняет значение есх, что было до него, и затем записывает в него новое значение. А командой поп восстанавливается старое значение есх? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 17:29 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
bosscsКак я понял ecx это то, сколько будет выполняться цикл, написанный после него. авторmov ecx, 5 :l1 push ecx mov ecx, 5 :l2 : loop l2 pop ecx loop l1 Пуш сохраняет значение есх, что было до него, и затем записывает в него новое значение. А командой поп восстанавливается старое значение есх? да. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 18:16 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
push кладет в стек значение указанного регистра pop вынимает из стека значение в указанный регистр push ax push bx pop ax pop bx поменяли местами знчения в ax и bx ну а в твоем коде да, "сохранение"/"востановление" ecx производится ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 18:20 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
push ax push bx pop ax pop bx Че это они поменялись? Восстановилось ах а потом бх, как и сразу было... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 23:37 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
bosscspush ax push bx pop ax pop bx Че это они поменялись? Восстановилось ах а потом бх, как и сразу было...как работает стек понимаем? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 23:42 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
bosscspush ax push bx pop ax pop bx Че это они поменялись? Восстановилось ах а потом бх, как и сразу было... учись студент : http://en.wikipedia.org/wiki/LIFO_%28computing%29 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.03.2011, 23:53 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
Всем еще раз спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2011, 08:13 |
|
||
|
Помогите понять кусок программы (assembler)
|
|||
|---|---|---|---|
|
#18+
Можно вообще не прибегать к pop и push для вложенных циклов (что достаточно сложно не только для начинающих программистов), а просто использовать переменные в памяти типа inc count1 ... inc couint2 ... cmp count2,10 ... cmp count1,5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.03.2011, 12:50 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=37175535&tid=1343045]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
164ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
68ms |
get tp. blocked users: |
2ms |
| others: | 291ms |
| total: | 572ms |

| 0 / 0 |
