;<<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