1 BITS 32 2 3 section .data 4 00000000 20202020 Spaces: db 32,32,32,32 5 section .bss 6 7 00000000 fahr: resd 1 8 00000004 cels: resd 1 9 00000008 current: resd 1 10 0000000C upper: resd 1 11 00000010 step: resd 1 12 00000014 print: resd 1 13 00000018 ncels: resd 1 14 0000001C nfahr: resd 1 15 section .text 16 global _start 17 _start: 18 Initalize: 19 00000000 B89CFFFFFF mov eax,-100 20 00000005 A3[00000000] mov [fahr],eax 21 0000000A A3[08000000] mov [current],eax 22 0000000F B814000000 mov eax,20 23 00000014 A3[10000000] mov [step],eax 24 00000019 B8C8000000 mov eax,200 25 0000001E A3[0C000000] mov [upper],eax 26 PrimaryLoop: 27 00000023 B800000000 mov eax,0 28 00000028 A3[18000000] mov [ncels],eax 29 0000002D A3[1C000000] mov [nfahr],eax 30 00000032 A1[08000000] mov eax,[current] 31 00000037 A3[00000000] mov [fahr],eax 32 0000003C A1[00000000] mov eax,[fahr] 33 00000041 8B1D[0C000000] mov ebx,[upper] 34 00000047 39D8 cmp eax,ebx 35 00000049 0F8FF6010000 jg Terminate 36 DoMath: 37 0000004F A1[00000000] mov eax,[fahr] 38 00000054 BB20000000 mov ebx,32 39 00000059 29D8 sub eax,ebx 40 0000005B BB05000000 mov ebx,5 41 00000060 0FAFC3 imul eax,ebx 42 00000063 B909000000 mov ecx,9 43 00000068 BA00000000 mov edx,0 44 0000006D 99 cdq 45 0000006E F7F9 idiv ecx 46 00000070 A3[04000000] mov [cels],eax 47 InsertStackMarker: 48 00000075 B810270000 mov eax,10000 49 0000007A 50 push eax 50 CheckIfCelsIsNegative: 51 0000007B A1[04000000] mov eax,[cels] 52 00000080 BB00000000 mov ebx,0 53 00000085 39D8 cmp eax,ebx 54 00000087 7C02 jl CelsIsNegative 55 00000089 EB1C jmp PushCelsDigitsToStack 56 CelsIsNegative: 57 0000008B B801000000 mov eax,1 58 00000090 A3[18000000] mov [ncels],eax 59 00000095 A1[04000000] mov eax,[cels] 60 0000009A BBFFFFFFFF mov ebx,-1 61 0000009F 0FAFC3 imul eax,ebx 62 000000A2 A3[04000000] mov [cels],eax 63 PushCelsDigitsToStack: 64 000000A7 A1[04000000] mov eax,[cels] 65 000000AC BB00000000 mov ebx,0 66 000000B1 39D8 cmp eax,ebx 67 000000B3 7415 je GotAZero 68 000000B5 B90A000000 mov ecx,10 69 000000BA BA00000000 mov edx,0 70 000000BF 99 cdq 71 000000C0 F7F9 idiv ecx 72 000000C2 52 push edx 73 000000C3 A3[04000000] mov [cels],eax 74 000000C8 EBDD jmp PushCelsDigitsToStack 75 GotAZero: 76 000000CA 5B pop ebx 77 000000CB 39D8 cmp eax,ebx 78 000000CD 7414 je JustAZero 79 000000CF 53 push ebx 80 000000D0 B810270000 mov eax,10000 81 000000D5 39D8 cmp eax,ebx 82 000000D7 7402 je ActualZero 83 000000D9 EB0E jmp DecideSign 84 ActualZero: 85 000000DB B800000000 mov eax,0 86 000000E0 50 push eax 87 000000E1 EBC4 jmp PushCelsDigitsToStack 88 JustAZero: 89 000000E3 B800000000 mov eax,0 90 000000E8 50 push eax 91 DecideSign: 92 000000E9 A1[18000000] mov eax,[ncels] 93 000000EE BB01000000 mov ebx,1 94 000000F3 39D8 cmp eax,ebx 95 000000F5 7402 je InsertSign 96 000000F7 EB0D jmp InsertAnotherStackMarker 97 InsertSign: 98 000000F9 B82D000000 mov eax,45 99 000000FE BB30000000 mov ebx,30h 100 00000103 29D8 sub eax,ebx 101 00000105 50 push eax 102 InsertAnotherStackMarker: 103 00000106 B810270000 mov eax,10000 104 0000010B 50 push eax 105 CheckIfFahrIsNegative: 106 0000010C A1[00000000] mov eax,[fahr] 107 00000111 BB00000000 mov ebx,0 108 00000116 39D8 cmp eax,ebx 109 00000118 7C02 jl FahrIsNegative 110 0000011A EB1C jmp PushFahrDigitsToStack 111 FahrIsNegative: 112 0000011C B801000000 mov eax,1 113 00000121 A3[1C000000] mov [nfahr],eax 114 00000126 A1[00000000] mov eax,[fahr] 115 0000012B BBFFFFFFFF mov ebx,-1 116 00000130 0FAFC3 imul eax,ebx 117 00000133 A3[00000000] mov [fahr],eax 118 PushFahrDigitsToStack: 119 00000138 A1[00000000] mov eax,[fahr] 120 0000013D BB00000000 mov ebx,0 121 00000142 39D8 cmp eax,ebx 122 00000144 7415 je GotADifferentZero 123 00000146 B90A000000 mov ecx,10 124 0000014B BA00000000 mov edx,0 125 00000150 99 cdq 126 00000151 F7F9 idiv ecx 127 00000153 52 push edx 128 00000154 A3[00000000] mov [fahr],eax 129 00000159 EBDD jmp PushFahrDigitsToStack 130 ;;;;Something feels really wrong about GotADifferentZero... 131 GotADifferentZero: 132 0000015B 5B pop ebx 133 0000015C 39D8 cmp eax,ebx 134 0000015E 7414 je JustADifferentZero 135 00000160 53 push ebx 136 00000161 B810270000 mov eax,10000 137 00000166 39D8 cmp eax,ebx 138 00000168 7402 je AnotherActualZero 139 0000016A EB0E jmp DecideAnotherSign 140 AnotherActualZero: 141 0000016C B800000000 mov eax,0 142 00000171 50 push eax 143 00000172 EBC4 jmp PushFahrDigitsToStack 144 JustADifferentZero: 145 00000174 B800000000 mov eax,0 146 00000179 50 push eax 147 DecideAnotherSign: 148 0000017A A1[1C000000] mov eax,[nfahr] 149 0000017F BB01000000 mov ebx,1 150 00000184 39D8 cmp eax,ebx 151 00000186 7402 je InsertAnotherSign 152 00000188 EB0D jmp PrintFahrFromStack 153 InsertAnotherSign: 154 0000018A B82D000000 mov eax,45 155 0000018F BB30000000 mov ebx,30h 156 00000194 29D8 sub eax,ebx 157 00000196 50 push eax 158 PrintFahrFromStack: 159 00000197 B810270000 mov eax,10000 160 0000019C 5B pop ebx 161 0000019D 39D8 cmp eax,ebx 162 0000019F 7424 je PrintWhitespace 163 000001A1 B830000000 mov eax,30h 164 000001A6 01D8 add eax,ebx 165 000001A8 A3[14000000] mov [print],eax 166 000001AD B804000000 mov eax,4 167 000001B2 BB01000000 mov ebx,1 168 000001B7 B9[14000000] mov ecx,print 169 000001BC BA01000000 mov edx,1 170 000001C1 CD80 int 80h 171 000001C3 EBD2 jmp PrintFahrFromStack 172 PrintWhitespace: 173 000001C5 B804000000 mov eax,4 174 000001CA BB01000000 mov ebx,1 175 000001CF B9[00000000] mov ecx,Spaces 176 000001D4 BA04000000 mov edx,4 177 000001D9 CD80 int 80h 178 PrintCelsFromStack: 179 000001DB B810270000 mov eax,10000 180 000001E0 5B pop ebx 181 000001E1 39D8 cmp eax,ebx 182 000001E3 7424 je IncrementFahr 183 000001E5 B830000000 mov eax,30h 184 000001EA 01D8 add eax,ebx 185 000001EC A3[14000000] mov [print],eax 186 000001F1 B804000000 mov eax,4 187 000001F6 BB01000000 mov ebx,1 188 000001FB B9[14000000] mov ecx,print 189 00000200 BA01000000 mov edx,1 190 00000205 CD80 int 80h 191 00000207 EBD2 jmp PrintCelsFromStack 192 IncrementFahr: 193 00000209 A1[08000000] mov eax,[current] 194 0000020E 8B1D[10000000] mov ebx,[step] 195 00000214 01D8 add eax,ebx 196 00000216 A3[00000000] mov [fahr],eax 197 0000021B A3[08000000] mov [current],eax 198 00000220 B80A000000 mov eax,10 199 00000225 A3[14000000] mov [print],eax 200 0000022A B804000000 mov eax,4 201 0000022F BB01000000 mov ebx,1 202 00000234 B9[14000000] mov ecx,print 203 00000239 BA01000000 mov edx,1 204 0000023E CD80 int 80h 205 00000240 E9DEFDFFFF jmp PrimaryLoop 206 Terminate: 207 00000245 B801000000 mov eax,1 208 0000024A BB00000000 mov ebx,0 209 0000024F CD80 int 80h Output: -100 -73 -80 -62 -60 -51 -40 -40 -20 -28 0 -17 20 -6 40 4 60 15 80 26 100 37 120 48 140 60 160 71 180 82 200 93