Windows組合語言程式設計同步練習(1)

來源:互聯網
上載者:User

;<<Windows組合語言程式設計>>習題17:參見下面給出的C程式,編程求a,b的最大公約數。
;unsigned int gcd (unsigned int a, unsigned int b)
;{
;   if(a == 0 && b == 0)
;       b = 1;
;   else if(b == 0)
;       b = a;
;   else if(a != 0)
;       while(a != b)
;       {
;           if(a < b)
;               b -= a;
;           else
;               a -= b;
;        }
;   return b;
;}
;2006-12-12 高玉涵
;程式中不考慮處理<0的數。
.386
.model flat,stdcall
option casemap:none
includelib  /masm32/lib/msvcrt.lib
printf  PROTO C :dword, :vararg

.data
dtemp1      dword   91       ;臨時變數,用來存放輸入的值a。
dtemp2      dword   49       ;臨時變數,用來存放輸入的值b。
szFmt       byte    '最大公約數是:%d', 0ah, 0

.code
start: 
            cmp dtemp1, 0
            jle b10         ;dtemp1 <= 0
            cmp dtemp2, 0              
            jle b10         ;dtemp2 <= 0                      
            cmp dtemp1, 0
            jg  b30         ;dtemp1 > 0
            jmp b60         ;結束。
b10:
            mov dtemp2, 1
            jmp b60           
b30:
            mov eax, dtemp1
            cmp eax, dtemp2
            je  b60         ;dtemp1 != dtemp2
            jg  b50         ;dtemp1 > dtemp2
            sub dtemp2, eax ;b-=a
            jmp b30
b50:
            sub eax, dtemp2 ;a-=b
            mov dtemp1, eax
            jmp b30                       
b60:
            invoke printf, offset szFmt, dtemp2
            ret
           
end         start 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.