Red de conocimiento informático - Conocimiento sistemático - Diseño de curso en lenguaje ensamblador Diseña un gráfico en la pantalla y rellénalo con diferentes colores

Diseño de curso en lenguaje ensamblador Diseña un gráfico en la pantalla y rellénalo con diferentes colores

Definición de estructura

;char año[4] // año

; espacio (1 Bytes)

; int ingresos (4 Bytes)//ingresos

p> p>

; Espacio

; número de empleador (2 Bytes)// Número de empleados

; Bytes)

; Requisito de espacio

; Copie los datos del segmento de datos en el segmento de la tabla, estructure según el formato anterior y luego calcule el ingreso per cápita en 21. años

Supongamos ds: datos, es: tabla, cs: código, ss: pila

segmento de datos

db '1975', '1976', ' 1977', '1978', '1979', '1980', '1981', '1982', '1983'

db '1984', '1985', '1986', '1987', '1988'.1989' , '1990', '1991', '1992'

Tabla de datos '1993', '1994', '1995'

Día 16, 22, 382, 1356, 2390, 8000, 16000, 24486, 50065, 97479, 140417, 197514

DD 345980, 590827, 803530, 1183000, 1843000, 0, 37530 00, 4649000, 5937000

DW 3, 7, 9, 13, 28, 38, 130, 220, 476, 778, 1001, 1442, 2258.2793, 4037, 5635, 8226

DW 11542, 144307, 17800

Fin de los datos

Segmento de la tabla

db 21 dup ('año suma ne ? ')

Fin del segmento de la tabla

Mostrar segmentos de tabla

db 21 dup ('año suma ne ? ')

Mostrar segmentos de tabla

dw 3, 7, 9, 13, 28 , 38, 130, 220, 476, 778, 1001, 1442, 2258.')

Fin de la visualización

; Hacer una pila es de poca utilidad

; Sólo a veces lo utilizo para liberar un registro

Segmento de pila

dw 16 dup(0)

Fin de la pila

Código segmento

p>

inicio: inicio: dup('año suma ne? ')

Fin de la tabla

Mostrar segmento

db 21 dup ('año summ ne ?p>

inicio:

; establece el segmento de datos, ds: bx apunta a la primera celda del segmento de datos, es decir, ds: [bx] es la primera celda del segmento de datos Contenido de la celda

mov ax, data

mov ds, ax

set table segment

;

mov ax, table

p>

mov es, ax

Establecer segmento de pila

mov ax

, pila

mov ss, ax

mov sp, 16

; inicializa tres registros direccionables

mov bx, 0

mov si, 0

mov di, 0

; Prepárese para copiar, necesita usar bucle, 21 veces

mov cx, 21

s_start:

; Año

mov ax, ds: [bx 0] ; Para mayor claridad a continuación, escriba un 0 aquí

mov es: [si 0], ax

mov ax, ds: [bx 2]

mov es: [si 2], ax

; espacio

mov al, 32

mov es: [si 4], al

; ingresos

mov ax, ds : [ bx 84]

mov es: [si 5], ax

mov ax, ds: [ bx 86]

mov es: [si 7 ] , ax

; Espacio

mov al, 32

mov es: [si 9], al

; , ten cuidado

mov ax, ds: [di 168]

mov es: [si 0ah], ax

space

mov al, 32

mov es: [si 0ch], al

; renta per cápita, cuidado con los altibajos

; /p>

mov al, 32

mov es: [si 0ch], al

; Renta per cápita, cuidado con las fluctuaciones

mov ax, ds: [bx 84]

mov dx, ds: [bx 86]

push cx; usando cx por ahora porque div ds: [bx 168]

mov cx, ds: [

div palabra ptr cx

pop cx

mov es: [si 0dh], ax

; espacio

mov al, 32

mov es: [si 0fh], al

agregar si, 16

agregar bx, 4

add di, 2; Recuerde agregar 2 aquí

loop s_start

Arriba, los datos están organizados en un segmento de tabla, comience desde es:[0]

; El siguiente paso es leer los datos, calcular las filas y columnas y mostrarlos en la pantalla.

; siguiente :

; 0123 año (carácter) 4 espacios (caracteres) 5678 ingresos (datos) 9 espacios A B Número de empleados (datos) C espacio D E ingreso per cápita (datos) F espacios

; Un total de ****21 años

; los ingresos, el número de empleados y el ingreso per cápita deben convertirse al formato de caracteres

mov ax, display

mov ds, ax

mov si, 0

mov di, 0

mov bx, 0

mov cx, 21

loop_display:

push cx

#### año

; mov si, 0

mov ax, es: [di]

mov ds: [si], ax

mov ax, es: [di 2]

mov ds: [si 2], ax

mov ax, 0

mov ds: [si 4], ax; error de visualización original, mov ds : [si 5], hacha. El error de visualización original, mov ds: [si 5], ax, ni siquiera un byte es incorrecto.

; Mostrar año

mov dl, 20; Columna 20

Llamada dis

#### ingresos

mov ax, es: [di 5]; bajo 16 bits

mov dx, es: [di 7]; alto 16 bits

mov si, 0

Llamar a dwtoc; ds:si apunta a la primera dirección de la cadena

; Mostrar ingresos

mov dl, 28; dis

; #### Número de empleados

mov ax, es: [di 0Ah]

mov si, 0

Llame a dtoc

; Mostrar el número de empleados

mov dl, 36; Columna 36

Llame a dis

; Renta per cápita

mov ax, es: [di 0Dh]

mov si, 0

call dtoc

; ingresos

mov dl, 44; columna 44

llamar dis

agregar di, 16

pop cx

sub cx, 1

jcxz end_main

jmp cerca de ptr loop_ display

end_main:

mov ah, 01h

int 21h

mov ax, 4c00h

int 21h

; Subrutina dis

; operaciones

; Parámetro: (dl) es el número de columnas

dis:

Empujar ax

Empujar bx

Empujar cx

Empujar dx

Empujar di

Empujar si

mov ax, di

mov dh, 16

div dh

mov dh, al

agregar dh, 2; si, 0

mov cl, 2

call show_str

pop si

pop di

pop dx

pop cx

pop bx

pop ax

ret

Subrutina: dtoc

;

; Función: Convertir datos de palabras en una cadena decimal que termina en 0

; Parámetro: (ax) = datos de palabras

; cadena Dirección

; Valor de retorno: Ninguno

dtoc: