El lenguaje ensamblador utiliza el conjunto de instrucciones 8086 y se registra para realizar operaciones matemáticas con signo de 32 bits.
1. Defina cuatro variables operativas en la sección de datos.
===============================
Número de operación de 32 bits
===============================
datos4 dw?
datos3 dw?
datos2 dw?
datos1 dw?
2. Las siguientes son cuatro subrutinas para suma, resta, multiplicación y división.
************************************
Operación de 32 bits
******************************
== = ============================
; Suma de números simbólicos de 32 bits
; Introduzca: DXAX=operando 1 de 32 bits
; CXBX=operando 2 de 32 bits
Salida: DXAX=suma de dos operandos
; OF=1: desbordamiento
; OF=0: normal.
;===============================
cerca de subn_add32 proc
Agregar ax, bx
adc dx, cx
Remojar en agua para suavizar
subn_add32 endp
; == =============================
;Operación de resta de números con signo de 32 bits p>
; Ingrese: DXAX=operando 1 de 32 bits
; CXBX=operando 2 de 32 bits
Salida: DXAX=la diferencia entre el operando 1 y el operando 2 .
; OF=1: desbordamiento
; OF=0: normal.
===============================
cerca del proceso subn_sub32
Subeje, bx
sbb dx, cx
Remojado en agua para suavizar
subn_sub32 endp
; == =============================
;Multiplicación de números con signo de 32 bits
;Ingrese: DXAX=operando 1 de 32 bits
;CXBX=operando 2 de 32 bits
;Salida: CXBXDXAX=producto de dos operandos
===============================
subn_mul32 proc cerca
Empujar di
XOR di, di
Prueba dh, 80h
jz sss_1
mov di, 1
No dx
No es un hacha
Agregar hacha, 1
adc dx, 0
sss_1:
Canal de prueba, 80h
jz sss_2
No cx
No bx
Agregar bx, 1
adc cx, 0
XOR di, 1
sss_2:
Llamar a subn_32x32
Prueba di, 1
jz sss_out
No es un hacha
No bx
No cx
No dx
Agregar hacha, 1
adc dx, 0
adc bx, 0
adc cx, 0
sss_out:
Popudi
Remojado en agua para suavizar
subn_mul32 endp
===================; = ===========
; Operación de división de números con signo de 32 bits
; Entrada: DXAX=dividendo de 32 bits
>; CXBX = divisor de 32 bits
; Salida: DXAX=cociente
; CXBX=resto (valor absoluto)
; ==== =====================
subn_div32 proc cerca
push di
XOR di , di
Prueba dh, 80h
jz sss_1
mov di, 1
No dx
Sin Ax
Agregar ax, 1
adc dx, 0
sss_1:
Canal de prueba, 80h
jz sss_2
No cx
No bx
Agregar bx, 1
adc cx, 0
Excepción o di, 1
sss_2:
Llamar a subn_32v32
Prueba di, 1
jz sss_out
No Ax
No dx
Agregar ax, 1
adc dx, 0
sss_out:
Pop Di
Remojado en agua para suavizarlo
subn_div32 endp
;* * * * * *La siguiente es la subrutina interna* * * * * * * *
;================================
; Número de 32 bits sin signo Valor multiplicado por valor de 32 bits
entrada: DXAX=multiplicand
;CXBX=multiplicador
Salida: cx=alto 64 bits del producto.
;Bx=los 48 bits altos del producto
;Dx=los 32 bits altos del producto
;Ax=los 16 bits bajos del producto
;================================
Cerca de subn_32x32 proc
Push si
Push di
mov datos 1, 0
mov datos 2, 0
mov datos 3, 0 p>
mov datos 4, 0
Movimiento si, ax
mov di, dx
Múltiples bx
mov datos 2. dx
mov datos 1, ax
Mover eje, di
Múltiples bx
Agregar datos 2, ax
adc data 3, dx
Mover eje, si
mul cx
Agregar datos 2, ax
adc data 3, dx
adc data 4, 0
Mover eje, di
mul cx
Agregar datos 3, ax
adc datos 4, dx
mov cx, datos 4
mov bx, datos 3
mov dx, datos 2
mov hacha, datos 1
Popudi
Pops
Remojado en agua para ablandar
subn_32x32 endp
;===============================
;Sin firmar 32- valor de bits Dividir por valor de 16 bits.
;Entrada: DXAX=dividendo
;CX=divisor
;Salida: DXAX=cociente
;BX=resto p>
p>
;=================================
subn_32v16 continúa acercándose
Push ax
mov ax, dx
mov dx, 0
div cx
mov bx, ax p>
Barril de explosión
div cx
xchg bx, dx
Remojar en agua para suavizar
subn_32v16 endp
;================================
;División de valor de 32 bits sin signo Tome un valor de 32 bits.
;Entrada: DXAX=dividendo
;CXBX=divisor
;Salida: DXAX=cociente
;CXBX=resto p>
p>
;=================================
subn_32v32 continúa acercándose
Prueba cx,cx
jnz sss_1
mov cx,bx
Llama a subn_32v16
XOR cx,cx
Remojar en agua para suavizar
sss_1:
Push di
XOR di, di
sss_lp1:
p>
Subeje, bx
sbb dx, cx
jc sss_out
Empresa di
jmp sss_lp1
sss_out:
Agregar bx, ax
adc cx, dx
Mover eje , di
mov dx, 0
Popudi
Remojado en agua para suavizar
subn_32v32 endp