|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
27.12.2012, 14:56 | #1 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
Вывод введенного сообщения. Исправить ошибку.
#include <iostream>
#include <stdio.h> using namespace std; int main() {char x; char* fmt = "%s"; _asm { lea eax, x push eax push fmt call scanf add esp, 30; lea eax, x push eax push fmt; call printf; add esp, 30; } return 0; } После выполнения выводит ошибку помогите исправить. |
27.12.2012, 15:08 | #2 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
программа сама работает
|
27.12.2012, 15:10 | #3 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
Такая ошибка Stack around the variable 'x' was corrupted
|
27.12.2012, 15:10 | #4 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
RazerVG, а на кой предмет Вы стек на 30 байт выравниваете после вызовов функций? 8-ми хватит за глаза.
|
27.12.2012, 16:27 | #5 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
|
27.12.2012, 16:42 | #6 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
RazerVG, Вы передаёте функции через стек два параметра каждый размером dword. Итого 8 байт. Да, и надо передать адрес строки форматирования, а не саму строку.
|
27.12.2012, 16:48 | #7 | |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
Цитата:
lea eax, x; //заносим адрес переменной x в eax push eax;// кладем адрес переменной x в стек push fmt; //кладем адрес строки форматирования в стек call scanf; //вызываем функцию scanf. Заметьте, что аргументы передаются в обратном порядке add esp,8;// убираем аргументы из стека. 4 - размер одного аргумента; 2 - их количество вот нашел описание Вопрос вот в чем когда мы вызываем call scanf что мы считываем x или fmt ? |
|
27.12.2012, 16:49 | #8 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
Зачем вообще здесь x ?
|
27.12.2012, 17:11 | #9 |
Форумчанин
Регистрация: 16.01.2011
Сообщений: 325
|
Код:
|
27.12.2012, 17:18 | #10 |
Пользователь
Регистрация: 27.12.2012
Сообщений: 15
|
а значение какого регистра мы считываем вот этим call ds:scanf?
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Вывод сообщения в assembler | Hrum | Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM | 0 | 09.11.2012 23:45 |
Вывод сообщения в трей | Avalon_Albio | Помощь студентам | 0 | 17.04.2012 10:02 |
вывод сообщения по дате | WALL | Помощь студентам | 9 | 09.11.2010 09:28 |
Вывод сообщения по времени | DimOn4Ik | БД в Delphi | 12 | 31.03.2010 23:00 |
Вывод сообщения об ошибке... | Ho-ho | Помощь студентам | 12 | 02.11.2009 16:54 |