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

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 閱讀(4008) 評論(0)  編輯 收藏 引用 所屬分類: Assemble 、CPUGPU

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            亚洲国产精品一区二区www在线 | 久久久亚洲高清| 亚洲国产精品视频| 亚洲第一页在线| 亚洲激情视频在线播放| 91久久亚洲| 在线亚洲免费视频| 午夜精品福利一区二区三区av| 亚洲欧美日韩在线| 久久精品最新地址| 欧美韩日一区二区| 亚洲国产精品va| 一区二区三区国产在线| 午夜欧美精品久久久久久久| 久久黄金**| 欧美看片网站| 国产亚洲aⅴaaaaaa毛片| 亚洲国产黄色片| 亚洲在线免费观看| 免费欧美日韩国产三级电影| 亚洲人精品午夜| 亚洲欧洲99久久| 欧美电影专区| 国产精品美女主播| 在线观看日韩www视频免费| 亚洲精品国产系列| 欧美亚洲一区二区在线观看| 欧美国产日本高清在线| 亚洲天堂第二页| 蜜臀久久99精品久久久久久9| 欧美色视频日本高清在线观看| 国产一二三精品| 亚洲视频在线观看视频| 欧美成人日韩| 欧美亚洲一区二区在线| 欧美屁股在线| 亚洲国产国产亚洲一二三| 亚洲夜晚福利在线观看| 亚洲精品视频二区| 亚洲国产精品99久久久久久久久| 亚洲成色777777在线观看影院| 99精品国产福利在线观看免费| 久久精品国产精品| 亚洲精品欧美日韩| 老色批av在线精品| 伊人成人在线视频| 久久精品国产999大香线蕉| 亚洲精品一区二区三区av| 久久久免费精品| 黑丝一区二区| 久久不射电影网| 亚洲欧美日韩国产中文在线| 欧美日韩一区二区在线观看| 亚洲乱码久久| 亚洲激情自拍| 欧美激情第六页| 亚洲精品裸体| 91久久精品一区| 欧美人成在线| 在线亚洲成人| 99精品欧美一区| 欧美吻胸吃奶大尺度电影| 一区二区三区.www| 99精品国产99久久久久久福利| 欧美日韩另类一区| 亚洲网友自拍| 亚洲欧美日韩在线高清直播| 国产女同一区二区| 久久性色av| 欧美电影在线免费观看网站| 中文在线不卡| 欧美一区二区精品| 在线观看欧美激情| 欧美激情一区二区三区蜜桃视频| 欧美不卡视频一区| 亚洲色诱最新| 亚洲女同同性videoxma| 国产在线一区二区三区四区| 久久偷窥视频| 欧美成人视屏| 午夜精品国产| 久久精品在线视频| 亚洲精品中文字幕女同| 中文日韩在线| 极品尤物av久久免费看| 91久久精品日日躁夜夜躁国产| 国产精品久久久久久久久久三级| 久久久久久婷| 欧美日韩精品在线播放| 小嫩嫩精品导航| 欧美不卡视频| 欧美一区二区视频观看视频| 久久久久一区| 午夜日韩av| 美女久久网站| 正在播放日韩| 久久精品女人的天堂av| 亚洲国产乱码最新视频| 一区二区三区免费在线观看| 一区二区三区在线看| 日韩一级二级三级| 好吊视频一区二区三区四区| 亚洲毛片av| 亚洲国产精品第一区二区| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产一区高清视频| 99精品免费| 亚洲日韩欧美视频一区| 亚洲欧美怡红院| 一区二区三区免费在线观看| 久久久久青草大香线综合精品| 亚洲尤物在线视频观看| 欧美成人中文字幕| 蜜臀久久99精品久久久画质超高清 | 国产精品啊啊啊| 亚洲国产一区二区三区a毛片| 国产欧美日韩高清| 一区二区av| 99精品国产在热久久婷婷| 久久久91精品国产| 久久激情视频久久| 国产精品欧美日韩| 一区二区欧美日韩| 99xxxx成人网| 欧美高清hd18日本| 亚洲第一天堂无码专区| 好看的av在线不卡观看| 午夜精品福利一区二区三区av| 一二三区精品福利视频| 嫩草影视亚洲| 欧美激情自拍| 亚洲精品你懂的| 欧美sm视频| 欧美激情一区二区| 亚洲黄色影院| 欧美成人免费在线视频| 亚洲国产精品久久久久| 亚洲茄子视频| 欧美日韩国产一级片| 亚洲美女毛片| 亚洲伊人观看| 国产精品夜夜夜| 欧美亚洲免费| 老鸭窝91久久精品色噜噜导演| 国产日韩av一区二区| 亚欧成人精品| 美女精品网站| 日韩视频免费在线| 欧美三级网址| 亚洲午夜三级在线| 久久久精品国产一区二区三区| 韩国一区二区在线观看| 蜜臀av性久久久久蜜臀aⅴ| 亚洲精品国产系列| 亚洲欧美亚洲| 伊人精品成人久久综合软件| 免费在线日韩av| av成人天堂| 亚洲午夜伦理| 免费欧美视频| 国产乱码精品一区二区三区五月婷| 亚洲一区二区三区四区视频| 性欧美1819sex性高清| 国产在线精品一区二区中文| 另类尿喷潮videofree| 日韩视频永久免费| 久久精品一区| 亚洲精品在线视频| 国产美女一区二区| 久久一区中文字幕| 一级日韩一区在线观看| 看欧美日韩国产| 亚洲天堂久久| 在线精品一区二区| 国产精品都在这里| 久久久久久国产精品mv| 一本到12不卡视频在线dvd| 久久久久**毛片大全| 99视频精品全部免费在线| 国产欧美视频一区二区三区| 欧美夫妇交换俱乐部在线观看| 亚洲欧美日韩久久精品| 亚洲茄子视频| 男人插女人欧美| 久久精品免视看| 亚洲欧美成人网| 日韩一本二本av| 国产一区二区三区最好精华液| 欧美精品一区二区精品网| 欧美一级片久久久久久久| 亚洲精品一区在线观看| 欧美成人精品在线视频| 午夜亚洲精品| 亚洲视频一区二区免费在线观看| 亚洲国产视频直播| 加勒比av一区二区| 国产一区二区三区在线免费观看| 国产精品欧美风情| 国产精品99一区二区| 欧美另类99xxxxx|