Red de conocimiento informático - Conocimiento del nombre de dominio - ¿Cómo diseñar un programa de directorio telefónico simple usando ensamblador?

¿Cómo diseñar un programa de directorio telefónico simple usando ensamblador?

Nadie me ayudó con ideas, pero se jugó con el diseño de mi curso. Adjunto la respuesta yo mismo para ayudar a los amigos necesitados.

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

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

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

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]

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

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, ' $ '

jz cshtele32

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

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

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

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>

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]

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

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>

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

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