Experimento de ensamblador versión oficial en chino
Segmento de datos
mess1 db 'Entrada - *: $ '
mess2 db 0dh, 0ah, 'Entrada número 1: $ '
mess3 db 0dh, 0ah, 'Ingresa el número 2: $ '
mess4 db 0dh, 0ah, '¡Error de entrada! $'
mess5 db 0dh, 0ah, ' $ '
num1 db 6 dup(0)
num2 db 6 dup(0)
char db 0
overnum db 36h, 35h, 35h, 33h, 35h
Fin de datos
Segmento de pila
; Introduzca aquí el código del segmento de pila.
Lado de la pila
Segmento de código
Supongamos CS: código, DS: datos, SS: pila
Inicio:
MOV ax, datos
MOV DS, AX
lead dx, desorden 1; símbolo de cálculo de solicitud de entrada
mov ah, 9
int 21h
s1:
mov ah, 1; esperando entrada
int 21h
cmp al, ' ' ; Compruebe si es un símbolo que debe ingresarse.
jz s2
cmp al,'-'
jz s2
cmp al,' * '
jz s2
jmp s 1; No sigas escribiendo.
s2:
mov char, al; si está almacenado en char para respaldo.
mov cx, 2
lea dx, correo 2
lea si, num1
s3:
Entrada de llamada; ingrese un conjunto de números
Llame nuevamente; verifique el rango de números
cmp bp, 0 en caso afirmativo, continúe ingresando el siguiente conjunto de números.
jz s4
lea dx, mess4 si no aparece ningún mensaje de error.
mov ah, 9
int 21h
jmp s3
s4:
lea dx, mensaje mess3 información para un grupo de números
lea si, num2
Loop s3
lead dx, mess5 loop feed
mov ah, 9
int 21h
lea si, num 1; genera la primera línea de números
Pantalla de llamada
mov dl, símbolo de salida char
mov ah, 2
int 21h
lea si, num2 genera la segunda línea de números
Visualización de llamadas
mov dl, ' = '; salida = símbolo
mov ah, 2
int 21h
lea si, num 1; Convierte el número a 10 números decimales.
Llame a Zhuang
mov bx, ax
lea si, num2 el segundo grupo se convierte en 10 números decimales.
Llame al distribuidor
mov dl, símbolo de juicio char
cmp dl, ' '; los números se almacenan en ax y bx.
jz s5
cmp dl, '-'
jz s6
xor dx, dx aumentar
Múltiples bx
jmp s7
s5:
Agregar ax, bx; agregar
jmp s7
s6:
sub bx, ax; resta
mov ax, bx
s7:
Llame a Shu Chu para generar el último valor; .
MOV, 4CH
INT 21H
Entrada:; La función es ingresar una cadena.
Push ax; parámetros de entrada dx, si
Push CX; Dx es el desplazamiento del mensaje de salida, si es el desplazamiento de la cadena almacenada.
Push dx; parámetro de salida bx número de parámetros de entrada
Push si
i1:
mov ah, 9
int 21h
XOR bx, bx
mov cx, 5
i2:
mov ah, 7
p>int 21h
cmp al, 0dh
jz i3
cmp al, ' 0 '
jb i2
cmp al, ' 9 '
ja i2
mov [si], al
empresa si
empresa bx
mov dl, al
mov ah, 2
int 21h
bucle i2
i3 :
cmp cx, 5
jz i1
pops
pop dx
pop cx
pop dx
pop cx
p>Barril explosivo
Remojado en agua para suavizarlo
Fin:; La función es verificar si la cuerda es demasiado grande, el máximo es 65535.
Push ax; parámetros de entrada bx, si, di
Push bx;
Push CX; Si es el desplazamiento de la cadena que se está verificando.
Se especula que Di es el desplazamiento de la cadena comparada.
Recomiende di; si el parámetro de exportación bp es 1, significa que el número es demasiado grande y 0 es normal.
XOR pb, pb
cmp bx, 5
jb o3
lea di, overnum
mov cx, 5
o1:
mov al, [si]
cmp al, [di]
jb o3 p >
je o2
mov bp,1
jmp o3
oxígeno:
empresa si
Compañía di
Bucle o1
o3:
Pop Di
Pops
Popular cx
pop bx
Barril explosivo
Remojado en agua para suavizarlo
Pantalla: La cadena de visualización termina en 0.
Push ax; parámetro de entrada si
Push dx; Si es el desplazamiento de la cadena mostrada.
Empujar si
d1:
mov al, [si]
cmp al, 0
jz d2
mov dl, al
mov ah, 2
int 21h
empresa si
jmp d1
d2:
Popudi
Popular dx
Barril explosivo
Remojado en agua para suavizarlo
Zhuang:; Convierte números ascii a 10 valores binarios
Empuje bx; parámetro de entrada si
Empuje CX para cadena
Push dx; exportar parámetro ax
; Ax almacena el valor calculado.
XOR ax, ax
XOR cx, cx
mov bx, 10
mov al, [si]
p>
sub al, 30h
Empresa si
z1:
XOR cx, cx
xor dx , dx
mov cl, [si]
Empresa si
cmp cl, 0
jz z2
Cl afiliado, 30h
Multi bx
Agregar hacha, cx
jmp z1
z2:
Popular dx
Pop cx
pop bx
Remojado en agua para suavizar
Shu Chu: Convierte el valor en hacha a 10 salidas binarias.
Push ax; parámetro de entrada ax
Push bx; el valor almacenado en ax es el valor a convertir
Push cx
Empujar dx
mov bx, 10
XOR cx, cx
sc1:
xor dx, dx
Rama bx
Empujar dx
inc cx
valor máximo de cmp, 0
jnz sc1
sc2 :
dx popular
añadir dl, 30h
mov ah, 2
int 21h
bucle sc2
Pop dx
Pop cx
pop bx
Barril explosivo
Remojar en agua para suavizarlo
Fin del código
Fin del inicio