汇编练习题(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中