Форум программистов, компьютерный форум, киберфорум
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 24.05.2010
Сообщений: 3

Необходимо создать программу для перевода стандартных операций языка си в ассемблер

24.05.2010, 09:53. Показов 1767. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
тема работа - взять стандартные операции языка си:

Условные операторы

Имеются две формы условных операторов:

if (выражение) оператор
if (выражение) оператор else оператор


Оператор while

while (выражение) оператор


Оператор do

do оператор while (выражение)


Оператор for

Оператор for имеет форму

(выражение1;выражение2;выражение3)операт ор


Оператор for эквивалентен следующему:

выражение1;
while (выражение2) {
оператор
выражение3;
}


Оператор switch

switch (выражение) оператор


Оператор break

break;


Оператор continue

continue;


Оператор возврата

return;
return выражение;


Оператор goto

goto идентификатор1



и из них получить ассемблерный код, тоесть мы выбираем один из операторов, как результат получаем код на языке ассемблера соответствующий данному оператору.
если что я всегда в асе - 451541052.
большое спасибо всем откликнувшимся :-)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.05.2010, 09:53
Ответы с готовыми решениями:

Создать программу, которая содержит в себе команды обработки строк языка ассемблер
Создать програму которая содержит в себе команды обработки строк языка асемблер. Выполнить введение строки из 40 символов. Слова в строке...

Создать прогу для перевода языка Java в C++
Сторонники языков Java и C++ часто спорят о том, какой язык лучше для решения олимпиадных задач. Одни говорят, что в Java есть масса...

Создать класс Payment, рассчитать путем переопределения стандартных операций
Здравствуйте. Получил задание. Создать класс Payment (зарплата). В классе должны быть представлены поля: фамилия-имя-отчество, оклад,...

4
69 / 74 / 0
Регистрация: 15.12.2008
Сообщений: 302
24.05.2010, 20:59
вы свой компилятор пишите?
0
28 / 24 / 0
Регистрация: 03.02.2010
Сообщений: 66
25.05.2010, 05:08
Assembler
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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
if
  cmp eax,1
  jne @false
  ;@true: 
  ;прыжок произойдет если сравнение дало отрицательный результат.
  @false:
  ;тут еще какие то инструкции в случае если eax!=1 
if-else
  cmp eax,1
  je @true
  ;@false - метка не нужна.
  ;процессор сам к этой инструкции перейдет
  ;если eax!=1 
  @true:
  ;тут инструкции если условие выполняется.
while 
  ;while(eax<100)
  cmp eax,100
  jae @endwhile  ; в целом напоминает break  - if(eax >= 100) break;
  @while:
  
  inc eax
  cmp eax,100
  jb @while
  @endwhile:  
  ; все отличие от этого цикла от do-while в том что он проверяет значение сразу.
do-while
  ;do{}while(eax<100);
  @dowhile:
  ;какие либо инструкции
  inc eax
  cmp eax,100
  jb @dowhile
  
for
  ; for(int i=0;i<100;i++)
  push 0 ; это и есть i.
  cmp [esp],100 ; это вобще бредово - можно пропустить.
  jae @endfor
  @for:
  ;some instructions
  inc [esp]
  cmp [esp],100
  jb @for
  @endfor:
  ;в целом очень расточительный цикл. Обычно выделяется регистр и цикл работает как while.
  
switch
  cmp eax,1
  je label1
  cmp eax,2
  je label2
  cmp eax,3 
  je label3
  ... 
  ;или еще вот такой вариант есть.
  
  cmp eax,1
  jne @next1
  ;some instructions
  jmp @endswitch
  @next1:
  cmp eax,2
  jne @next2
  ;some instructions
  jmp @endswitch    ; а вот вам и break - простой jmp - безусловный прыжок к концу цикла/сравнений
  @next2:
  cmp eax,1
  jne @next3
  ;some instructions
  jmp @endswitch
  @next3:
  @endswitch:
  
break 
 ; это просто прыжок к концу цикла 
 jmp @endcycle
 
continue
 ;принудительный переход к концу итерации: 
 ;на примере do-while
 
 @dowhile:
 ;some instructions
  cmp edx,38547 ; хитромудрое сравнение
  je @continue  ; вот и прыжок к continue. Просто для примера. Это мог быть и безусловный прыжок jmp.  
 ;some other instuctions
  @continue:
  inc eax
  cmp eax,100
  jb @dowhile 
  
  
return
  ; в ассемблере даже есть специальная команда для этого - ret/retn/iret/iretd
  ; первые две для простых смертных функций, вторые две для обработчиков прерываний.
  
  ;int _stdcall SomeProc(int a){ return a;} наиболее частый принцип вызова функции. 
  ;_stdcall - функция сам за собой убирает. Это значит что в конце из к еsp будет прибавлено
  ;ровно столько сколько байт занимали аргументы.
  someproc: 
  mov eax,[esp];аргументы передаются через стек в обратном порядке - у нас он один. 
  retn 4       ; 1 dword = 4 байта. esp+=4;
  
  ; в случае с _cdecl 
  someproc: 
  mov eax,[esp]
  retn          ; вычтет вызывающий код - он чистит стек в этом случае. 
  
  ; в x86 архитектуре принято возвращать целые значения в al/ax/eax/rax
  ; а float и double в st0 
  ; float _stdcall SomeProc(float A)
  someproc:
  fld dword[A]
  retn 4
  
  ;double _stdcall SomeProc(double A)
  someproc:
  fld qword[A]
  retn 4 
  ; Тип принимаемого аргумента не важен. Сопроцессор в своих регистрах значения храни в FP80 формате. 
  ; При сохранение в память - просто конвертирует до нужного размера.
  
goto
  ; самый тривиальный оператор 
  Jxx Lable
  ; jxx - любой вид Jump-а
  JMP Label ; например.
Вот приблизительно и все. Возможно где то это не самые лучшие варианты, но самые тривиальные уж точно.
1
 Аватар для nec
15 / 15 / 5
Регистрация: 19.05.2010
Сообщений: 41
25.05.2010, 08:11
Ivan_32, чуть-чуть дополню

Assembler
1
2
3
4
5
6
7
8
9
10
if-else
  cmp eax,1
  je @true
  ;@false - метка не нужна.
  ;процессор сам к этой инструкции перейдет
  ;если eax!=1
  jmp @endif ; это чтобы блок else не выполнился      <---- вот тут
  @true:
  ;тут инструкции если условие выполняется.
  @endif
2
0 / 0 / 0
Регистрация: 24.05.2010
Сообщений: 3
25.05.2010, 16:44  [ТС]
нет не компилятор :-)
работа с первого взгляда простая, читать исходные конструкции которые написаны выше и генерировать из них код ассемблера. например мы открываем шаблон какого то из операторов и подставляем там свои значения, нажимаем кнопочку и получаем код ассемблера с этими нужными нам циферками.
я себе представляю эту программку так, препод внятно ничего объяснить не может.. :-)

Добавлено через 1 час 22 минуты
может есть желающие сделать прогу на визуал студио например, или в билдере :-)
если предложение интересно - в личку или в асю 451541052 :-)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.05.2010, 16:44
Помогаю со студенческими работами здесь

Создать программу для перевода в обратный и дополнительный коды
Здравствуйте! Мне нужно написать программу для перевода в обратный и дополнительный коды. У меня есть листинг из лабораторной, но я опять...

Создать программу в delphi 7 для перевода из 10-й системы счисления в 16-ю
Создать программу в delphi 7 для перевода из 10-й системы счисления в 16-ю.Очень прошу вас,оч надо).С объяснением кода.Спасибо)

Создать программу для перевода из десятичной системы исчисления в восьмеричную
Помогите пожалуйста создать программу для перевода из десятичной системы исчисления в восьмеричную (программа для 8 класса)

Создать программу расчета выражения для действий +, -, *, / с учетом приоритетов операций
&quot;Создать программу расчета выражения для действий +, -, *, / с учетом приоритетов операций&quot; Подскажите что именно меня надо сделать...

Для чего необходимо переопределение стандартных типов?
Добрый вечер, часто сталкиваюсь с переопределением имен стандартных типов особенно в С для микроконтроллеров, вроде такого: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru