汇编心得(一)在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

 

转载于:https://www.cnblogs.com/windynight/archive/2012/04/17/2454316.html

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值