アセンブリ練習問題(3)

2137 ワード

3つの整数x,y,zを入力して、この3つの数を小さいから大きいまで出力してください
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):どのような実現関数でも置かなければならない.コード中