2016-08-12 33 views
0

我有一個問題,在屏幕上顯示的行數和列的顏色不準確。這是我試過的。顏色變化在組裝tasm

.model small 
.stack 
.data 
mes db'ENTER ANY NUMBER: $' 
COUNTER DB '0' 

.code 
start: 
mov ax,@data 
mov ds,ax 

TYPEAGAIN: 
mov ah,02H 
MOV bh,00 
mov dh,13 
mov dl,35 
int 10h 

mov ah,09h 
mov dx,offset mes 
int 21h 

mov ah,01h 
int 21h 
INC COUNTER 

CMP AL,'1' 
JE WTOBLACK 
JNE LABAS 

WTOBLACK: 
CMP COUNTER,'1' 
JE BLACK 
CMP COUNTER,'2' 
JE BLUE 
CMP COUNTER,'3' 
JE GREEN 
CMP COUNTER,'4' 
JE CYAN 
CMP COUNTER,'5' 
JE RED 
CMP COUNTER,'6' 
JE MAGENTA 
CMP COUNTER,'7' 
JE YELLOW 
CMP COUNTER,'8' 
JE WHITE 
JMP TYPEAGAIN 
LABAS: 
JMP EXIT 

BLACK : 
MOV AH,06H 
mov bh,00000000b 
JMP LOC 

BLUE : 
MOV AH,06H 
mov bh,00010001b 
JMP LOC 

GREEN : 
MOV AH,06H 
mov bh,00100010b 
JMP LOC 

CYAN : 
MOV AH,06H 
mov bh,00110011b 
JMP LOC 

RED : 
MOV AH,06H 
mov bh,11001100b 
JMP LOC 

MAGENTA: 
MOV AH,06H 
mov bh,11011101b 
JMP LOC 

YELLOW: 
MOV AH,06H 
mov bh,11101110b 
JMP LOC 

WHITE : 
MOV COUNTER,'0' 
MOV AH,06H 
mov bh,11111111b 
JMP LOC 

LOC: 
mov ch,0;start row 
mov cl,0;start column 
mov dh,5;end row 
mov dl,25;end column 
int 10h 
JMP TYPEAGAIN 

EXIT: 
mov ah,4ch 
int 21h 
end start 
+3

您需要更精確地描述你的問題。 – Mike

+2

沒有關係但是:註釋彙編代碼。 – m0skit0

+0

不要破壞你的帖子 –

回答

2

首先,在我的編譯器,當標籤和冒號隔開,例如:BLACK :,這是一個錯誤,它必須是BLACK:

其次,在代碼底部,您使用int 10h,服務06H,這意味着您要滾動屏幕區域。這個中斷需要一個你忘記的參數:你必須存儲要滾動的行數al。在你的情況下,AL總是包含'1',這是數字49,所以你的代碼滾動屏幕區域49行。因爲你在你的評論中提到你想滾動0到5行,所以6號會更適合。但是,爲了讓它更有趣,我會選擇1號,因此它看起來像彩虹(你可以選擇任何其他數字)。

哦,是的,我添加了一些意見,組裝時是非常重要的:

.model small 
.stack 
.data 
mes db 'ENTER ANY NUMBER: $' 
COUNTER DB '0' 

.code 
start: 
mov ax,@data 
mov ds,ax 

TYPEAGAIN: 
mov ah,02H 
MOV bh,00 
mov dh,13 
mov dl,35 
int 10h    ;SET CURSOR POSITION. 

mov ah,09h 
mov dx,offset mes 
int 21h    ;DISPLAY STRING. 

mov ah,01h 
int 21h    ;READ KEY. 
INC COUNTER 

CMP AL,'1' 
JE WTOBLACK 
JNE LABAS 

WTOBLACK: 
CMP COUNTER,'1' 
JE BLACK 
CMP COUNTER,'2' 
JE BLUE 
CMP COUNTER,'3' 
JE GREEN 
CMP COUNTER,'4' 
JE CYAN 
CMP COUNTER,'5' 
JE RED 
CMP COUNTER,'6' 
JE MAGENTA 
CMP COUNTER,'7' 
JE YELLOW 
CMP COUNTER,'8' 
JE WHITE 
JMP TYPEAGAIN 
LABAS: 
JMP EXIT 

BLACK:     ;FIXED LABEL. 
MOV AH,06H 
mov bh,00000000b 
JMP LOC 

BLUE:     ;FIXED LABEL. 
MOV AH,06H 
mov bh,00010001b 
JMP LOC 

GREEN:     ;FIXED LABEL. 
MOV AH,06H 
mov bh,00100010b 
JMP LOC 

CYAN:     ;FIXED LABEL. 
MOV AH,06H 
mov bh,00110011b 
JMP LOC 

RED:     ;FIXED LABEL. 
MOV AH,06H 
mov bh,11001100b 
JMP LOC 

MAGENTA: 
MOV AH,06H 
mov bh,11011101b 
JMP LOC 

YELLOW: 
MOV AH,06H 
mov bh,11101110b 
JMP LOC 

WHITE:     ;FIXED LABEL. 
MOV COUNTER,'0' 
MOV AH,06H 
mov bh,11111111b 
JMP LOC 

LOC: 
mov al, 1    ;HOW MANY ROWS TO SCROLL. 
mov ch,0;start row 
mov cl,0;start column 
mov dh,5;end row 
mov dl,25;end column 
int 10h    ;SCROLL DOWN SCREEN AREA. 
JMP TYPEAGAIN 

EXIT: 
mov ah,4ch 
int 21h 
end start 
+0

@silaunospavlos:查詢表比這個跳轉到不同'mov reg,imm'指令的條件分支序列簡單得多。 –