2016-11-06 18 views
0
.model small 
.stack 

.data 
intro db 10,13,"Inserisci un carattere: ",'$' 
finale db 10,13,"Il carattere inserito e' una lettera maiuscola.",'$' 
finale2 db 10,13,"Il carattere inserito e' una lettera minuscola.",'$' 
finale3 db 10,13,"Il carattere inserito e' un carattere speciale.",'$' 
finale4 db 10,13,"Il carattere inserito e' una cifra numerica.",'$' 
errore db 10,13,"Il carattere inserito non rientra nel range verificabile.",'$' 
domanda db 10,13,"Inserire un nuovo carattere? [s/n]: ",'$' 
var1 db ? 
risp db ? 

.code 
mov ax,@data 
mov ds,ax 

start: 

lea dx,intro 
mov ah,09h 
int 21h 

mov ah,01h 
int 21h 
mov var1,al 

cmp var1,32 
JL errore1 
cmp var1,125 
JG errore1 
cmp var1,47 
JLE speciale 
cmp var1,57 
JLE numero 
cmp var1,64 
JLE speciale 
cmp var1,90 
JLE maiuscola 
cmp var1,96 
JLE speciale 
cmp var1,122 
JLE minuscola 
cmp var1,125 
JLE speciale 


middle: 
JMP start 

maiuscola: 
lea dx,finale 
mov ah,09h 
int 21h 

jmp domanda1 

minuscola: 
lea dx,finale2 
mov ah,09h 
int 21h 

jmp domanda1 

speciale: 
lea dx,finale3 
mov ah,09h 
int 21h 

jmp domanda1 

numero: 
lea dx,finale4 
mov ah,09h 
int 21h 

jmp domanda1 

domanda1: 
lea dx,domanda 
mov ah,09h 
int 21h 

mov ah,01h 
int 21h 
mov risp,al 

cmp risp,115 
je middle 
jmp fine 

fine: 
mov ah,4ch 
int 21h 

errore1: 
lea dx,errore 
mov ah,09h 
int 21h 

JMP fine 

end start 

アセンブリプログラムを実行しているTASMとTLINK返さないエラーを使用したが、私はそれを実行したら(DOSBoxを使用)する場合、ビデオ出力は、奇妙なASCII記号の代わりに、テキストを示し(イントロ、フィナーレ、finale2)。ユーザーは/入力をチェックしたい場合は、再起動するために、私はそれを修正する前に それは最後の行は奇妙な出力が

end 

代わりの

end start 

でなければなりません

+0

わかりませんが、各文字列の後にゼロバイトを追加する必要があります。 –

+0

@ Jean-FrançoisFabreDOSでは、出力関数を使用するときには、文字列を** $ **で終わらせるだけで済みます。 –

答えて

1

...ちゃんと仕事をしていましたさらに、mov ds,axの後には、クリアaxがクリアされます。 私はmain procを書くほうがよいでしょう。

+0

うん! 'end start'を' end'に変更しました! – Gabriele

+0

「MOV DS、AX」の後に「AX」をクリアする点は何ですか?説明するケア? –

+0

その*優れた実践*それだけです。 – AghaKhan