Red de conocimiento informático - Conocimiento sistemático - Escritura en lenguaje ensamblador: dibujo de formas de onda de pulso (ver detalles)

Escritura en lenguaje ensamblador: dibujo de formas de onda de pulso (ver detalles)

;Este programa se compila y ejecuta correctamente.

; Instrucciones de operación: Al iniciar la operación, se deben ingresar cuatro parámetros: altura del pulso, ancho del pulso, ancho del espacio del pulso y color de la línea de onda.

; Rango de valores:

; Altura del pulso: 0 ~ 239

; Ancho del pulso: 0 ~ 320

; : 0 ~ 320

; color de línea ondulada: 1 ~ 15 (consulte la tabla de parámetros de color a continuación)

; si el número de dígitos es 3, la entrada del elemento actual finaliza automáticamente. No se requiere entrada; si hay menos de 3 dígitos, presione la tecla Enter para finalizar la entrada actual.

Segmento de código

Asumir CS:Code, DS:Code

CR EQU 000DH

¿Qué pasa si EQU 000?

KBBack EQU 0008H

-

Oscuro (primer plano y fondo)

Valor constante

Negro EQU 0

Azul EQU 1

Verde EQU 2

Cian EQU 3

Rojo EQU 4

Rojo EQU 5

Marrón·EQU 6

Gris claro EQU No. 7

; color claro (primer plano)

valor constante

Oscuro; gris EQU No. 8

Azul claro EQU No. 9

Verde claro EQU 10

Cian claro EQU 11

Rojo brillante EQU 12

Magenta claro EQU 13

Amarillo EQU 14

Blanco EQU 15

Intermitente EQU 80H

; -

; Función: Mostrar la cadena de la dirección especificada (Str_Addr)

; Entrada:

; )

; Uso: Dirección de cadena de salida

; Ejemplo de uso: Salida PromptStr

Dirección de cadena de macro de salida

p>

lea dx, Str_address

mov ah, 9

int 21h

EndM

;-

p>

;Función: Salida de retorno de carro y avance de línea

Ingresar cerca de CTLF

Empujar ax

Empujar dx

mov ah, 02h

mov dl, 0dh

int 21h

mov dl, 0ah

int 21h

Dx popular

Barril explosivo

Remojado en agua para suavizarlo

Punto final Enter_CTLF

-

Función: Obtener la posición del cursor

; p>

; Entrada: Ninguna

; Salida: DH=número de línea, DL=número de columna.

Cerca de GetCursor Proc

Empujar hacha

Empujar BX

Empujar CX

BX XOR BX

MOV, 3

INT 10H

MOV cursor_line, DH

MOV cursor_Col, DL

Pop·CX

Pop·BX

Barril explosivo

Remojado en agua para suavizarlo

Cursor_Row DB?

Cursor_Col DB?

Obtener el final del cursor

; -

; Función: Establecer la posición del cursor

; Entrada: Cursor_Row=coordenada de fila; coordenadas)

Establecer avance del cursor hacia cerca

Empujar CX

Empujar BX

Empujar Ax

MOV DH, Cursor_Row

MOV DL, Cursor_Column

BX XOR BX

MOV, 2

INT 10H

Barril explosivo

Pop·BX

Pop·CX

Remojado en agua para suavizarlo

SetCursor termina

;-

;Función: Ingrese un número decimal de N dígitos en el teclado, conviértalo en un número binario y guárdelo en la unidad de almacenamiento especificada.

; Entrada: N = número de dígitos; Di = guarda la primera dirección del número ingresado.

;Salir: El número binario convertido se almacena en la unidad indicada por di.

El proceso Input_Digit está cerrado

Push dx

Push cx

Push bx

Push di

lea di, @@Save_Tmp

push di

cld

mov cx, N

push cx

@@Input: Llama a GetCursor para obtener la posición del cursor

mov, 1; acepta un carácter del teclado.

int 21h

cmp aluminio, cromo; si escribes enter, escribes menos de n dígitos.

jz @ @ ASC _ Dec Desplácese hasta el número ingresado.

cmp al, KBBack

jz @ @ KB _ Back Si es una clave en blanco, vuelva a ingresarla.

cmp al, ' 0 '

jb @ @ KBBack Si es menor que el número '0', vuelva a ingresarlo.

cmp al,' 9 '

ja @@KBBackSi es menor que el número "9", vuelva a ingresarlo.

jmp @@Save_Dig

@@KB_Back: dec Cursor_Col

inc cx

2 de diciembre

@ @KBBack: Llama a la posición del cursor SetCursor

jmp @ @input

@@Save_Dig: y al, 0fh convertido en número binario

protección stosb

El bucle @@Input acepta el siguiente número

@@ASC_Dec: mov ax, cx

Pop cx

Pops

p >

Sub cx, ax; número real de dígitos de entrada

XOR bp, bp

xor dx, dx

XOR ax, ax

jcxz @ @ Save _ Ret Si ingresa directamente sin ingresar ningún número, presione enter ' 0 '.

El número real de dígitos de entrada en dec cx se reduce en 1 y esta cadena de números de entrada se puede convertir en números binarios.

jcxz @ @ Un _ Dígito Si el número ingresado tiene solo un dígito, guarde el número binario directamente.

mov bx, 10

@@Mul_Ten: lodsb

Bytes expandidos a palabras

Añadir ax, bp

Múltiples bx

Mover bp, ax

bucle @@Mul_Ten

@@One_Digit:lodsb

Bytes expandidos a palabras

Agregar hacha, bp

@@Save_Ret: pop di

stosw

pop bx

Pop cx

Dx popular

Remojado en agua para suavizarlo

@@Save_Tmp db 16 dup(?)

Input_digit EndP

;-

Prompt_Str1 db 'Ingrese la altura del pulso: $ '; Solicite ingresar la altura del pulso

Prompt_Str2 db 'Ingrese el ancho del pulso: $ '; para ingresar el ancho del pulso

Prompt_Str3 db 'Ingrese el tiempo de espera del pulso: $ '; Solicite el tiempo discontinuo

Prompt_Str4 db 'Ingrese el color de la línea: $ '; color de línea.

n equ 3; ingrese el número decimal

¿Pulso alto dw? ;Amplitud del pulso

¿Ancho_pulso dw? ;Ancho de pulso

Wait_Time dw? ;Ancho de discontinuidad de pulso

Coloru_Pulse dw? ;Color de línea ondulada

Inicio: push cs

Pop cámara digital

Push cs

pop es crea el segmento de datos, segmento adicional y Los segmentos de código se convierten en el mismo segmento.

Salida request_str 1; solicitud de altura del pulso de entrada

lea di, amplitud del pulso Hight_Pulse

Llame al teclado Input_Digit para ingresar un número de 3 dígitos Número decimal, convertir conviértalo en un número binario y guárdelo en la unidad de almacenamiento especificada.

Ingrese la llamada y envíe el retorno de carro y el avance de línea

El mensaje de salida_ Str2 solicita ingresar el ancho del pulso

lea di, Ancho_Pulse ancho del pulso

Llamar a input_digits

Llamar a las salidas de llamada caracteres de retorno de carro y salto de línea

Salida request_ Str3 solicita ancho de discontinuidad del pulso de entrada

lead di, Wait_Time pulse ancho de discontinuidad

Número de entrada de llamada

Llamada a retorno de carro de salida de llamada, carácter de salto de línea

Salida Prompt_Str4 onda de aviso Color de línea.

Lea di, color de línea ondulada Colou_Pulse

Llamar a input_digits

mov ax, 12h; Establecer 640x480, modo de visualización de gráficos de 16 colores.

int 10h

; Dibuja una línea horizontal en el medio de la pantalla usando la línea central del pulso.

mov bp, 640; número de punto transversal

xor Co., Ltd.

xor cx, CX; punto de partida transversal

mov dx, 480; modo de visualización gráfica, 480 puntos en una columna.

shr dx, 1; punto de inicio vertical

Película, 0ch

mov al, byte ptr Colou_Pulse usa color de píxel

l0: int 10h; escribe píxeles del color especificado.

inc cx apreciación horizontal derecha

Diciembre pb

Prueba de presión arterial, presión arterial

jnz L0

;Dibuje el patrón de onda de pulso correspondiente en pantalla completa de izquierda a derecha.

mov bp, Hight_Pulse mide la altura del pulso

xor cx, CX; punto de inicio horizontal

mov dx, modo de visualización gráfica, 480 puntos en una columna; .

shr dx, 1; punto de inicio vertical

l 1:int 10h; escribe píxeles del color especificado.

dec dx lesión vertical hacia arriba

Diciembre pb

Prueba de presión arterial, presión arterial

jnz L1

Pulse_Wave: mov bp, Width_Pulse toma el ancho del pulso, un período de pulso.

L2:int 10h; Escribe píxeles del color especificado.

Inc cx aumenta horizontalmente hacia la derecha

cmp cx, 639

ja se detiene; si llega al extremo derecho de la pantalla, salta del bucle; , espere a que el usuario presione un botón y finalice el programa.

Diciembre pb

Prueba de presión arterial, presión arterial

jnz L2

mov pb, Hight_Pulse mide la altura del pulso

shl bp, 1

L3:int 10h; escribe píxeles del color especificado.

Inc dx aprecia verticalmente hacia abajo

Diciembre pb

Test de presión arterial, presión arterial

jnz L3

mov bp, Wait_Time toma el ancho de discontinuidad del pulso

l4:int 10h escribe el píxel del color especificado.

Inc cx aumenta horizontalmente hacia la derecha

cmp cx, 639

ja se detiene; si llega al extremo derecho de la pantalla, salta del bucle; , espere a que el usuario presione un botón y finalice el programa.

Diciembre pb

Prueba de presión arterial, presión arterial

jnz L4

mov pb, Hight_Pulse mide la altura del pulso

shl bp, 1

l5:int 10h; escribe píxeles del color especificado.

dec dx lesión vertical hacia arriba

Diciembre pb

Prueba de presión arterial, presión arterial

jnz L5

onda de pulso jmp; al final de un ciclo de pulso, ingrese el siguiente ciclo de pulso.

Pausa: mov ah, 1; pausa y pulsa cualquier tecla para finalizar el programa.

int 21h

mov, 3; Establece el modo de visualización de texto de 80x25 y 16 colores.

int 10h

Exit_Proc: mov ah, 4ch finaliza el programa

int 21h

Fin del código

Fin de inicio; este es el final de la compilación