Programación de fusión en lenguaje ensamblador
. 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