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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.09.2012, 15:40   #1
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Вопрос Фрагмент паскаля в асм

Доброго времени суток=) подскажите пожалуйста, как будет выглядеть вот такой фрагмент паскаля на ассемблере?

Код:
if q=0 then
w:=1;
if q=1 then
w:=2;
if q=2 then
w:=4;
.:DEZ:. вне форума Ответить с цитированием
Старый 13.09.2012, 16:44   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Ассемблеры - они разные бывают.
Вам под какой процессор/ОС/компилятор ?

во-вторых, какие типы данных у переменных q и w ?


так, навскидку - компилятор TurboPascal (для var q, w : word) :
Код:
PROGRAM.3: if q=0 then
  cs:000F 833E500000     cmp    word ptr [0050],0000
  cs:0014 7506           jne    PROGRAM.5 (001C)
PROGRAM.4:  w:=1;
  cs:0016 C70652000100   mov    word ptr [0052],0001
PROGRAM.5: if q=1 then
  cs:001C 833E500001     cmp    word ptr [0050],0001
  cs:0021 7506           jne    PROGRAM.7 (0029)
PROGRAM.6:  w:=2;
  cs:0023 C70652000200   mov    word ptr [0052],0002
PROGRAM.7: if q=2 then
  cs:0029 833E500002     cmp    word ptr [0050],0002
  cs:002E 7506           jne    PROGRAM.9 (0036)
PROGRAM.8:  w:=4;
  cs:0030 C70652000400   mov    word ptr [0052],0004
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.09.2012, 18:08   #3
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
По умолчанию

для masm32) тип данных integer)

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Ассемблеры - они разные бывают.
Вам под какой процессор/ОС/компилятор ?

во-вторых, какие типы данных у переменных q и w ?


так, навскидку - компилятор TurboPascal (для var q, w : word) :
Код:
PROGRAM.3: if q=0 then
  cs:000F 833E500000     cmp    word ptr [0050],0000
  cs:0014 7506           jne    PROGRAM.5 (001C)
PROGRAM.4:  w:=1;
  cs:0016 C70652000100   mov    word ptr [0052],0001
PROGRAM.5: if q=1 then
  cs:001C 833E500001     cmp    word ptr [0050],0001
  cs:0021 7506           jne    PROGRAM.7 (0029)
PROGRAM.6:  w:=2;
  cs:0023 C70652000200   mov    word ptr [0052],0002
PROGRAM.7: if q=2 then
  cs:0029 833E500002     cmp    word ptr [0050],0002
  cs:002E 7506           jne    PROGRAM.9 (0036)
PROGRAM.8:  w:=4;
  cs:0030 C70652000400   mov    word ptr [0052],0004
Хм, а как само условие прописать? например:
if q=2 then
w:=4;

Последний раз редактировалось Stilet; 13.09.2012 в 20:57.
.:DEZ:. вне форума Ответить с цитированием
Старый 13.09.2012, 20:58   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
а как само условие прописать?
А ты что совсем не читаешь что пишут?
Код:
cmp    word ptr [0050],0002
 jne    PROGRAM.9 (0036)
Изучи эти команды и поймешь как прописывать.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2012, 05:36   #5
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Вопрос

Цитата:
Сообщение от Stilet Посмотреть сообщение
А ты что совсем не читаешь что пишут?
Код:
cmp    word ptr [0050],0002
 jne    PROGRAM.9 (0036)
Изучи эти команды и поймешь как прописывать.
тут тип данных другой, а надо integer! я знаю что эти команды делают, но не понимаю как прописать в ручную всё это, а не компилятором. Подскажите пожалуйста.
.:DEZ:. вне форума Ответить с цитированием
Старый 14.09.2012, 06:00   #6
Goodwin98
equ asm
Участник клуба
 
Аватар для Goodwin98
 
Регистрация: 02.05.2009
Сообщений: 1,605
По умолчанию

Цитата:
тут тип данных другой, а надо integer!
ну писец. Вместо word ptr теперь нельзя написать dword ptr
Какой вопрос - такой ответ. Не забываем пользоваться поиском, гуглом.
Помощь в выполнении работ по ассемблеру ICQ:2725322O4
Goodwin98 вне форума Ответить с цитированием
Старый 14.09.2012, 08:07   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
я знаю что эти команды делают, но не понимаю как прописать в ручную
Нелогичная отмазка.
Код:
q dw ?
w dw ?
...
 cmp [q],2
 jne no
 mov [w],4
no:
...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.09.2012, 10:22   #8
Mikl___
Участник клуба
 
Регистрация: 11.01.2010
Сообщений: 1,162
По умолчанию

проще нужно быть!
Код:
mov cx,q
mov w,1
shl w,cl
и никаких сравнений и переходов
Mikl___ вне форума Ответить с цитированием
Старый 14.09.2012, 11:12   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Ну а если не степени двойки, то можно так:

Код:
trans dw 1,2,4
....
lea si,trans
add si, q
add si, q
mov w, [si]
хотя с байтами и xlat будет ещё короче)
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 15.09.2012, 13:29   #10
.:DEZ:.
Пользователь
 
Регистрация: 03.06.2012
Сообщений: 28
Вопрос

Спасибо ребята огромное я разобрался. Ещё можете тут подсказать?
на паскале это выглядит так:
Код:
a,g,q:integer;
r,k: string;
.............
readln(a);
Str(a,r);
g:= Length(r);
k:=Copy(r,g,1);
q:= StrToInt(k);
Ввод и копи я понимаю как сделать, а вот Str,Length и StrToInt не совсем может на ассемблере всё проще можно сделать или тут только расписывать эти функции надо?

Последний раз редактировалось .:DEZ:.; 15.09.2012 в 14:01.
.:DEZ:. вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
меню(асм) A.S.W Фриланс 1 21.08.2011 20:49
асм (с%о) Ислам Помощь студентам 7 21.05.2011 09:11
Линк c++ и асм Farrel Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 9 12.05.2011 16:19
из C++ в асм) как вытащить нужный фрагмент? askerpro Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 28.12.2010 04:41