私は何を間違っていますか?
これは私が書いたアセンブリです:
char encode(char plain){
__asm{
mov al, plain
;check for y or z status
cmp al, 'y'
je YorZ
cmp al, 'z'
je YorZ
cmp al, 'Y'
je YorZ
cmp al, 'Z'
je YorZ
;check to make sure it is in the alphabet now
mov cl, al
sub cl, 'A'
cmp cl, 24
jl Other
sub cl, '6' ;there are six characters between 'Z' and 'a'
cmp cl, 24
jl Other
jmp done ;means it is not in the alphabet
YorZ:
sub al, 24
jmp done
Other:
add al, 2
jmp done
done:
leave
ret
}
}
これは、置き換えられるはずの C コードですが、そうではありません。
char encode(char plain){
char code;
if((plain>='a' && plain<='x') || (plain>='A' && plain <='X')){
code = plain+2;
}else if(plain == 'y' || plain=='z' || plain=='Y' || plain == 'y'){
code = plain - 24;
}else{
code = plain;
}
return code;
}
y、z、Y、Z ではないすべての文字を、A-Xa-x だけでなくプラス 2 に変換するようです。理由はありますか?