zoukankan      html  css  js  c++  java
  • 汇编练习题(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中

  • 相关阅读:
    [BJOI2019] 光线
    [BJOI2019]奥术神杖
    [HNOI2014]江南乐
    [SDOI2018]荣誉称号
    [APIO2015]雅加达的摩天楼
    [TJOI2015]线性代数
    【CF163E 】e-Government
    【CF917D】Stranger Trees
    网络流(四)dinic算法
    网络流(三)最大流最小割定理
  • 原文地址:https://www.cnblogs.com/sld666666/p/2796809.html
Copyright © 2011-2022 走看看