<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AGeraltFromRivia%2F%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%B0%D1%81%D0%BC_05</id>
		<title>Участник:GeraltFromRivia/Лекция асм 05 - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/index.php?action=history&amp;feed=atom&amp;title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA%3AGeraltFromRivia%2F%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%B0%D1%81%D0%BC_05"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:GeraltFromRivia/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%B0%D1%81%D0%BC_05&amp;action=history"/>
		<updated>2026-05-30T21:46:00Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:GeraltFromRivia/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%B0%D1%81%D0%BC_05&amp;diff=27169&amp;oldid=prev</id>
		<title>GeraltFromRivia: Новая страница: «Как получить аргументы ком. строки?  - Скомпилиться как си-шная прогррамма, тогда как у лю...»</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A3%D1%87%D0%B0%D1%81%D1%82%D0%BD%D0%B8%D0%BA:GeraltFromRivia/%D0%9B%D0%B5%D0%BA%D1%86%D0%B8%D1%8F_%D0%B0%D1%81%D0%BC_05&amp;diff=27169&amp;oldid=prev"/>
				<updated>2012-06-28T14:49:14Z</updated>
		
		<summary type="html">&lt;p&gt;Новая страница: «Как получить аргументы ком. строки?  - Скомпилиться как си-шная прогррамма, тогда как у лю...»&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Как получить аргументы ком. строки?&lt;br /&gt;
 - Скомпилиться как си-шная прогррамма, тогда как у любой си-шной проги три аргумента на входе, но будут некие проблемки = )&lt;br /&gt;
 - исп.фишку под названием msvcrt.dll (runtime, с которой запускается Винда), чтобы ее использовать, надо написать некоторый кусок кода...&lt;br /&gt;
 - - теперь все заменено на -//-80, 90,...&lt;br /&gt;
 - все разобрать ручками. и получить ком. строку как она есть. Однако все надо обрабатывать самим(кавычки и так далее). Хороший пример для практики = )&lt;br /&gt;
&lt;br /&gt;
Как вызывать функции и передавать аргументы мы говорили, но не обсуждали, как создавать лок. переменные.&lt;br /&gt;
где их выделять?&lt;br /&gt;
;размещать переменные в стеке:&lt;br /&gt;
     -&amp;gt;	push	ebx&lt;br /&gt;
	...&lt;br /&gt;
	pop	ebx&lt;br /&gt;
	ret&lt;br /&gt;
;пусть надо выделить на стеке 32 байта, помним, что потом всю память надо потом вернуть:&lt;br /&gt;
	sub	esp, 20h&lt;br /&gt;
	push	ebx&lt;br /&gt;
	...&lt;br /&gt;
	mov	[esp + 4], ecx&lt;br /&gt;
	;mov	[esp + 4 + 10h], ebx&lt;br /&gt;
	...&lt;br /&gt;
	pop	ebx&lt;br /&gt;
	add	esp, 20h&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
alloca - malloc, который не надо освобождать(все автоматически), как он работает, впринципе как sub_esp_*&lt;br /&gt;
&lt;br /&gt;
     -&amp;gt;	push	ebp&lt;br /&gt;
	move	ebp, esp&lt;br /&gt;
	sub	esp, 20h&lt;br /&gt;
	...&lt;br /&gt;
	|mov	esp, ebp&lt;br /&gt;
	|pop	ebx&lt;br /&gt;
	ret&lt;br /&gt;
&lt;br /&gt;
ebp хранит esp который давался на входе. Мы можем его изменять как хотим, потому как в конце все вернется на круги своя.&lt;br /&gt;
Что еще интересного можно сказать? комбинация mov+pop(выделено знаком &amp;quot;|&amp;quot;) можно заменить функцией leave;(однако две команды быстрее, но leave короче 1 байт против 3х)&lt;br /&gt;
&lt;br /&gt;
Какая у нас адресация в 32х байтном мире(через 16ти битный регистр)&lt;br /&gt;
	фразы ax, bx, cx, ... на экзамене повлекут непотребность...&lt;br /&gt;
;далее идет объяснение адресации....многго букафф...&lt;br /&gt;
&lt;br /&gt;
ebp + 4 - адрес возврата&lt;br /&gt;
ebp + 8 - адрес первого аргумента&lt;br /&gt;
ebp + c - адрес второго параметра&lt;br /&gt;
&lt;br /&gt;
     -&amp;gt;	push	ebp&lt;br /&gt;
	mov	ebp, esp&lt;br /&gt;
	sub	esp, 20h&lt;br /&gt;
&lt;br /&gt;
	cmp	[eax], 0	- неоднозначность. мы не знаем размер&lt;br /&gt;
	cmp	eax, 0	- неоднозначности нет, eax занимает 32 байта&lt;br /&gt;
&lt;br /&gt;
	mov	esp, ebp&lt;br /&gt;
	pop	ebp&lt;br /&gt;
	ret&lt;br /&gt;
	&lt;br /&gt;
;чем хорош yasm он выдаст ошибку(поругает вас), а не скомпилирует молча&lt;br /&gt;
;даже если не хватает регистров, esp лучке использовать крайне редко, о чем мы потом поговорим отдельно&lt;br /&gt;
&lt;br /&gt;
; однако если написать ТАКОЕ:&lt;br /&gt;
section	.bsc&lt;br /&gt;
	save	resd 1&lt;br /&gt;
&lt;br /&gt;
	mov	[save], esp&lt;br /&gt;
	...&lt;br /&gt;
	mov	esp, [save]&lt;br /&gt;
&lt;br /&gt;
;то можно использовать и стек&lt;br /&gt;
&lt;br /&gt;
Задачка - распарсить строчку типа &lt;br /&gt;
	C:\1.exe  param1      &amp;quot;param 2&amp;quot;&lt;br /&gt;
Win API называется как то так:&lt;br /&gt;
	Get Command Line A/W&lt;/div&gt;</summary>
		<author><name>GeraltFromRivia</name></author>	</entry>

	</feed>