更新、そのことについて申し訳ありません:Traduction小さなコードアセンブリ - コード付き> C
アセンブリ:
01: cmp edi, 5
02: ja short loc_10001141
03: jmp ds:off_100011A4[edi*4]
04: loc_10001125:
05: mov esi, 40h
06: jmp short loc_10001145
07: loc_1000112C:
08: mov esi, 20h
09: jmp short loc_10001145
10: loc_10001133:
11: mov esi, 38h
12: jmp short loc_10001145
13: loc_1000113A:
14: mov esi, 30h
15: jmp short loc_10001145
16: loc_10001141:
17: mov esi, [esp+0Ch]
18: …
19: off_100011A4 dd offset loc_10001125
20: dd offset loc_10001125
21: dd offset loc_1000113A
22: dd offset loc_1000112C
23: dd offset loc_10001133
24: dd offset loc_1000113A
擬似C:私は小さなアセンブリコードを変換する必要が
switch(edi) {
case 0:
case 1:
// goto loc_10001125;
esi = 0x40;
break;
case 2:
case 5:
// goto loc_1000113A;
esi = 0x30;
break;
case 3:
// goto loc_1000112C;
esi = 0x20;
break;
case 4:
// goto loc_10001133;
esi = 0x38;
break;
default:
// goto loc_10001141;
esi = *(esp+0xC)
break;
}
Cに組み込みプログラミングのトータルnoobとして、私はあなたの助けが必要です。
練習問題は本から来ているので、私はすでに解決策を見つけていますが、理解するのには役立ちません。
私は、ソリューション内のアセンブリコードとスイッチの関係を理解しようと努力しました。これは、コードがアセンブリコードでどのように実行されているかを正確に伝えることができないためです。
(更新:より明確に/具体的な質問^^作るしようとすると):ジャンプテーブルの動作んどのように、どのようにコードが実行される - アセンブリコードではなく、Cを - ;)
私はありません私が言ったように、私はここで初心者です、そして、英語は私の母国語ではありません! ^^
あなたの質問にコードを投稿してください。 – Banex
a)あなたのコードを掲示し、b)あなたが使用しているプラットフォームを教えてくれたら助けになるかもしれません。リンクをしないでください... – 4386427
あなたがリンクしている本が法的に無料で入手できないことが合理的に確かです(リンクを違法と非道の間にする) – UnholySheep