2011-10-30 10 views
0

rown & colnを入力してからreadintwritestringと入力すると、intの代わりにシンボルが表示されます。どのようにintを入力して表示することができますか?代わりにシンボルを取得する

.686 
.MODEL FLAT, STDCALL 
.STACK 
INCLUDE Irvine32.inc 

.Data 
txt1 byte "ENTER NUM OF ROWS:",0dh,0ah,0 
txt2 byte "ENTER NUM OF COLUMNS:",0dh,0ah,0 
txt3 byte "ENTER AN ARRAY OF" 

rown byte 0,"x"        ;rows number 
coln byte 0,":",0dh,0ah,0     ;columns number 


.CODE 
main PROC 
mov edx,offset txt1 
call writestring       ;asks the user to enter the rows number 
call readint 
mov rown,al 
mov edx,offset txt2 
call writestring 
call readint        ;asks the user to enter the columns number 
mov coln,al 

mov edx, offset txt3 
call writestring ;;;;; here is the problem !!!!! 
call waitmsg 
     exit 
main ENDP 
END main 
+0

これはどのプロセッサ/命令セットですか? –

+0

おそらくプラットフォームとo/sを特定するべきです。誰かがこの質問に答えられる可能性は非常に低いです。 'readint'などのコードはありません。 –

+1

数字を最初にテキストに変換する必要があります。もしそのような関数がそれぞれの数字に対して存在するならば、' writeint'関数を使用する必要があります。 – user786653

答えて

3

コードの重要な部分が欠落しているので、私は推測しています。
readIntは数値を読み取り、返すので、書き込む前に文字列に再変換する必要があります。
確かに、列と行の数として97(10進数)を入力してください。私が間違っていないと、出力メッセージは"ENTER AN ARRAY OF axa:"

0

になります。アーバインのReadIntは、入力された数値をCPU内部形式 "DWORD"に変換します。 ASCII(WriteString)として書き込むには、変換する必要があります。投稿されたプログラムでは、各数字に対して1バイトしか予約されておらず、ALしか格納されていないので、0..9の範囲だけを変換しなければならないと仮定します。したがって、ただ1つの数字を1つのASCII文字に変換する必要があります。変換テーブルは次のようになります。

CPU -> ASCII 
0 -> 48 
1 -> 49 
2 -> 50 
3 -> 51 
4 -> 52 
5 -> 53 
6 -> 54 
7 -> 55 
8 -> 56 
9 -> 57 

Tlの; DR:ちょうどALに48を追加します。

;.686          ; Included in Irvine32.inc 
;.MODEL FLAT, STDCALL      ; Included in Irvine32.inc 
;.STACK          ; Not needed for .MODEL FLAT 
INCLUDE Irvine32.inc 

.DATA 
    txt1 byte "ENTER NUM OF ROWS:",0dh,0ah,0 
    txt2 byte "ENTER NUM OF COLUMNS:",0dh,0ah,0 
    txt3 byte "ENTER AN ARRAY OF " 

    rown byte 0,"x"        ;rows number 
    coln byte 0,":",0dh,0ah,0     ;columns number 

.CODE 
main PROC 
    mov edx,offset txt1 
    call WriteString      ;asks the user to enter the rows number 
    call ReadInt 
    add al, 48 
    mov rown, al 
    mov edx, offset txt2 
    call WriteString 
    call ReadInt       ;asks the user to enter the columns number 
    add al, 48 
    mov coln, al 
    mov edx, offset txt3 
    call WriteString 
    call WaitMsg 
    exit 
main ENDP 
END main 

いくつかの注意点:

1)アーバインのReadInt「32ビット符号付き10進数を読み込み、整数"。したがって、EAXの数値は0..9の範囲外になり、ALの数値は有効な数値以外の数字になります。 の値全体を変換するには、`hereをご覧ください。

2)rowncolnはASCII文字になりました。最終的には、さらに処理する前に整数に変換する必要があります。

3)10進数が2桁以上になるDWORDの変換は、少し複雑です.1桁の数字は、10で繰り返し除算して剰余を格納する必要があります。

関連する問題