汇编,比较两个字符

时间:2015-07-25 15:46:28

标签: assembly pep8-assembly

我遇到了这个问题:

我想比较两个字符与他们知道哪一个按字母顺序排在第一位(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 

1 个答案:

答案 0 :(得分:0)

问题是CPA比较单词而不是字节,而char2是单个字节,后跟EOL。因此CPA将使用这两个词组成的单词作为大端数字。如果你按照我的说法在模拟器中检查,你可以看到操作数实际上分别是7A0A610A za

由于没有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标签上。