¿Cómo diseñar un programa de directorio telefónico simple usando ensamblador?
Pila de segmentos de pila
dw 512 dup(?)
Fin de pila
Segmento de datos
titlestr db '¡Bienvenido a la guía telefónica! '' ¡Por favor ingrese su elección! ', 0dh, 0ah, ' $ '
menustr db '1: Seleccionar ', 0dh, 0ah, ' 2: Insertar ', 0dh, 0ah, ' 3: Modificar ', 0dh, 0ah, ' 4 :Delete ', 0dh, 0ah, ' 5: Mostrar todos los registros ', 0dh, 0ah, ' 8: Esc ', 0dh, 0ah, ' $ '
Lista de nombres db 20 dup(20 dup(0 ))
telelist db 20 dup(20 dup(0))
Nueva base de datos de nombres 20 dup(0)
Nueva base de datos de telecomunicaciones 20 dup(0)
cnt db 1 dup(0)
cntselect db 1 dup(0)
Seleccione db 1 dup(0)
Entrar db 0dh, 0ah, ' $ '
disname db 'Nombre: $ '
distele db 'Tele: $ '
backstr db ' Tecla de menú principal 6 ! ', 0dh, 0ah, ' $ '
disstr db '¡Todos los registros! ', 0dh, 0ah, ' $ '
selstr1 db '1: Seleccionar por nombre ', 0dh, 0ah,' 2: Seleccionar por teléfono ', 0dh, 0ah, ' $ '
selstr2 db '¡Mensaje! ', 0dh, 0ah, ' $ '
selstr3 db '¡El nombre no existe! ', 0dh, 0ah, ' $ '
selstr4 db '¡El teléfono no existe! ', 0dh, 0ah, ' $ '
selstr5 db '¡La guía telefónica está vacía! ', 0dh, 0ah, ' $ '
addstr1 db '¡Ingrese un nuevo nombre y un nuevo número de teléfono! ', 0dh, 0ah, ' $ '
addstr2 db '¡La guía telefónica está llena! ', 0dh, 0ah, ' $ '
Agregar base de datos str3' ¡agregado exitosamente! ', 0dh, 0ah, ' $ '
modstr1 db 'Nuevo nombre: $ '
modstr2 db 'Newtele: $ '
modstr3 db 'Ingresar nuevo ¡Registro! ', 0dh, 0ah, ' $ '
modstr4 db '¡Modificación exitosa! ', 0dh, 0ah, ' $ '
delstr1 db '¡La guía telefónica está vacía! ', 0d, 0ah, ' $ '
base de datos delstr2' se eliminó correctamente. ', 0dh, 0ah, ' $ '
Nombre 1 db' aaaaaaaaa $ '
Nombre 2 db 'bbbbbbbbb$ '
Nombre 3 db 'ccccccccc$ '
Nombre db ' ddddddddd $ '
Nombre 5 db 'eeeeeeee$ '
Teléfono 1 dB' 11111111111$'
Teléfono 2dB' $2222222222'
Teléfono 3dB' $3333333333'
Teléfono 4dB' $4444444444'
Teléfono 5dB' 55
$55555555'
Fin de datos
Segmento de código
Proceso principal hasta el momento
Supongamos cs: código, ds: datos
Mostrar proceso de título cerca
lea dx, cadena de título
mov ah, 9
int 21h
lea dx, menustr
int 21h
Remojado en agua para suavizar
Mostrar fin del título
El proceso cshdata está cerca
mov bx, 0
lea si, nombre 1
lea di en la lista
añadir di, bx
mov cx, 20 p >
cshname11:
mov al, [si]
mov [di], al
empresa si
empresa di
cmp al, ' $ '
jz cshname12
Bucle cshname11
cshname12:
Agregar bx , 20
lea si, nombre 2
lea di en la lista
añadir di, bx
mov cx, 20 p >
cshname21:
mov al, [si]
mov [di], al
empresa si
empresa di
cmp al, ' $ '
jz cshname22
Bucle cshname21
cshname22:
Agregar bx , 20
Liz, nombre 3
Lea di en la lista
Añadir di, bx
mov cx, 20
cshname31:
mov al, [si]
mov [di], al
empresa si
empresa di
cmp al, ' $ '
jz cshname32
Bucle cshname31
cshname32:
Agregar bx, 20
Liz, nombre 4
Lea di en la lista
Agregar di, bx
mov cx, 20
cshname41:
mov al, [si]
mov [di], al
empresa si
empresa di
cmp al, ' $ '
jz cshname42
Bucle cshname41
cshname42:
Agregar bx, 20
Liz, nombre 5
Lea di en la lista
Agregar di, bx
mov cx, 20
cshname51:
mov al, [si]
mov [di], al
empresa si
empresa di p>
cmp al, ' $ '
jz cshname52
Bucle cshname51
cshname52:
Agregar bx, 20
mov ax, bx; inicializar el contador
mov bl, 20
div bl
Asuntos gubernamentales
Secretario General
mov [si], al
mov bx, 0
Litz, Tel. 1
The Telegraph di li di
Agregar di, bx
mov cx, 20
cshtele11:
mov al, [si] p>
mov [di], al
empresa si
empresa di
cmp al, ' $ '
jz cshtele12
Bucle cshtele11
cshtele12:
Agregar bx, 20
lea si, teléfono 2
《 Lee Di de The Telegraph
Agregar di, bx
mov cx, 20
cshtele21:
mov al, [si ]
mov [di], al
empresa si
empresa di
cmp al, ' $ '
jz cshtele22 p>
Bucle cshtele21
cshtele22:
Agregar bx, 20
lea si, teléfono 3
Lee Dee de The Telegraph
Añadir di, bx
mov cx, 20
cshtele31:
mov al , [si]
mov [di], al
empresa si
empresa di
cmp al, ' $ ' p>
jz cshtele32 p>
Bucle cshtele31
cshtele32:
Agregar bx, 20
lea si, teléfono 4
p>
Lee Di, The Telegraph
Agregar di, bx
mov cx, 20
cshtele41:
mov al, [si]
mov [di], al
empresa si
empresa di
cmp al,' $ '
jz cshtele42
Bucle cshtele41
cshtele42:
Agregar bx, 20
Litz, teléfono 5
Lee Di de The Telegraph
Agregar di, bx
mov cx, 20
cshtele51:
mov al, [si]
mov [di], al
empresa si
empresa di
cmp al , ' $ '
jz cshtele52
Bucle cshtele51
cshtele52:
Agregar bx, 20
Remojar y suavizar
cshdata endp
disdata continúa acercándose
lea dx, disstr
mov ah, 09h
int 21h
Jefe Secretario de Administración
mov cl, [si]
mov bx, 0
disdata1:
lea dx, disname
mov ah, 09h
int 21h
lead dx, lista de nombres
Agregar dx, bx
p>
mov ah, 09h
int 21h
lead dx, input
mov ah, 09h
int 21h
lea dx, Distler
mov ah, 09h
int 21h
lea dx, lista de teléfonos
Agregar dx, bx
mov ah, 09h
int 21h
lead dx, enter
mov ah, 09h
p >int 21h
Agregar bx, 20
Datos de bucle 1
Remojar en agua para suavizar
disdata endp
El sumador está casi en progreso
lea si, cnt determina si la guía telefónica está llena.
mov al, [si]
Aluminio pulido mecánicamente químico, 20
jb adder5
lead dx, addstr2
mov ah, 09h
int 21h
dirección jmp 6
adder5: lea dx, addtr1
mov ah, 09h
int 21h
lea dx, disname
mov ah, 09h
int 21h
mov cl, 19
lea si, nuevo nombre
Dirección 1: mov ah, 01h
int 21h
cmp al, 0dh
Mi dirección 2
mov [si], al
Empresa si
Dirección de bucle 1
Dirección 2: 24 Movimiento horario
mov [si], al
lea si, cnt calcular el desplazamiento de la dirección de destino
mov bl, [si]
XOR ax, ax
mov al, 20
mul bl
lea si, nuevo nombre
En la lista lea di
Agregar di, ax
mov cx, 20
cld
representa movsb
lea dx, input
mov ah, 09h
int 21h
Li dx, Distler
mov ah, 09h
int 21h
mov cl, 19
Lee Si, Nutley
Dirección 3: mov ah, 01h
int 21h
cmp al, 0dh
Mi dirección 4
mov [si], al
Empresa si
Sumador de bucle 3
Dirección 4: Móvil 24 horas
mov [si], al
CS
mov bl, [si]
XOR hacha, hacha
mov al, 20
mul bl
李· St. Nutley
Leigh Di, The Telegraph
Agrega di, ax
mov cx, 20
cld
Representa movsb
lea dx , input
mov ah, 09h
int 21h
lea si, cnt contador incrementa 1
mov al, [si]
inc al
mov [si], al
lea dx, addtr3
mov ah, 09h
int 21h
lea si, nuevo nombre
mov cx, 20
Dirección 7:
Move al, 0
mov [si], al
Empresa si
Dirección de bucle 7
Lee Si, Nutley
mov cx, 20
Dirección 8:
Mover al, 0
mov [si], al
Empresa si
Dirección de bucle 8
Dirección 6: ret
Fin del sumador
sel
byname proc cerca
Secretario Jefe de Administración
mov al, [si]
cmp al, 0
ja selname6
lea dx, selstr5
mov ah, 09h
int 21h
jmp selname5
selname6:
lea dx, disname
mov ah, 09h
int 21h
lea si, nuevo nombre
mov cx, 19
selname1:
mov ah, 01h
int 21h
cmp al, 0dh
je selname2
mov [si], al
empresa si
bucle selname1
selname2:
movimiento de 24 horas
mov [si], al
lea dx, input
mov ah, 09h
int 21h
lea si, cnt establece el número de ciclos
mov dx, [si]
mov bx, 0
selname3:
lea si, nuevo nombre
lea di en la lista
añadir di, bx
mov cx, 20
cld
repe cmpsb
jz nombre de usuario 4
Agregar bx, 20
10 de diciembre
cmp dx, 0 p>
jnz selname3
lea dx, el registro selstr3 no existe.
mov ah, 09h
int 21h
jmp selname5
Nombre de usuario 4:
lea dx, selstr2 existe
mov ah, 09h
int 21h
lea dx, disname
mov ah, 09h
int 21h
lea dx, lista de nombres
añadir dx, bx
mov ah, 09h
int 21h
lea dx, entrada
mov ah, 09h
int 21h
lea dx, Distler
mov ah, 09h p>
int 21h
lea dx, lista de teléfonos
Agregar dx, bx
mov ah, 09h
int 21h
lead dx, input
mov ah, 09h
int 21h
mov ax, bx; registro de la calculadora ¿Qué número consultaste? ?
mov bl, 20
div bl
inc al
lea si, cntselect
mov [si ], al
selname5:
lea si, nuevo nombre
mov cx, 20
Nombre de usuario 7:
Move al, 0
mov [si], al
company si
Bucle selname7
Remojar en agua para suavizar
p>selbyname endp
selbytele continúa acercándose
Secretario Jefe de Administración
mov al, [si]
cmp al , 0
ja seltele6
lea dx, selstr5
mov ah, 09h
int 21h
jmp Seleccionar teléfono 5
seltele6:
李dx, Distler
mov ah, 09h
int 21h p>
Lee Si, Newtele
mov cx, 19
seltele1:
mov ah, 01h
int 21h
cmp al,0dh
je seltele2
mov [si], al
company si
ring Ruta seleccione teléfono 1
Seleccione teléfono 2:
Móvil 24 horas
mov [si], al
lea dx, enter
p>mov ah, 09h
int 21h
lea si, cnt establece el número de ciclos
mov dx, [si]
mov bx, 0
Seleccione el teléfono 3:
Lee S, Nutley
Lee Dee, The Telegraph
Agregar di, bx
mov cx, 20
cld
repe cmpsb
jz seltele4
Añadir bx, 20
10 de diciembre
cmp dx, 0
jnz seltele3
lea dx, el registro selstr4 no existe.
mov ah, 09h
int 21h
jmp seleccione teléfono 5
Seleccione teléfono 4:
lea dx, selstr2 existe
mov ah, 09h
int 21h
lea dx, disname
mov ah, 09h
int 21h
lea dx, lista de nombres
añadir dx, bx
mov ah, 09h
int 21h p> p>
lead dx, input
mov ah, 09h
int 21h
lead dx, Distler
mov ah, 09h
int 21h
lea dx, lista de teléfonos
añadir dx, bx
mov ah, 09h
int 21h
lea dx, entrada
mov ah, 09h
int 21h
seltele5:
lea si, nuevo nombre
mov cx, 20
seltele7:
move al, 0
mov [si] , al
Empresa si
Selección de bucle 7
Remojado en agua para suavizar
selbytele endp
Seleccionar Proceso cercano
Seleccione 1:
lea dx, selstr1
mov ah, 09h
int 21h
mov ah, 01h
int 21h
cmp al, ' 1 '
jz select 2
cmp al, ' 2 '
jz select 3
jmp select 1
Seleccione 2:
Llamar borrar
Llamar a selbyname
jmp select 4
Seleccione 3:
Llamar borrar
Llamar selbytele
Seleccione 4: ret
Seleccionar endp
Modificar cierre de proceso
Llamar a selbyname
lea si, cntselect
mov al, [si] p>
cmp al, 0
jz modificar 5
lea dx, modstr3
mov ah, 09h
int 21h
lea dx, modstr1
mov ah, 09h
int 21h
lea si, nuevo nombre
mov cx, 20
Modificación 1:
mov ah, 01h
int 21h
cmp al, 0dh
jz modificación 2
mov [si], al
company si
Modificación de bucle 1
Modificación 2:
Movimiento de 24 horas
mov [si], al
lea dx, input
mov ah, 09h
int 21h
jmp modificado 6
Modificado 5:
jmp modificado 7
Modificado 6:
lea dx ,modstr2
mov ah, 09h
int 21h
Lee Si, Nutley
mov cx, 20
Revisión 3:
p >mov ah, 01h
int 21h
cmp al, 0dh
jz modificado 4
mov [si] , al
Empresa si
Modificación de bucle 3
Modificación 4:
Mover 24 horas
mov [ si ], al
lea dx, input
mov ah, 09h
int 21h
lea si, cntselect calcula el desplazamiento de datos modificados hacha
mov al, [si]
diciembre
mov bl, 20
mul bl
lea si, newname copia el nuevo nombre a
lead di en la lista
añadir di, ax
mov cx, 20
cld p>
significa movsb
lea si, newtele copió el nuevo número a
Leigh Dee de The Telegraph
Agrega di, ax
mov cx, 20
cld
representa movsb
lea si y el contador cntselect se borra.
Mover eje, 0
mov [si], ax
lea dx, modstr4
mov ah, 09h
int 21h
Modificación 7:
lea si, nuevo nombre
mov cx, 20
Modificación 8: p> p>
mover al, 0
mov [si], al
empresa si
modificación de bucle 8
lea si , nuevo nombre
mov cx, 20
Modificación 9:
Mover al, 0
mov [si], al
p>
Empresa si
Modificación de bucle 9
Remojar en agua para suavizarlo
Modificar endp
Eliminar procesos cercanos
Secretario Jefe de Administración
mov al, [si]
cmp al, 0
ja eliminar 1
lea dx, delstr1
mov ah, 09h
int 21h
jmp eliminar 2
eliminar 1:
llamar a selbyname
lea si, cntselect
mov al, [si]
cmp al, 0
jz delete1
lea si, cntselect calcula el desplazamiento bx de los datos a eliminar
mov cl, [si]
diciembre cl
mov al, 20
mul cl
mov bx, ax
lea si, cnt calcula el desplazamiento dx de los últimos datos.
mov cl, [si]
diciembre cl
mov al, 20
mul cl
mov dx, ax
lea si, list
lea di en la lista
añadir si, dx
añadir di, bx
mov cx, 20
cld
Representando a movsb
Litz, The Telegraph
《The Telegraph 》Lee·Di
Agregar si, dx
Agregar di, bx
mov cx, 20
cld
Representa movsb
lea si, el contador cnt disminuye en 1
mov al, [si]
diciembre
mov [si], al
lea si, cntselectCntselect clear
move al, 0
mov [si], al
lea dx , delstr2
mov ah, 09h
int 21h
eliminar 2: ret
eliminar endp
borrar procesos cercanos
mov ah, 0fh
int 10h
mov ah, 0
int 10h
Remojar en agua para suavizar
Borrar final
Inicio:
Mover eje, datos
Mover ds, ax
mover, ax
llamar a cshdata
menú1:
llamar borrar
llamar mostrar título
mov ah, 01h
int 21h
cmp al, ' 1 '
jz sel
cmp al, ' 2 '
jz añadido
cmp al, '3'
jz mod
cmp al, '4'
jz del
cmp al, ' 5 '
jz dis
cmp al, ' 8 '
jz out1
jmp menú 1 p>
Seleccionar:
Borrar llamada
Selección de llamada
Retorno jmp
Adicional:
Borrar llamada
Sumar llamadas
jmp devuelve
Modi:
Borrar llamadas
Modificar llamadas
jmp Return
del:
Borrar llamada
Eliminar llamada
jmp Return
dis :
Llamar borrar
Llamar disdata
Volver:
lea dx, backstr volver al menú principal Mensaje "Por favor, introduzca 6 para regresar al menú principal! ”
mov ah, 09h
int 21h
mov ah, 01h
int 21h
lea si , seleccione
mov [si], al
cmp al, ' 6 '
JZ menú 1; ingrese 6 para regresar al menú principal.
Llamada clara
jmp devuelve
out1:
Fin de la función principal endp principal
Fin del código
p>
Fin Inicio