Programación en lenguaje ensamblador
En primer lugar, debe comprender:
1. Cuando se suman un número positivo y un número negativo, el resultado definitivamente no se desbordará, es decir, el resultado tampoco. sea mayor que el número positivo más grande ni menor que el número negativo más pequeño de la misma manera, si se restan dos números positivos o dos números negativos, el resultado definitivamente no se desbordará; También hay un caso especial, es decir, cuando DATOS1 es 0 y DATOS2 es el número negativo más pequeño, DATOS1 - DATOS2 también se desbordará.
2. Si el resultado es mayor que el número positivo más grande, debe ser la suma de dos números positivos; si el resultado es menor que el número negativo más pequeño, debe ser la suma de dos números negativos;
3. Desbordamiento La bandera solo puede determinar si se desborda, pero no puede determinar si es un desbordamiento positivo o negativo. Por lo tanto, primero se debe juzgar el indicador OF. Si hay desbordamiento, entonces se debe juzgar el signo de DATA1 o DATA2. Si es un número positivo, es un desbordamiento positivo;
El programa es el siguiente. Lo compilé en 386.
.modelo pequeño
.386
.dosseg
.stack 1024
.data
; DATOS1 dd 81234567h
DATOS1 dd 7fffffffh; Número máximo positivo
DATOS2 dd 80000000h; Número mínimo negativo
; p >
SUM dd ?
.code
.startup
mov eax, DATA1
add eax, DATA2 p >
jo OverFlow
jmp Listo
OverFlow:
cmp DATA1, 0
jg PlusOverFlow
mov eax, 80000000h; número negativo mínimo
jmp Hecho
PlusOverFlow:
mov eax, 7fffffffh; Listo:
mov SUM, eax
.exit
end
Puedes modificar los valores de DATOS1 y DATOS2 para ver los resultados.