2015-07-25 2 views
0

я застрял с этой проблемой:Ассамблея, сравнивая два символа

Я хочу, чтобы сравнить два полукокса с их знать, какой из них придет первым в алфавитном порядке (позиция 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 на ввод с клавиатуры ..

КВА (ср) функция сделать вычитание переменная char2 и аккумулятор A. Если ответ отрицательный, тогда он будет уменьшен до меньшего. Поэтому, если введите z a, он должен быть 7A-61 = 19 и должен размалывать до большего, но не делает!

a z brench to less нравится. Это как ответ всегда отрицательный. Я не знаю, почему ...

Спасибо за помощь!

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 
+0

Используйте симулятор, чтобы проверить в инструкции 'CPA' значение' A' и 'char2'. Кроме того, укажите полный код, см. [MCVE] (http://stackoverflow.com/help/mcve). – Jester

+0

С отладчиком видно значение A и char2, которые хороши! Я не уверен, что это хорошая идея предоставить полный код, потому что сначала его 400 строк и написано на французском, чтобы вы не поняли: s – Friendly67

+0

Я отредактировал мой пост – Friendly67

ответ

0

Проблема заключается в том, что CPA сравнивает слова, а не байт, а ваш char2 является один байт, а затем EOL. Таким образом, CPA будет использовать слово, составленное из этих двух, как большое число endian. Если вы изучите это в симуляторе, как я сказал вам, вы увидите, что операнд на самом деле 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 этикетке, а также.

Смежные вопросы