Nofew icon

Fahr to Cels WHOOOOO OWO!!!!

Nofew | PRO | 11/30/15 11:02:45 PM UTC | 0 ⭐ | 543 👁️ | Never ⏰ | []
ASM (NASM) |

0 B

|

None

|

0 👍

/

0 👎

BITS 32
 
section .data
Spaces: db 32,32,32,32
section .bss
 
fahr: resd 1
cels: resd 1
current: resd 1
upper: resd 1
step: resd 1
print: resd 1
ncels: resd 1
nfahr: resd 1
section .text
global _start
_start:
Initalize:
mov eax,-100
mov [fahr],eax
mov [current],eax
mov eax,20
mov [step],eax
mov eax,200
mov [upper],eax
PrimaryLoop:
mov eax,0
mov [ncels],eax
mov [nfahr],eax
mov eax,[current]
mov [fahr],eax
mov eax,[fahr]
mov ebx,[upper]
cmp eax,ebx
jg Terminate
DoMath:
mov eax,[fahr]
mov ebx,32
sub eax,ebx
mov ebx,5
imul eax,ebx
mov ecx,9
mov edx,0
cdq
idiv ecx
mov [cels],eax
InsertStackMarker:
mov eax,10000
push eax
CheckIfCelsIsNegative:
mov eax,[cels]
mov ebx,0
cmp eax,ebx
jl CelsIsNegative
jmp PushCelsDigitsToStack
CelsIsNegative:
mov eax,1
mov [ncels],eax
mov eax,[cels]
mov ebx,-1
imul eax,ebx
mov [cels],eax
PushCelsDigitsToStack:
mov eax,[cels]
mov ebx,0
cmp eax,ebx
je GotAZero
mov ecx,10
mov edx,0
cdq
idiv ecx
push edx
mov [cels],eax
jmp PushCelsDigitsToStack
GotAZero:
pop ebx
cmp eax,ebx
je JustAZero
push ebx
mov eax,10000
cmp eax,ebx
je ActualZero
jmp DecideSign
ActualZero:
mov eax,0
push eax
jmp PushCelsDigitsToStack
JustAZero:
mov eax,0
push eax
DecideSign:
mov eax,[ncels]
mov ebx,1
cmp eax,ebx
je InsertSign
jmp InsertAnotherStackMarker
InsertSign:
mov eax,45
mov ebx,30h
sub eax,ebx
push eax
InsertAnotherStackMarker:
mov eax,10000
push eax
CheckIfFahrIsNegative:
mov eax,[fahr]
mov ebx,0
cmp eax,ebx
jl FahrIsNegative
jmp PushFahrDigitsToStack
FahrIsNegative:
mov eax,1
mov [nfahr],eax
mov eax,[fahr]
mov ebx,-1
imul eax,ebx
mov [fahr],eax
PushFahrDigitsToStack:
mov eax,[fahr]
mov ebx,0
cmp eax,ebx
je GotADifferentZero
mov ecx,10
mov edx,0
cdq
idiv ecx
push edx
mov [fahr],eax
jmp PushFahrDigitsToStack
;;;;Something feels really wrong about GotADifferentZero...
GotADifferentZero:
pop ebx
cmp eax,ebx
je JustADifferentZero
push ebx
mov eax,10000
cmp eax,ebx
je AnotherActualZero
jmp DecideAnotherSign
AnotherActualZero:
mov eax,0
push eax
jmp PushFahrDigitsToStack
JustADifferentZero:
mov eax,0
push eax
DecideAnotherSign:
mov eax,[nfahr]
mov ebx,1
cmp eax,ebx
je InsertAnotherSign
jmp PrintFahrFromStack
InsertAnotherSign:
mov eax,45
mov ebx,30h
sub eax,ebx
push eax
PrintFahrFromStack:
mov eax,10000
pop ebx
cmp eax,ebx
je PrintWhitespace
mov eax,30h
add eax,ebx
mov [print],eax
mov eax,4
mov ebx,1
mov ecx,print
mov edx,1
int 80h
jmp PrintFahrFromStack
PrintWhitespace:
mov eax,4
mov ebx,1
mov ecx,Spaces
mov edx,4
int 80h
PrintCelsFromStack:
mov eax,10000
pop ebx
cmp eax,ebx
je IncrementFahr
mov eax,30h
add eax,ebx
mov [print],eax
mov eax,4
mov ebx,1
mov ecx,print
mov edx,1
int 80h
jmp PrintCelsFromStack
IncrementFahr:
mov eax,[current]
mov ebx,[step]
add eax,ebx
mov [fahr],eax
mov [current],eax
mov eax,10
mov [print],eax
mov eax,4
mov ebx,1
mov ecx,print
mov edx,1
int 80h
jmp PrimaryLoop
Terminate:
mov eax,1
mov ebx,0
int 80h
 
 
 
 
 
Outout:
 
-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

Comments