アセンブリ練習問題(3)
2137 ワード
3つの整数x,y,zを入力して、この3つの数を小さいから大きいまで出力してください
c++コードは簡単です
アセンブリのコードは次のとおりです.
ここでは、いくつかの注意点について説明します.
1.invoke擬似命令はcall命令と同等であるが、callよりも強力である
2.モジュール機能を異なるファイルで実装する場合は、次の手順に従います.
a)ヘッダファイルを作成する.例えば、p 3.inc、このヘッダファイルに関数を宣言します:print PROTO
b)対応する実装ファイルにおいて機能コードを実装、p 3.asm:
c):呼び出し者としてmain.cppにはヘッダファイルとインプリメンテーションファイルが含まれている必要があります
d). 機能関数がエクスポートされない場合は、ヘッダファイルで宣言する必要はありません.
e):どのような実現関数でも置かなければならない.コード中
c++コードは簡単です
void doFunP3(int x, int y, int z){
if (x > y)swap(x, y);
if (x > z)swap(x, z);
if (y > z) swap(y, z);
cout<< x <<','<< y <<','<< z <<endl;
}
アセンブリのコードは次のとおりです.
.data ;Êý¾Ý¶Î
x dword 200
y dword 10
z dword 400
printFmt db '%d,%d,%d', 0
.code
sortEaxEbx proc
cmp eax, ebx
jbe rtnProcess
swapProcess:
xchg eax, ebx
rtnProcess:
ret
sortEaxEbx endp
print proc
mov eax, x
mov ebx, y
invoke sortEaxEbx
mov x, eax
mov y, ebx
mov eax, x
mov ebx, z
invoke sortEaxEbx
mov x, eax
mov z, ebx
mov eax, y
mov ebx, z
invoke sortEaxEbx
mov y, eax
mov z, ebx
invoke crt_printf, addr printFmt, x, y, z
ret
print endp
ここでは、いくつかの注意点について説明します.
1.invoke擬似命令はcall命令と同等であるが、callよりも強力である
2.モジュール機能を異なるファイルで実装する場合は、次の手順に従います.
a)ヘッダファイルを作成する.例えば、p 3.inc、このヘッダファイルに関数を宣言します:print PROTO
b)対応する実装ファイルにおいて機能コードを実装、p 3.asm:
print proc
re
print endp
c):呼び出し者としてmain.cppにはヘッダファイルとインプリメンテーションファイルが含まれている必要があります
include p3.inc
include p3.asm
d). 機能関数がエクスポートされない場合は、ヘッダファイルで宣言する必要はありません.
e):どのような実現関数でも置かなければならない.コード中