|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
这是完整的代码,今天老师给我们讲了分享给大家看看 |
|