| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
 本帖最后由 水柔炎 于 2018-11-29 18:10 编辑  
 
.486            ;使用了486模式 
.model flat, stdcall 
 
option casemap:none 
 
includelib \masm32\lib\kernel32.lib 
includelib \masm32\lib\masm32.lib 
includelib \masm32\lib\msvcrt.lib 
 
 
include \masm32\include\kernel32.inc 
include \masm32\include\masm32.inc 
include \masm32\include\msvcrt.inc 
 
 
 
.data 
    x   dd  11,22   ;定义一个64位的二进制数据x 
    y   dd  33,44 
    z   dd  4 dup(0) 
    szText db "Hello World!", 0 
    szFmt db 'Z+12=%u,Z+8=%u,Z+4=%u,Z=%u', 0 
    szTest  db  'x=%u,y=%u',0 
.code 
start: 
    invoke StdOut, addr szText 
    lea ebx,z 
    mov esi,y 
    mov edi,y+4 
 
    ;下面完成的是两个低32位x*y,结果保存在z(低32位),z+4(高32位) 
    mov eax,x 
    mul esi 
    mov [ebx],eax 
    mov [ebx+4],edx 
 
    ;下面完成的是x的高32位与y的低32位相乘,乘法结果的高32位送z+8,低32位加入z+4,若加法有进位,应向z+8进位 
    mov eax,x+4 
    mul esi 
    add z+4,eax 
    adc z+8,edx     
 
    ;下面完成的是x的低32位与y的高32位相乘,乘法结果的低32位加入z+4,高32位加入z+8,若z+4加法有进位,应该要向z+8进位 
    mov eax,x 
    mul edi 
    add z+4,eax 
    adc z+8,edx 
 
    ;下面完成的是x的高32位与y的高32位相乘,乘法结果的低32位加入z+8,高32位送入z+12,若z+8加法有进位,应该向z+12进位 
    mov eax,x+4 
    mul edi 
    add z+8,eax 
    adc z+12,edx 
 
    invoke crt_printf, addr szTest, x , y    
     
    invoke crt_printf, addr szFmt, z+12 ,z+8, z+4,z    
    ret  
end start 
 
这是完整的代码,今天老师给我们讲了分享给大家看看 |   
 
 
 
 |