Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.02.2010, 22:40   #1
asmcc
Новичок
Джуниор
 
Регистрация: 16.02.2010
Сообщений: 2
По умолчанию Вывести числа в обратном порядке

Помогите написать программу.Программа должна вывести числа в обратном порядке.(числа уже заданны в массиве из 5 элементов).Вот исходный код проги тока до конца довести не могу,толком со стеком разобраться не могу push,pop.
Код:
#include "stdafx.h" 
#include <conio.h> 
int a[5]={12,23,43,12,1}; 
int i; 


int _tmain(int argc, _TCHAR* argv[]) 
{ 
for (i=0;i<5;i++) 
printf(" %d",a); 
_asm 
{ 
mov eax,5 
mov ebx,0 
push eax; 
push ebx; 
pop eax; 
pop ebx; 


} 
printf("\n"); 
for (i=0;i<5;i++) 
printf(" %d",a); 
getch(); 

return 0; 
}

Последний раз редактировалось Stilet; 17.02.2010 в 15:49.
asmcc вне форума Ответить с цитированием
Старый 17.02.2010, 03:54   #2
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

asmcc
Как-то так
Код:
int a[5]={12,23,43,12,1}; 
int i;
int _tmain(int argc, _TCHAR* argv[]) 
{ 
for (i=0;i<5;i++) 
printf(" %d",a); 
_asm 
{ mov eax,a[0*4]; первый элемент меняю с пятым 
xchg eax,a[4*4]
mov a[0*4],eax 
 mov eax,a[1*4] ; второй элемент меняю с четвертым
xchg eax,a[3*4]
mov a[1*4],eax 
} 
printf("\n"); 
for (i=0;i<5;i++) 
printf(" %d",a);
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2010, 13:30   #3
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

asmcc
Вталкывай в стек спомощью push
только (a , b , c) это переменные
push a
push b
push с

pop с
pop b
pop a
Doholyan вне форума Ответить с цитированием
Старый 17.02.2010, 13:37   #4
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Doholyan
и что в вашем варианте изменится? Как были A, B и С на своих местах так и останутся, чем мой вариант вас не устроил?
Для варианта (a, b, c) правильно будет
Код:
push a
push с
pop a
pop с
а переменная b и так на своем месте

Последний раз редактировалось Mikl___; 17.02.2010 в 13:52.
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2010, 14:34   #5
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

если конечно три переменных то средняя при любом обстоятельстве остаеться на своем месте....
почему Вы так решили что остануться на своих то местах....для стека то не важно имя переменной...он, то записывает только число
ваш вариант не плох...но сложен...
Вот примерно то что я вижу:

щас попробую написать код
Doholyan вне форума Ответить с цитированием
Старый 17.02.2010, 14:48   #6
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Doholyan
Цитата:
почему Вы так решили что остануться на своих то местах....для стека то не важно имя переменной
потому что для push и pop важно не только имя переменной, но и порядок в котором они выполняются, посмотри внимательно, правильный вариант я уже написал в #4
Не думал что команды xchg и mov это очень сложно
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2010, 15:33   #7
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

Вот код:CSEG segment
org 100h

Start:
mov Ad,10
mov Bd,15
mov Cd,20

push ad
push Bd
push Cd

pop Ad
pop Bd
pop Cd

mov ah,10h
int 16h
int 20h

Ad dw 0
Bd dw 0
Cd dw 0

CSEG ends
end Start

Проверил отладчиком AfdPro
все работает

Последний раз редактировалось Doholyan; 17.02.2010 в 18:35.
Doholyan вне форума Ответить с цитированием
Старый 17.02.2010, 15:48   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,139
По умолчанию

Doholyan
а теперь к своей программке приделай вывод на экран и убедись, что все осталось на своих местах, лучше с однозначными числами, посмотри до и после
Mikl___ вне форума Ответить с цитированием
Старый 17.02.2010, 15:53   #9
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
Проверил отладчиком AfdPro
все работает
Гм... трудно сказать как вы проверяли, но переменные в любом случае останутся на своих местах.

Может хотя бы вытаскивать из стека следует в другом порядке ?
Код:
pop Ad
pop Bd
pop Cd
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 17.02.2010, 17:23   #10
Doholyan
Форумчанин
 
Регистрация: 26.04.2009
Сообщений: 270
По умолчанию

проверил по шаговой...явно видно как число помещаються в стек.
переменные не беру в расчет так как условия задания у ASMCC "вывести ЧИСЛА в обратном порядке"
Если выталкивать в том же порядке то вообще не чего не измениться а так у нас получаеться что:
в начале мы имеем
Ad=10
Bd=15
Cd=20
Dd=25
после мы будем иметь
Ad=25
Bd=20
Cd=15
Dd=10
Для более наглядного сейчас изменю код с четырьмя числами.
CSEG segment
org 100h

Start:
mov Ad,10
mov Bd,15
mov Cd,20
mov Dd,25

push ad
push Bd
push Cd
push Dd

pop Ad
pop Bd
pop Cd
pop Dd

mov ah,10h
int 16h
int 20h

Ad dw 0
Bd dw 0
Cd dw 0
Dd dw 0
CSEG ends
end Start
тоесть условия "ВЫВЕСТИ числа в обратном порядке" выполненно

Последний раз редактировалось Doholyan; 17.02.2010 в 18:34.
Doholyan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите вывести строку на экран в обратном порядке(TASM .small) depocomp Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 13 21.05.2009 11:22
заданную строку записать в обратном порядке Defa4ka Помощь студентам 1 13.05.2009 11:50
печать страниц в обратном порядке Олекса Microsoft Office Word 4 30.03.2009 09:45
В обратном порядке mari.ha Общие вопросы C/C++ 7 25.12.2008 21:36