青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

coreBugZJ

此 blog 已棄。

nasm x86 32位匯編實現 int64 帶符號 加 減 乘 除 比較大小

  1 
  2 
  3 // 畢業論文做 Pascal 編譯器,需要生成的32位 nasm 匯編代碼支持 64位帶符號整數
  4 
  5 // 幾個標號
  6 String line = genLabel( ip ) + "";
  7 String head = "              ";
  8 String heaA = "           .A ";
  9 String heaB = "           .B ";
 10 String heaC = "           .C ";
 11 String heaD = "           .D ";
 12 String heaE = "           .E ";
 13 
 14 
 15 
 16 // add 次棧頂+棧頂
 17 text.add( line + "pop eax" );
 18 text.add( head + "pop edx" );
 19 text.add( head + "add dword [esp], eax" );
 20 text.add( head + "adc dword [esp+4], edx" );
 21 
 22 
 23 // sub 次棧頂-棧頂
 24 text.add( line + "pop eax" );
 25 text.add( head + "pop edx" );
 26 text.add( head + "not eax" );
 27 text.add( head + "not edx" );
 28 text.add( head + "add eax, 1" );
 29 text.add( head + "adc edx, 0" );
 30 text.add( head + "add dword [esp], eax" );
 31 text.add( head + "adc dword [esp+4], edx" );
 32 
 33                                 
 34 // mul 次棧頂*棧頂                        
 35         // 乘數 X
 36 text.add( line + "mov ecx, dword [esp+12]" );
 37 text.add( head + "mov ebx, dword [esp+8]" );
 38         // 乘數 Y
 39 text.add( head + "mov edi, dword [esp+4]" );
 40 text.add( head + "mov esi, dword [esp]" );
 41         // 結果符號暫存于 dword [esp-8],正 1,負 -1
 42 text.add( head + "mov dword [esp-8], 1" );
 43         // 乘數 Y
 44 text.add( head + "cmp edi, 0" );
 45 text.add( head + "jge" + heaA );
 46         // 乘數 Y 取相反數
 47 text.add( head + "not esi" );
 48 text.add( head + "not edi" );
 49 text.add( head + "add esi, 1" );
 50 text.add( head + "adc edi, 0" );
 51 text.add( head + "neg dword [esp-8]" );
 52         // 乘數 X
 53 text.add( heaA + "cmp ecx, 0" );
 54 text.add( head + "jge" + heaB );
 55         // 乘數 X 取相反數
 56 text.add( head + "not ebx" );
 57 text.add( head + "not ecx" );
 58 text.add( head + "add ebx, 1" );
 59 text.add( head + "adc ecx, 0" );
 60 text.add( head + "neg dword [esp-8]" );
 61         // 無符號64位乘法
 62 text.add( heaB + "mov eax, ecx" );
 63 text.add( head + "mul esi" );
 64 text.add( head + "mov dword [esp-4], eax" );
 65 text.add( head + "mov eax, ebx" );
 66 text.add( head + "mul edi" );
 67 text.add( head + "add dword [esp-4], eax" );
 68 text.add( head + "mov eax, ebx" );
 69 text.add( head + "mul esi" );
 70 text.add( head + "add edx, dword [esp-4]" );
 71         // 設置結果符號
 72 text.add( head + "cmp dword [esp-8], 1" );
 73 text.add( head + "jz "  + heaD );
 74 text.add( head + "not eax" );
 75 text.add( head + "not edx" );
 76 text.add( head + "add eax, 1" );
 77 text.add( head + "adc edx, 0" );
 78 text.add( heaD + "add esp, 8" );
 79 text.add( head + "mov dword [esp], eax" );
 80 text.add( head + "mov dword [esp+4], edx" );
 81 
 82 
 83 // div 次棧頂/棧頂,取商
 84         // 絕對值相除,得到商的絕對值,異號得負
 85         // 結果符號暫存于 dword [esp-4],正 1,負 -1
 86 text.add( line + "mov dword [esp-4], 1" );
 87         // 除數 Y
 88 text.add( head + "cmp dword [esp+4], 0" );
 89 text.add( head + "jge" + heaA );
 90         // 除數 Y 取相反數
 91 text.add( head + "not dword [esp]" );
 92 text.add( head + "not dword [esp+4]" );
 93 text.add( head + "add dword [esp], 1" );
 94 text.add( head + "adc dword [esp+4], 0" );
 95 text.add( head + "neg dword [esp-4]" );
 96         // 被除數 X
 97 text.add( heaA + "cmp dword [esp+12], 0" );
 98 text.add( head + "jge" + heaB );
 99         // 被除數 X 取相反數
100 text.add( head + "not dword [esp+8]" );
101 text.add( head + "not dword [esp+12]" );
102 text.add( head + "add dword [esp+8], 1" );
103 text.add( head + "adc dword [esp+12], 0" );
104 text.add( head + "neg dword [esp-4]" );
105         // 循環次數
106 text.add( heaB + "mov ecx, 64" );
107         // 余數
108 text.add( head + "xor edx, edx" );
109 text.add( head + "xor eax, eax" );
110         // 商
111 text.add( head + "xor edi, edi" );
112 text.add( head + "xor esi, esi" );
113         // 循環
114 text.add( heaC + "shl dword [esp+8], 1" );
115 text.add( head + "rcl dword [esp+12], 1" );
116 text.add( head + "rcl eax, 1" );
117 text.add( head + "rcl edx, 1" );
118 text.add( head + "shl esi, 1" );
119 text.add( head + "rcl edi, 1" );
120 text.add( head + "mov ebx, eax" );
121 text.add( head + "sub ebx, dword [esp]" );
122 text.add( head + "mov ebx, edx" );
123 text.add( head + "sbb ebx, dword [esp+4]" );
124 text.add( head + "jl " + heaD );
125 text.add( head + "sub eax, dword [esp]" );
126 text.add( head + "sbb edx, dword [esp+4]" );
127 text.add( head + "add esi, 1" );
128 text.add( head + "adc edi, 0" );
129 text.add( heaD + "loop" + heaC );
130 text.add( head + "cmp dword [esp-4], 1" );
131 text.add( head + "jz " + heaE );
132 text.add( head + "not esi" );
133 text.add( head + "not edi" );
134 text.add( head + "add esi, 1" );
135 text.add( head + "adc edi, 0" );
136 text.add( heaE + "add esp, 8" );
137 text.add( head + "mov dword [esp], esi" );
138 text.add( head + "mov dword [esp+4], edi" );
139 
140 
141 // rem 次棧頂/棧頂,取余數
142         // 絕對值相除,得到余數的絕對值,符號與被除數相同
143         // 結果符號暫存于 dword [esp-4],正 1,負 -1
144 text.add( line + "mov dword [esp-4], 1" );
145         // 除數 Y
146 text.add( head + "cmp dword [esp+4], 0" );
147 text.add( head + "jge" + heaA );
148         // 除數 Y 取相反數
149 text.add( head + "not dword [esp]" );
150 text.add( head + "not dword [esp+4]" );
151 text.add( head + "add dword [esp], 1" );
152 text.add( head + "adc dword [esp+4], 0" );
153         // 被除數 X
154 text.add( heaA + "cmp dword [esp+12], 0" );
155 text.add( head + "jge" + heaB );
156         // 被除數 X 取相反數
157 text.add( head + "not dword [esp+8]" );
158 text.add( head + "not dword [esp+12]" );
159 text.add( head + "add dword [esp+8], 1" );
160 text.add( head + "adc dword [esp+12], 0" );
161 text.add( head + "neg dword [esp-4]" );
162         // 循環次數
163 text.add( heaB + "mov ecx, 64" );
164         // 余數
165 text.add( head + "xor edx, edx" );
166 text.add( head + "xor eax, eax" );
167         // 商
168 text.add( head + "xor edi, edi" );
169 text.add( head + "xor esi, esi" );
170         // 循環
171 text.add( heaC + "shl dword [esp+8], 1" );
172 text.add( head + "rcl dword [esp+12], 1" );
173 text.add( head + "rcl eax, 1" );
174 text.add( head + "rcl edx, 1" );
175 text.add( head + "shl esi, 1" );
176 text.add( head + "rcl edi, 1" );
177 text.add( head + "mov ebx, eax" );
178 text.add( head + "sub ebx, dword [esp]" );
179 text.add( head + "mov ebx, edx" );
180 text.add( head + "sbb ebx, dword [esp+4]" );
181 text.add( head + "jl " + heaD );
182 text.add( head + "sub eax, dword [esp]" );
183 text.add( head + "sbb edx, dword [esp+4]" );
184 text.add( head + "add esi, 1" );
185 text.add( head + "adc edi, 0" );
186 text.add( heaD + "loop" + heaC );
187 text.add( head + "cmp dword [esp-4], 1" );
188 text.add( head + "jz " + heaE );
189 text.add( head + "not eax" );
190 text.add( head + "not edx" );
191 text.add( head + "add eax, 1" );
192 text.add( head + "adc edx, 0" );
193 text.add( heaE + "add esp, 8" );
194 text.add( head + "mov dword [esp], eax" );
195 text.add( head + "mov dword [esp+4], edx" );
196 
197 
198 // cmp 比較 次棧頂 與 棧頂,> 1, == 0, < -1 
199 text.add( line + "pop eax" );
200 text.add( head + "pop edx" );
201 text.add( head + "not eax" );
202 text.add( head + "not edx" );
203 text.add( head + "add eax, 1" );
204 text.add( head + "adc edx, 0" );
205 text.add( head + "add eax, dword [esp]" );
206 text.add( head + "adc edx, dword [esp+4]" );
207 text.add( head + "cmp edx, 0" );
208 text.add( head + "jle" + heaB );
209 text.add( head + "mov ecx, 1" );
210 text.add( head + "jmp" + heaD );
211 text.add( heaB + "cmp edx, 0" );
212 text.add( head + "jl " + heaC );
213 text.add( head + "cmp eax, 0" );
214 text.add( head + "jz " + heaE );
215 text.add( head + "mov ecx, 1" );
216 text.add( head + "jmp" + heaD );
217 text.add( heaE + "xor ecx, ecx" );
218 text.add( head + "jmp" + heaD );
219 text.add( heaC + "mov ecx, -1" );
220 text.add( heaD + "mov dword [esp], ecx" );
221 
222 
223 
224 // 測試程序
225 /*
226         test int64
227         小心被優化而失去測試效果,盡管目前還優化不到這個程度。
228 */
229 const
230         A =   4123412341L// > max unsigned int32
231         B =   1111111111L// < max unsigned int32
232         C =  -4123412341L// -A
233         D =  -1111111111L// -B
234         E =   2L;
235         F =  -2L;
236         G =  10000000000L;
237 
238         U =  7;
239         V = -7;
240         X =  3;
241         Y = -3;
242 var
243         a, b : int64;
244         i    : int32;
245 begin
246         i := U;
247         writeln( i div X );
248         writeln( i mod X );
249         writeln( i div Y );
250         writeln( i mod Y );
251         i := V;
252         writeln( i div X );
253         writeln( i mod X );
254         writeln( i div Y );
255         writeln( i mod Y );
256         writeln( 'V' );
257 
258         a := A;
259         writeln( a + B );
260         writeln( a + C );
261         writeln( a + D );
262         writeln( a + E );
263         writeln( a + F );
264         writeln( a + G );
265         writeln( 'A');
266 
267         writeln( a - B );
268         writeln( a - C );
269         writeln( a - D );
270         writeln( a - E );
271         writeln( a - F );
272         writeln( a - G );
273         writeln( 'B');
274 
275         writeln( a * B );
276         writeln( a * C );
277         writeln( a * D );
278         writeln( a * E );
279         writeln( a * F );
280         writeln( a * G );
281         writeln( 'C');
282 
283         writeln( a div B );
284         writeln( a div C );
285         writeln( a div D );
286         writeln( a div E );
287         writeln( a div F );
288         writeln( a div G );
289         writeln( 'D');
290 
291         writeln( a mod B );
292         writeln( a mod C );
293         writeln( a mod D );
294         writeln( a mod E );
295         writeln( a mod F );
296         writeln( a mod G );
297         writeln( 'E');
298 
299         a := G;
300         writeln( a - 1L );
301         writeln( 'F' );
302 end.
303 
304 
305 // 測試程序輸出(有乘法溢出int64)
306 2
307 1
308 -2
309 1
310 -2
311 -1
312 2
313 -1
314 V
315 5234523452
316 0
317 3012301230
318 4123412343
319 4123412339
320 14123412341
321 A
322 3012301230
323 8246824682
324 5234523452
325 4123412339
326 4123412343
327 -5876587659
328 B
329 4581569267319620851
330 1444214739798451335
331 -4581569267319620851
332 8246824682
333 -8246824682
334 4340635262580896768
335 C
336 3
337 -1
338 -3
339 2061706170
340 -2061706170
341 0
342 D
343 790079008
344 0
345 790079008
346 1
347 1
348 4123412341
349 E
350 9999999999
351 F
352 
353 

posted on 2013-04-29 20:46 coreBugZJ 閱讀(4011) 評論(0)  編輯 收藏 引用 所屬分類: AssembleCPUGPU

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久久久久伊人| 国产伦理一区| 一区二区精品在线| 欧美一区二区三区视频在线 | 欧美精品粉嫩高潮一区二区 | 欧美色播在线播放| 亚洲一区二区精品在线| 久久er精品视频| 亚洲国产精品123| 欧美日韩视频第一区| 亚洲女爱视频在线| 欧美岛国激情| 亚洲免费视频观看| 一区二区在线观看视频在线观看| 欧美成人首页| 午夜久久久久久| 亚洲电影在线| 欧美亚洲免费电影| 亚洲第一在线视频| 国产精品国产三级国产aⅴ入口 | 国产精品乱人伦一区二区| 欧美中文在线字幕| 亚洲日本中文字幕| 久久久久久网| 亚洲一二三四区| 在线观看视频一区| 国产精品试看| 欧美国产一区视频在线观看| 午夜精品福利电影| 亚洲乱亚洲高清| 欧美1区视频| 先锋亚洲精品| 一区二区高清视频在线观看| 黄色亚洲在线| 国产精品久久婷婷六月丁香| 女女同性女同一区二区三区91| 亚洲欧美一级二级三级| 亚洲人体偷拍| 欧美韩日亚洲| 久久综合色88| 久久大逼视频| 亚洲欧美在线一区二区| 99综合电影在线视频| 亚洲国产精品成人| 韩日精品在线| 国产精品一区视频网站| 欧美日韩中字| 欧美巨乳在线观看| 免播放器亚洲| 久久久久久久一区| 欧美一级淫片播放口| 亚洲一区二区三区在线观看视频| 亚洲精品国产无天堂网2021| 欧美激情精品久久久久久黑人| 久久先锋资源| 久久久噜噜噜久久久| 久久精品国产亚洲精品| 欧美一区二区三区在线看| 亚洲专区国产精品| 亚洲视频一二三| 中文日韩在线| 亚洲私人影吧| 亚洲一区二区三区精品视频| 一区二区精品国产| 一区二区精品在线观看| 一本大道av伊人久久综合| 亚洲毛片在线看| 亚洲美女网站| 一区二区免费在线观看| 99这里只有久久精品视频| 99综合视频| 亚洲无限av看| 亚洲欧美国产不卡| 欧美一区二区在线播放| 久久精品免视看| 久久蜜桃资源一区二区老牛| 久久一本综合频道| 欧美大片免费观看在线观看网站推荐| 你懂的亚洲视频| 亚洲国产精品电影在线观看| 亚洲精选久久| 亚洲一区二区三区午夜| 欧美一区二区三区四区在线观看| 欧美制服丝袜第一页| 久久亚洲精品中文字幕冲田杏梨| 欧美不卡高清| 国产精品www色诱视频| 国产欧美91| 亚洲国产精品久久久久| 99国产精品99久久久久久| 亚洲一区二区欧美| 久久久久久久一区二区三区| 欧美激情1区2区3区| 日韩系列在线| 香蕉成人伊视频在线观看| 久久久久久久国产| 欧美日韩成人精品| 国产人妖伪娘一区91| 91久久精品国产| 亚洲欧美日韩在线一区| 久久综合一区二区| 亚洲另类自拍| 久久国产夜色精品鲁鲁99| 欧美精品v日韩精品v韩国精品v| 国产精品九九| 亚洲国产精品va| 亚洲欧美在线视频观看| 欧美成人福利视频| 国产精品99久久久久久宅男| 久久久久久97三级| 欧美色网在线| 激情欧美一区二区三区| 这里只有精品视频| 老司机精品导航| 亚洲视频一区二区在线观看 | 老鸭窝毛片一区二区三区| 亚洲人成网站在线观看播放| 欧美一级电影久久| 欧美日韩免费在线观看| 国模私拍一区二区三区| 中文国产成人精品| 免费成人高清视频| 亚洲免费在线| 欧美日本一区| 亚洲国产成人一区| 欧美与欧洲交xxxx免费观看| 亚洲人成网站在线播| 久久久亚洲国产美女国产盗摄| 国产精品乱子乱xxxx| 99精品视频免费观看| 欧美不卡高清| 欧美一区日韩一区| 国产精品免费一区二区三区在线观看 | 尤物99国产成人精品视频| 午夜国产精品视频免费体验区| 欧美激情国产日韩| 久久精品国产亚洲一区二区三区 | 久久综合网hezyo| 国产香蕉97碰碰久久人人| 一本久道综合久久精品| 亚洲第一精品久久忘忧草社区| 久久精品av麻豆的观看方式| 国产精品私房写真福利视频| 一区二区三区欧美亚洲| 最新日韩av| 欧美成人免费网站| 亚洲韩国青草视频| 男女激情视频一区| 久久婷婷综合激情| 在线观看日韩欧美| 免费不卡亚洲欧美| 久久免费视频网站| 伊人婷婷久久| 嫩草成人www欧美| 久久免费精品视频| 亚洲国产高清自拍| 欧美韩日一区| 免费成人高清| 亚洲久久视频| 亚洲美女黄网| 欧美性感一类影片在线播放| 亚洲特色特黄| 亚洲一二三四久久| 国产乱码精品一区二区三区忘忧草 | 久久国产福利国产秒拍| 激情自拍一区| 欧美成人蜜桃| 欧美成人日韩| 夜夜嗨av一区二区三区四区| 亚洲全黄一级网站| 欧美午夜精品电影| 欧美一级播放| 久久爱www.| 亚洲激情女人| 99riav国产精品| 国产欧美日韩视频一区二区三区| 久久激情视频免费观看| 久久久高清一区二区三区| 亚洲第一天堂av| 亚洲激情欧美激情| 国产精品国产三级国产aⅴ入口| 欧美亚洲一区二区三区| 久久精品三级| 日韩午夜精品| 亚洲制服av| 亚洲成人在线视频播放| 亚洲欧洲精品一区| 国产精品视频你懂的| 麻豆精品91| 欧美日韩另类在线| 久久精品日产第一区二区| 麻豆精品一区二区综合av | 亚洲欧洲精品一区二区三区波多野1战4 | 久久久亚洲国产天美传媒修理工 | 99视频在线观看一区三区| 亚洲一区bb| 亚洲电影欧美电影有声小说| 一区二区欧美在线观看| 狠狠色丁香婷婷综合久久片| 亚洲精品一区二区三区樱花|