汇编,比较两个字符
Assembly, comparing two chars
我被这个问题困住了:
我想将两个字符与其进行比较,以了解哪个字符按字母顺序(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
,它总是分支到 less 标签..
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
问题是 CPA
比较的是单词,而不是字节,而你的 char2
是一个字节,后面是 EOL
。所以 CPA
将使用由这两个组成的单词作为大端数字。如果你像我告诉你的那样在模拟器中检查它,你可以看到操作数实际上是 7A0A
或 610A
分别代表 z
和 a
。
由于没有 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
标签。
我被这个问题困住了:
我想将两个字符与其进行比较,以了解哪个字符按字母顺序(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
,它总是分支到 less 标签..
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
问题是 CPA
比较的是单词,而不是字节,而你的 char2
是一个字节,后面是 EOL
。所以 CPA
将使用由这两个组成的单词作为大端数字。如果你像我告诉你的那样在模拟器中检查它,你可以看到操作数实际上是 7A0A
或 610A
分别代表 z
和 a
。
由于没有 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
标签。