0

私はこの問題で立ち往生しています:

2 つの char を比較して、どちらがアルファベット順 (ASCII 位置) で最初に来るかを知りたい。だから私はこのようなことをします:

LOADBYTEA  string,x; it loads in the accumulator A, a byte from the string at                                        ;                   position x
CPA  char2,d       ;compare it with the first char enter with keybord input
BRLT   less        ;if A is lesser than char2, then goto less label
BRGT   greater     ;if A is greater than char2, then goto greater label

a z問題は、私が : を入力するかz a、キーボード入力で入力するかに関係なく、常にラベルが少なくなるということです..

CPA (比較) 関数は、変数 char2 とアキュムレータ A の減算を行います。答えが負の場合は、より少ない値に分岐します。したがって、 が入力された場合z a、それは 7A-61=19 である必要があり、より大きく分岐する必要がありますが、そうではありません!

a z本来あるべきように分岐します。答えはいつも否定的なようです 理由はわかりません...

手伝ってくれてありがとう!

chari char,d
chari EOL,d
chari char2,d

ldbytea char,d
cpa char2,d 
brlt less
brgt gt

less:charo '1',i
stop

gt:charo '2',i 
stop





char:.block 1
char2:.block 1
EOL:.block 1 ;the \n
.end 
4

1 に答える 1

0

問題は、CPAバイトではなく単語を比較することであり、yourchar2は 1 バイトで、その後にEOL. したがって、CPAは、これら 2 つの単語をビッグ エンディアンとして使用します。私が言ったようにシミュレーターでそれを調べると、オペランドが実際には7A0Aまたは610Aforzaであることがわかります。

がないのでCPBYTEA、自分で処理する必要があります。考えられる解決策は、次のように、一時的な単語を割り当て、そこに文字をゼロ拡張することです。

chari char,d
chari EOL,d
chari char2,d

ldbytea char,d
ldbytex char2, d
stx tmp, d
cpa tmp, d
brlt less
brgt gt

less:charo '1',i
stop

gt:charo '2',i
stop


char:.block 1
char2:.block 1
EOL:.block 1 ;the \n
tmp: .block 2
.end

また、等しい場合はlessラベルにも適用されることに注意してください。

于 2015-07-25T22:42:20.133 に答える