<?xml version="1.0" encoding="utf-8"?>

<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
	<channel>
		<title>Форум программистов и сисадминов Киберфорум - Блоги - Daha-Doom</title>
		<link>https://www.cyberforum.ru/blogs/1037652/</link>
		<description>КиберФорум - форум программистов, системных администраторов, администраторов баз данных, компьютерный форум, форум по электронике и бытовой технике, обсуждение софта. Бесплатная помощь в решении задач по программированию и наукам, решение проблем с компьютером, операционными системам</description>
		<language>ru</language>
		<lastBuildDate>Tue, 15 Sep 2026 05:14:37 GMT</lastBuildDate>
		<generator>vBulletin</generator>
		<ttl>60</ttl>
		<image>
			<url>https://www.cyberforum.ru//cyberstatic.net/images/misc/rss.jpg</url>
			<title>Форум программистов и сисадминов Киберфорум - Блоги - Daha-Doom</title>
			<link>https://www.cyberforum.ru/blogs/1037652/</link>
		</image>
		<item>
			<title>Подключение dll, написанной на ассемблере к проекту C#</title>
			<link>https://www.cyberforum.ru/blogs/1037652/7851.html</link>
			<pubDate>Wed, 14 Dec 2022 08:52:56 GMT</pubDate>
			<description>Дали задание, чтобы расчёт дискриминантов проводился на ассемблере и подключался к основному...</description>
			<content:encoded><![CDATA[<div>Дали задание, чтобы расчёт дискриминантов проводился на ассемблере и подключался к основному проекту<br />
<br />
<div class="codeblock"><table class="asm"><thead><tr><td colspan="2" id="389075071"  class="head">Assembler</td></tr></thead><tbody><tr class="li1"><td><div id="389075071" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1">format PE64 GUI <span class="nu0">5.0</span> DLL
entry DllEntryPoint
&nbsp;
include <span class="st0">'win64a.inc'</span>
&nbsp;
<span class="kw5">section</span> <span class="st0">'.text'</span> <span class="kw5">code</span> readable executable
&nbsp;
proc DllEntryPoint hinstDLL<span class="sy1">,</span>fdwReason<span class="sy1">,</span>lpvReserved
&nbsp; <span class="kw1">mov</span> &nbsp; <span class="kw4">eax</span><span class="sy1">,</span> TRUE &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
&nbsp; <span class="kw1">ret</span>
endp
&nbsp;
b <span class="kw5">equ</span> <span class="kw4">xmm0</span> <span class="co1">;регистр с плавающей точкой</span>
a <span class="kw5">equ</span> <span class="kw4">xmm1</span>
c <span class="kw5">equ</span> <span class="kw4">xmm2</span>
d <span class="kw5">equ</span> <span class="kw4">xmm3</span>
&nbsp;
getCubicD0asm<span class="sy1">:</span>
&nbsp;
&nbsp; <span class="co1">; b^2 - 3 * a * c</span>
&nbsp; <span class="kw3">mulsd</span> a<span class="sy1">,</span> c <span class="co1">;скалярный дабл a = a * c</span>
&nbsp; <span class="kw3">mulsd</span> b<span class="sy1">,</span> b <span class="co1">; b = b * b</span>
&nbsp; <span class="kw3">movsd</span> c<span class="sy1">,</span> a <span class="co1">; c = a * c</span>
&nbsp; <span class="kw3">addsd</span> c<span class="sy1">,</span> a <span class="co1">; c = 2 * a * c</span>
&nbsp; <span class="kw3">addsd</span> c<span class="sy1">,</span> a <span class="co1">; c = 3 * a * c</span>
&nbsp; <span class="kw3">subsd</span> b<span class="sy1">,</span> c <span class="co1">; b = b * b - 3 * a * c</span>
&nbsp; 
&nbsp; <span class="kw1">ret</span>
&nbsp; 
getCubicD1asm<span class="sy1">:</span>
&nbsp;
&nbsp; <span class="co1">; 2 * b^3 - 9 * a * b * c + 27 * a^2 * d</span>
&nbsp; <span class="kw3">mulsd</span> d<span class="sy1">,</span> a <span class="co1">; d = a * d</span>
&nbsp; <span class="kw3">mulsd</span> d<span class="sy1">,</span> a <span class="co1">; d = a^2 * d</span>
&nbsp; <span class="kw3">mulsd</span> a<span class="sy1">,</span> b <span class="co1">; a = a * b</span>
&nbsp; <span class="kw3">mulsd</span> a<span class="sy1">,</span> c <span class="co1">; a = a * b * c</span>
&nbsp; <span class="kw1">mov</span> <span class="kw4">eax</span><span class="sy1">,</span> <span class="nu0">9</span>
&nbsp; <span class="kw3">cvtsi2sd</span> c<span class="sy1">,</span> <span class="kw4">eax</span> <span class="co1">; конвертируем eax в double и записываем в c c=9</span>
&nbsp; <span class="kw3">mulsd</span> a<span class="sy1">,</span> c <span class="co1">; a = 9 * a * b * c</span>
&nbsp; <span class="kw1">mov</span> <span class="kw4">eax</span><span class="sy1">,</span> <span class="nu0">27</span>
&nbsp; <span class="kw3">cvtsi2sd</span> c<span class="sy1">,</span> <span class="kw4">eax</span> <span class="co1">; c = 27</span>
&nbsp; <span class="kw3">mulsd</span> d<span class="sy1">,</span> c <span class="co1">; d = 27 * a^2 * d</span>
&nbsp; <span class="kw3">movsd</span> c<span class="sy1">,</span> b <span class="co1">; c = b</span>
&nbsp; <span class="kw3">mulsd</span> b<span class="sy1">,</span> c
&nbsp; <span class="kw3">mulsd</span> b<span class="sy1">,</span> c <span class="co1">; b = b^3</span>
&nbsp; <span class="kw3">addsd</span> b<span class="sy1">,</span> b <span class="co1">; b = 2 * b^3</span>
&nbsp; <span class="kw3">subsd</span> b<span class="sy1">,</span> a <span class="co1">; b = 2* b^3 - 9 * a * b * c</span>
&nbsp; <span class="kw3">addsd</span> b<span class="sy1">,</span> d <span class="co1">; b = 2 * b^3 - 9 * a * b * c + 27 * a^2 * d</span>
&nbsp; 
&nbsp; <span class="kw1">ret</span>
&nbsp;
&nbsp;
<span class="kw5">section</span> <span class="st0">'.edata'</span> <span class="kw5">export</span> <span class="kw5">data</span> readable
&nbsp;
&nbsp; <span class="kw5">export</span> <span class="st0">'CubicD.DLL'</span><span class="sy1">,</span>\
&nbsp; &nbsp; getCubicD0asm<span class="sy1">,</span> <span class="st0">'getCubicD0asm'</span><span class="sy1">,</span>\
&nbsp; &nbsp; getCubicD1asm<span class="sy1">,</span> <span class="st0">'getCubicD1asm'</span>
&nbsp;
<span class="kw5">section</span> <span class="st0">'.reloc'</span> fixups <span class="kw5">data</span> discardable</pre></td></tr></table></div></td></tr></tbody></table></div><div class="codeblock"><table class="csharp"><thead><tr><td colspan="2" id="250881698"  class="head">C#</td></tr></thead><tbody><tr class="li1"><td><div id="250881698" style="height: 350px" class="codeframe"><table><tr class="li1"><td class="ln" style="padding: 0px 10px 0px 5px;"><pre class="de1">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
</pre></td><td class="de1"><pre class="de1"><span class="kw1">using</span> <span class="co3">System</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Collections.Generic</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.ComponentModel</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Data</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Drawing</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Linq</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Text</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Threading.Tasks</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Numerics</span><span class="sy0">;</span>
<span class="kw1">using</span> <span class="co3">System.Windows.Forms</span><span class="sy0">;</span>
&nbsp;
<span class="kw1">namespace</span> Cubic
<span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">public</span> <span class="kw1">partial</span> <span class="kw4">class</span> Form1 <span class="sy0">:</span> Form
&nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">public</span> Form1<span class="br0">&#40;</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; InitializeComponent<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">void</span> button1_Click<span class="br0">&#40;</span><span class="kw4">object</span> sender, EventArgs e<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw4">double</span> a, b, c, d, d0, d1<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Complex C<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Complex x1, x2, x3<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Complex xi <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">3</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; a <span class="sy0">=</span> b <span class="sy0">=</span> c <span class="sy0">=</span> <span class="nu0">1</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d <span class="sy0">=</span> <span class="sy0">-</span><span class="nu0">10</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; xi <span class="sy0">=</span> <span class="br0">&#40;</span><span class="sy0">-</span><span class="nu0">1</span> <span class="sy0">+</span> Complex<span class="sy0">.</span><span class="me1">Sqrt</span><span class="br0">&#40;</span>xi<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d0 <span class="sy0">=</span> GetCubicD0<span class="br0">&#40;</span>b, a, c<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; d1 <span class="sy0">=</span> GetCubicD1<span class="br0">&#40;</span>b, a, c, d<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//d0 = GetCubicD0asm(b, a, c);</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">//d1 = GetCubicD1asm(b, a, c, d);</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span> <span class="br0">&#40;</span>d0 <span class="sy0">==</span> <span class="nu0">0</span> <span class="sy0">&amp;&amp;</span> d1 <span class="sy0">==</span> <span class="nu0">0</span><span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x1 <span class="sy0">=</span> x2 <span class="sy0">=</span> x3 <span class="sy0">=</span> <span class="sy0">-</span>b <span class="sy0">/</span> <span class="br0">&#40;</span><span class="nu0">3</span> <span class="sy0">*</span> a<span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">else</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C <span class="sy0">=</span> Math<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>d1, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="nu0">4</span> <span class="sy0">*</span> Math<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>d0, <span class="nu0">3</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C <span class="sy0">=</span> <span class="br0">&#40;</span>d1 <span class="sy0">+</span> Complex<span class="sy0">.</span><span class="me1">Sqrt</span><span class="br0">&#40;</span>C<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="nu0">2</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C <span class="sy0">=</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>C, <span class="nu0">1.0</span> <span class="sy0">/</span> <span class="nu0">3.0</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x1 <span class="sy0">=</span> <span class="sy0">-</span><span class="br0">&#40;</span><span class="br0">&#40;</span>b <span class="sy0">+</span> C <span class="sy0">+</span> d0 <span class="sy0">/</span> C<span class="br0">&#41;</span> <span class="sy0">/</span> <span class="br0">&#40;</span><span class="nu0">3</span> <span class="sy0">*</span> a<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x2 <span class="sy0">=</span> <span class="sy0">-</span><span class="br0">&#40;</span><span class="br0">&#40;</span>b <span class="sy0">+</span> C <span class="sy0">*</span> xi <span class="sy0">+</span> d0 <span class="sy0">/</span> <span class="br0">&#40;</span>C <span class="sy0">*</span> xi<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="br0">&#40;</span><span class="nu0">3</span> <span class="sy0">*</span> a<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; x3 <span class="sy0">=</span> <span class="sy0">-</span><span class="br0">&#40;</span><span class="br0">&#40;</span>b <span class="sy0">+</span> C <span class="sy0">*</span> xi <span class="sy0">*</span> xi <span class="sy0">+</span> d0 <span class="sy0">/</span> <span class="br0">&#40;</span>C <span class="sy0">*</span> xi <span class="sy0">*</span> xi<span class="br0">&#41;</span><span class="br0">&#41;</span> <span class="sy0">/</span> <span class="br0">&#40;</span><span class="nu0">3</span> <span class="sy0">*</span> a<span class="br0">&#41;</span><span class="br0">&#41;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C <span class="sy0">=</span> a <span class="sy0">*</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>x1, <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy0">+</span> b <span class="sy0">*</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>x1, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">+</span> c <span class="sy0">*</span> x1 <span class="sy0">+</span> d<span class="sy0">;</span> <span class="co1">//Вывести на формулу 1 * x1^3 + 1 * x1^2 + 1 + x1 + (-10) = C;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C <span class="sy0">=</span> a <span class="sy0">*</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>x2, <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy0">+</span> b <span class="sy0">*</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>x2, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">+</span> c <span class="sy0">*</span> x2 <span class="sy0">+</span> d<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; C <span class="sy0">=</span> a <span class="sy0">*</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>x3, <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy0">+</span> b <span class="sy0">*</span> Complex<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>x3, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">+</span> c <span class="sy0">*</span> x3 <span class="sy0">+</span> d<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">double</span> GetCubicD0<span class="br0">&#40;</span><span class="kw4">double</span> b, <span class="kw4">double</span> a, <span class="kw4">double</span> c<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> Math<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>b, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="nu0">3</span> <span class="sy0">*</span> a <span class="sy0">*</span> c<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp;
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">private</span> <span class="kw4">double</span> GetCubicD1<span class="br0">&#40;</span><span class="kw4">double</span> b, <span class="kw4">double</span> a, <span class="kw4">double</span> c, <span class="kw4">double</span> d<span class="br0">&#41;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span> <span class="nu0">2</span> <span class="sy0">*</span> Math<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>b, <span class="nu0">3</span><span class="br0">&#41;</span> <span class="sy0">-</span> <span class="nu0">9</span> <span class="sy0">*</span> a <span class="sy0">*</span> b <span class="sy0">*</span> c <span class="sy0">+</span> <span class="nu0">27</span> <span class="sy0">*</span> Math<span class="sy0">.</span><span class="me1">Pow</span><span class="br0">&#40;</span>a, <span class="nu0">2</span><span class="br0">&#41;</span> <span class="sy0">*</span> d<span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
<span class="br0">&#125;</span></pre></td></tr></table></div></td></tr></tbody></table></div>Из ассемблерного кода сделала dll и теперь не знаю как подключить её к C#. При добавлении через ссылки выдаёт ошибку &quot;Убедитесь, что файл доступен, и является допустимой сборкой или компонентом COM&quot;</div>

]]></content:encoded>
			<dc:creator>Daha-Doom</dc:creator>
			<guid isPermaLink="true">https://www.cyberforum.ru/blogs/1037652/7851.html</guid>
		</item>
	</channel>
</rss>
