Red de conocimiento informático - Conocimiento sistemático - El lenguaje ensamblador utiliza el conjunto de instrucciones 8086 y se registra para realizar operaciones matemáticas con signo de 32 bits.

El lenguaje ensamblador utiliza el conjunto de instrucciones 8086 y se registra para realizar operaciones matemáticas con signo de 32 bits.

Creo que realizarás una conversión ASC de entrada y salida, así que no lo escribiré. Sólo proporciono programas aritméticos de 32 bits. Los siguientes procedimientos se pasaron a través de cálculos de prueba.

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

; 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

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>

;=================================

subn_32v16 continúa acercándose

Push ax

mov ax, dx

mov dx, 0

div cx

mov bx, ax

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>

;=================================

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