汇编练习题(3)

题目:输入三个整数x,y,z,请把这三个数由小到大输出

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)建立一个头文件,如: p3.inc, 并在此头文件中声明函数:  print PROTO

  b) 在相应的实现文件中实现功能代码, p3.asm:    

print proc 
re
print endp

  c): 作为调用者main.cpp 必须包含头文件和实现文件

include p3.inc
include p3.asm

    d). 如果 功能函数不被导出, 则不必在头文件中声明

    e):不管是什么样的实现函数必须放在.code中

原文地址:https://www.cnblogs.com/sld666666/p/2796809.html