Diseño de curso en lenguaje ensamblador Diseña un gráfico en la pantalla y rellénalo con diferentes colores
;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) p>
; 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 p >
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 p >
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: