【发布时间】:2020-06-27 15:20:46
【问题描述】:
我正在使用程序集 emu8086 在我的项目中工作,并且我做了很多事情: 现在我正在努力放置用户选择的选项。我想使用用户选项将 LED 颜色从(0-7)更改,我已经做了很多事情我只是不明白我将如何更改颜色,如果用户选择 1 两个正方形( leds) 需要更改为蓝色,对于所有颜色,我需要验证用户选项。
这是我的代码:
title ac-cores-mov-cursor.asm - desenha poligno colorido em modo texto
org 100h ; directiva para definição do enderço da 1ª instrução
; definição de constantes
inicio: jmp princ ; etiqueta e instrução de 'salto' para procedimento
;____________________Menu_cores___________________________
menucores db '1 black',0ah,0Dh
db '2 blue',0ah,0Dh
db '3 green',0ah,0Dh
db '4 cyan ',0ah,0Dh
db '5 red',0ah,0Dh
db '6 magenta',0ah,0Dh
db '7 brown',0ah,0Dh
db '8 light gray',0ah,0Dh
db "Please select a choice(1-8):",13,10, '$'
menu db '1 Todos os leds ligados',0ah,0Dh ;leva ao menu cores para escolher a cor
db '2 Combinaçao(0,2,4,6)',0ah,0Dh ;leva ao menu cores para escolher a cor dos leds 0 2 4 6
db '3 Combinaçao(1,3,5,7)',0ah,0Dh ;leva ao menu cores para escolher a cor dos leds 1 3 5 7
db "Please select a choice(1-8):",13,10, '$'
;____________________Menu_principal___________________________
menuprincipal db '1 Todos os leds desligados',0ah,0Dh ; retorna os leds todos com a cor preta
db '2 Cor dos leds ',0ah,0Dh ; leva para o menu cores
db "Please select a choice(1-2):",13,10, '$' ;opçao escolhida
; definição de variáveis
esqlin db 15 ; linha do vértice superior esquerdo
esqcol db 10 ; coluna do vértice superior esquerdo
largura db 2 ; largura do fundo
altura db 2 ; altura do fundo
texlin db 17 ; linha do texto
texcol db 12 ; coluna do texto
colincio db 2
enter db 0Ah,0Dh,'$'
fundo db 'Cor fundo (0-9,A-F) ', '$'
texto db 'Cor texto (0-9,A-F) ', '$'
corfund db 0 ; 0-15 (decimal), 0-F (hexadecimal)
cortext db 4 ; 0-15 (decimal), 0-F (hexadecimal)
frase1 db 'LED1', '$'
corft db 0Fh
;___________________________START___________________________
verificacao:
princ proc near ; início do procedimento principal
lea dx, menucores ; escrever string
mov ah, 09h
int 21h
; define cor do texto e cor do fundo do ecrã
mov corft, 24h
mov bh, corft
mov ch, esqlin ; vértice superior esquerdo - linha
mov cl, esqcol ; vértice superior esquerdo - coluna
mov dh, esqlin
add dh, altura ; vértice inferior direito - linha
dec dh
mov dl, esqcol
add dl, largura ; vértice inferior direito - coluna
dec dl
mov ah, 06h
int 10h
; instruções para terminar o programa
mov ax, 4c00h
int 21h
princ endp ; fim do procedimento principal
; define cor do texto e cor do fundo do ecrã
mov bh, 218 ; 218(16*13+10) = DAh: D - cor fundo, A - cor texto
mov al, 01h ; nº linhas scroll
mov ch, 0 ; vértice superior esquerdo - linha
mov cl, 0 ; vértice superior esquerdo - coluna
mov dh, 0 ; vértice inferior direito - linha
mov dl, 46 ; vértice inferior direito - coluna
mov ah, 06h ; scroll uma linha (al)=1
int 10h
mov al, corfund
mov bh, 16 ; 16 = 2^4
mov ah, 0
mul bh ; 16*corfund
add al, cortext ; = corfund*16 + cortext
【问题讨论】:
-
这取决于您如何进行输出。通常在 DOS 时代,每个字符有两个字节。一个用于 ASCII,一个用于颜色。示例:您将 ASCII 放入 AL,将颜色放入 BL,然后调用 INT10h。见en.wikipedia.org/wiki/INT_10H。如果您需要更精确,请提供相关代码 - 以便我们了解您的输出效果。
-
这是我的代码:we.tl/t-PRvhRsq3Sr 正在做一个绿色方块,我的目标是在同一行中做 7 个这样的方块(LED),只增加列,因为我正在考虑执行 7* 我的变量以在列中使用不同的数字,但这是一个庞大的代码,所以我想找到一种更好的方法来在同一行中执行这 7 个 LED。
-
"terminar o programa":我不懂西班牙语,但下面的两行告诉我这一定是“退出程序”的意思。这可能是您面临的实际问题:我认为您的试用代码没有被执行。首先看你跳入程序(就在开始处,第3行)通过dos输出菜单,然后你实际设置颜色但然后退出。我认为剩下的永远不会被执行,我认为它甚至不会以错误的颜色打印文本 led1 - 它根本不会打印它。要么将你的代码移动到 proc 中,要么在 proc 之后跳转并调用它进行输出并将 exit 放入 main