Red de conocimiento informático - Conocimiento sistemático - Programación de fusión en lenguaje ensamblador

Programación de fusión en lenguaje ensamblador

Primera pregunta:

. Modelos pequeños

. Pila 8192

. Datos

pop1 dd 99887766

pop2 dd 66554433

¿Suma dd?

. Contraseña

principal: mov ax, @data

move ds, ax

el siguiente es el código agregado.

mov ax, palabra ptr pop1

mov dx, palabra ptr pop1[2]

Añadir ax, palabra ptr pop2

adc dx, word ptr pop2[2]

mov word pointer sum, ax

mov word ptr sum[2], dx

resultados hasta el momento Colóquelo; en la suma de la variable de doble palabra, adyacente a pop2.

mov ah, 4ch

int 21h

Encabezado final

Segunda pregunta:

. Modelos pequeños

. Pila 8192

. datos

suma dw?

sumbcd dw?

. Contraseña

principal: mov ax, @data

Move ds, ax

XOR ax, ax acumulador borrado

mov cx, 99; Cx es una variable de bucle.

lp1: Sumar ax, CX; de 99 a 1, y en AX.

Bucle lp1

mov sum, ax; en este momento, la suma acumulativa se almacena en sum.

mov si, 10; A continuación, cada número de la suma se elimina dividiéndolo por 10, se convierte a código BCD y se almacena en sumbcd.

xor bx, bx; Bx se utiliza para almacenar el resultado del código bcd

mov cx, 4; al convertir BCD, cada número debe desplazar bx hacia la derecha 4 bits. Después de fusionar los restos de AH en los cuatro dígitos superiores de dx, se forma el resultado BCD completo después de cuatro veces.

lp2: xor dx, dx; borra el contenido dx del departamento

Después de la división div si de 8 bits, dx es el resto de cada tiempo y ax es el cociente. Después de la primera operación de división, el resto es 1 dígito, y la próxima vez son 10 dígitos...

Empujar CX; los cambios posteriores requieren el registro CL, pero CX se usa como variable de control de bucle. entonces es necesario salvarlo primero.

mov cl, 4; cl aquí es 4, usado para reciclaje.

shr bx, cl; Mueva BX 4 bits hacia la derecha y el lado izquierdo se llenará con ceros.

shl dl, cl; DL se desplaza 4 bits hacia la izquierda y se llena con ceros hacia la derecha.

O bh, dl; los cuatro ceros agregados a la izquierda de BX llenan los dígitos restantes en DL.

pop cx restaura el número de ciclos de CX

Loop lp2

mov sumbcd, bx el resultado de BCD se almacena en sumbcd. Preste atención a los dígitos de las decenas. Los primeros cuatro dígitos se combinan en un byte y los siguientes miles de dígitos se combinan en otro byte.

mov ah, 4ch

int 21h

Encabezado final

Tercera pregunta:

. Modelos pequeños

. Pila 8192

. data

elem db 10 dup(' 0123456789 ')

Tail equ $

.

contraseña

principal: mov ax, @data

move ds, ax

mov si, elemento de desplazamiento la mano de Si camina hacia adelante y hacia atrás.

mov di, tail-1; Di mueve sus manos hacia adelante desde atrás

lp: cmp si, di;

jge está hecho; si si gt=di, entonces la cabeza y la cola se han encontrado, entonces se acabó.

mov al, [si]; Obtiene el contenido en el puntero frontal de a1.

xchg [di], al; y cambiar en el puntero posterior.

mov [si], al; guardar de nuevo al puntero anterior

inc si mueve el puntero frontal

dec di mueve el puntero

jmp lp continúa con el siguiente

Completo:

; en este punto, el contenido del elemento se ha intercambiado según sea necesario.

mov ah, 4ch

int 21h

Encabezado final

Cuarta pregunta:

. Modelos pequeños

. Pila 8192

. Contraseña

Principal: mov ax, -100

Señal

mov ax, 100

Señal

Mover eje, 0

Señal

mov ah, 4ch

int 21h

Proceso de firma

cmp hacha, 0; compare Ax con 0

JZ signo 1; si es 0, devuelve directamente (el resultado sigue siendo 0)

mov ax, 1; o -1, configúrelo primero en positivo 1. Tenga en cuenta que la instrucción MOV no afecta el indicador de resultado de la comparación CMP en este momento.

jg signo 1; si acabas de obtener el hacha gt0, gíralo hacia atrás (ahora AX es 1 como número positivo)

Hacha negativa cambia el 1 en AX a -1; .

signo 1: ret; devuelve el valor en AX.

Fin de la firma

Fin del administrador