Dividir un número negativo en ensamblador.
Quiero crear un programa que pueda convertir grados Fahrenheit a Celsius. El problema es que mi programa produce números locos cuando los grados Celsius son negativos, a pesar de que intenté usar las instrucciones idiv
y div
pero no funcionan. ¿Alguien tiene ideas sobre cómo solucionar esto?
Aquí está mi código de ensamblador:
“`
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
include io.h ; archivo de encabezado para entrada/salida
cr equ 0dh ; carácter de retorno de carro
Lf equ 0ah ; avance de línea
.STACK 4096 ; reservar una pila de 4096 bytes
.DATA ; reservar espacio de almacenamiento para datos
enterdegree byte “Ingrese la temperatura en Fahrenheit:”,0
degree qword ?
result byte “la temperatura en Celsius es: ”
celi byte 40 dup(?)
.CODE ; inicio del código del programa principal
_start:
; ingresar grados en Fahrenheit
output enterdegree
input degree ,8
atod degree
;(f-32)
sub eax,32
;(f-32)*5
mov edx,0
mov ebx,5
imul eax,ebx
;(f-32)*5/9
mov edx,0
mov ebx,9
idiv ebx
dtoa celi,eax
output result
INVOKE ExitProcess, 0 ; salir con el código de retorno 0
PUBLIC _start ; hacer el punto de entrada público
END ; fin del código fuente
davy.ai
El problema con el programa que produce números locos cuando el grado Celsius es negativo probablemente se debe al uso de la instrucción “idiv”, que realiza una división con signo. Para solucionar este problema, puedes usar la instrucción “div” en su lugar, que realiza una división sin signo.
Aquí está el código modificado con la instrucción “div”:
Con esta modificación, el programa debería mostrar resultados correctos tanto para grados Celsius positivos como negativos.