汇编心得(一)在32位机上实现64位数的相加

 1 TITLE MASM Template (main.asm)
 2 
 3 ; Description:
 4 ; 
 5 ; Revision date:
 6 
 7 .386P        ; Pentium Pro or later
 8 .MODEL flat, stdcall
 9 .STACK 4096
10 option casemap:none;  大小不敏感
11 
12     
13 printf          PROTO C :dword,:vararg
14 scanf           PROTO C :dword,:vararg
15 gets        PROTO C :dword
16 getchar        PROTO C
17 strlen        PROTO C :dword
18 ExitProcess    PROTO,dwExitCode:DWORD          ; exit program
19 exit        EQU <INVOKE ExitProcess,0>
20 
21 INCLUDELIB C:\asm\USER32.LIB
22 INCLUDELIB C:\asm\KERNEL32.LIB
23 INCLUDELIB C:\asm\MSVCRT.LIB
24 
25 chr$ MACRO any_text:VARARG
26         LOCAL txtname
27         .data
28           txtname db any_text,0
29           align 4
30         .code
31           EXITM <OFFSET txtname>
32 ENDM
33 
34 .data
35  val1    qword    123456789abcdef0h
36  val2    qword    9876543210fedcbah
37  s    label    dword
38  sum    qword    ?
39 
40  .code
41 main    PROC
42     MOV    EAX,dword ptr val1                ;首先计算低8位,进位在cf中
43     ADD    EAX,dword ptr val2
44     MOV    EDX,dword ptr val1+4            ;然后计算高八位,并且将第八位的进位加上由adc实现  
45     ADC    EDX,dword ptr val2+4                ;每一字节两个数字,+4就向前进了8位
46     MOV    dword ptr sum,EAX
47     MOV    dword ptr sum+4,EDX
48 
49     invoke    printf,chr$("The result is: %llx",0dh,0ah),sum
50     invoke  getchar
51     exit
52 main    ENDP
53 
54     END main

 

posted @ 2012-04-17 21:18  windynightst  阅读(681)  评论(0编辑  收藏  举报