|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
01.03.2013, 13:33 | #1 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
Вопрос по коду
Здравствуйте, я начинающий, поэтому просил бы объяснить более полно.
#include <stdio.h> #include <windows.h> //Пересылка данных //Переменные DWORD a,b,c,d,e,f,g,h; void main() { f=200; __asm { //Непосредственная передача mov a,100 mov eax,100 mov b,eax //Использование косвенной адресации lea ebx,c mov dword ptr [ebx],eax //Использование стека //Содержимое eax оказывается в e число 100 в d push eax push 100 pop d pop e //команда xchg (обмен содержимым операндов), //содержимое f переходит в g xchg eax,f xchg g,eax //сложение с предварительным обменом операндов mov eax,50 mov eax,20 xadd eax,ebx //Теперь сумма в eax, а число 20 в h }; printf("%u %u %u %u %u %u %u %u %u\n",a,b,c,d,e,f,g,h); system("pause"); } Конкретно из кода возникает вопрос: //Использование стека //Содержимое eax оказывается в e число 100 в d push eax push 100 pop d pop e почему после сохранения в стеке eax, оказывается в переменной e и соответственно число 100 в переменной d? Также интересуют инструкции: //Использование косвенной адресации lea ebx,c ;- получение адреса переменной c mov dword ptr [ebx],eax ; здесь как я понимаю в регистре ebx хранится адрес ячейки памяти и по этому адресу записывается содержимое регистра eax Объясните пожалуйста. С Уважением Алексей. |
01.03.2013, 14:28 | #2 |
БНТУ ФИТР
Форумчанин
Регистрация: 20.05.2012
Сообщений: 315
|
По поводу стека все правильно. По принципу: посленим положил - первым забрал.
С++(console/builder/WinAPI/Linux), C#, Pascal, Delphi, Asm, Prolog.
< ----- Контакты kventin_zhuk@live.com |
01.03.2013, 15:07 | #3 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
спасибо за ответ, но интересует почему именно в переменные d и e, eax в e, а число 100 в переменную d?
|
01.03.2013, 15:46 | #4 | |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 639
|
Цитата:
положил eax положил 100 взял 100 в d взял eax в е
ICQ: 677936656 Gmail: ekEmbed@gmail.com
|
|
01.03.2013, 16:44 | #5 | |
Старожил
Регистрация: 08.02.2012
Сообщений: 2,173
|
Цитата:
Правильно поставленная задача - три четверти решения.
|
|
01.03.2013, 18:34 | #6 |
Пользователь
Регистрация: 01.03.2013
Сообщений: 39
|
to:Ezhik Kihze
это понятно, я неправильно поставил вопрос, почему именно в эти переменные, а не в h или g или с? или если я правильно понял, я мог бы написать например: push eax push 100 pop h pop s Содержимое eax оказывается в s, а число 100 в h? Всё правильно тему усвоил, всем огромное спасибо! С Уважением Алексей. Последний раз редактировалось Alexey_68; 01.03.2013 в 22:37. |
02.03.2013, 00:19 | #7 | |
Форумчанин
Регистрация: 24.12.2012
Сообщений: 639
|
Цитата:
ICQ: 677936656 Gmail: ekEmbed@gmail.com
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вопрос по коду игры | pavelvolkov73 | Gamedev - cоздание игр: Unity, OpenGL, DirectX | 2 | 21.11.2012 15:42 |
Pascal, вопрос по коду. | Wizard_Adeptus | Помощь студентам | 2 | 22.05.2012 11:00 |
Вопрос по коду программы на С++. Проверить. | AlekCaHdpyLLlka | Помощь студентам | 5 | 11.05.2012 18:24 |
Вопрос по коду | BeZone | Помощь студентам | 10 | 28.12.2009 13:21 |
Вопрос по коду(Pascal) | DeFt | Помощь студентам | 6 | 09.06.2009 21:20 |