0

アセンブリで2つの異なる文字を比較しようとしています(Cプログラムでアセンブリ関数を呼び出しています)。char の 1 つは構造体に属し、もう 1 つは関数を呼び出すときに渡されます。

struct node {
    void   *previous;       
    void   *next;   
    unsigned int num;       
    unsigned int A;     
    unsigned int B;
}

node something;
something.A = 'C'; //assume everything else is correct

char A = 'C';
int func( char A ){ }:
find_course:
    pushl   %ebp
    movl    %esp, %ebp
    subl    $28, %esp
    movl    8(%ebp), %ebx
    movl    10(%ebp), %ecx
    movl    16(%ebp), %edx
    movl    something, %edi
    cmpl    10(%edi), %ebx

.END:
    leave
    ret

gdb でデバッグすると、%ebx は 83 ですが、10(%edi) は 21315 です。それらを文字として出力すると、どちらも「C」に見えます。21315 を 83 に変換する方法はありますか?

4

2 に答える 2

3

データの解釈に問題があるだけです。扱っている数値の 16 進値を確認してください。

 Base 10      Base 16
   83           53
  21315        5343

ご覧のとおり53、どちらの場合も最初のバイトがあります。どこでも 1 バイト以上を読み取っているだけです。それlが、命令の接尾辞の意味です。あなたはおそらくそれよりも読みたくないでしょう。

于 2012-10-07T05:19:58.467 に答える
2

はい:movb 10(%edi), %al代わりに使用します。

于 2012-10-07T05:20:19.050 に答える