当前位置: 代码迷 >> 汇编语言 >> 32位下通常的 64位下为什么出错呢
  详细解决方案

32位下通常的 64位下为什么出错呢

热度:229   发布时间:2016-05-02 04:31:03.0
32位下正常的 64位下为什么出错呢
; Listing generated by Microsoft (R) Optimizing Compiler Version 16.00.40219.01 

TITLE D:\ASM\ASM\ASM.cpp
.686P
.XMM
include listing.inc
.model flat

INCLUDELIB MSVCRTD
INCLUDELIB OLDNAMES

PUBLIC _Add
EXTRN __RTC_CheckEsp:PROC
EXTRN __RTC_Shutdown:PROC
EXTRN __RTC_InitBase:PROC
; COMDAT rtc$TMZ
; File d:\asm\asm\asm.cpp
rtc$TMZ SEGMENT
__RTC_Shutdown.rtc$TMZ DD FLAT:__RTC_Shutdownrtc$TMZ ENDS
; COMDAT rtc$IMZ
rtc$IMZ SEGMENT
__RTC_InitBase.rtc$IMZ DD FLAT:__RTC_InitBase; Function compile flags: /Odtp /RTCsu /ZI
rtc$IMZ ENDS
; COMDAT _Add
_TEXT SEGMENT
_c$ = -8 ; size = 4
_a$ = 8 ; size = 4
_b$ = 12 ; size = 4
_Add PROC ; COMDAT
; Line 8
push ebp
mov ebp, esp
sub esp, 204 ; 000000ccH
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-204]
mov ecx, 51 ; 00000033H
mov eax, -858993460 ; ccccccccH
rep stosd
; Line 11
mov eax, DWORD PTR _a$[ebp]
; Line 12
add eax, DWORD PTR _b$[ebp]
; Line 13
mov DWORD PTR _c$[ebp], eax
; Line 15
mov eax, DWORD PTR _c$[ebp]
; Line 16
pop edi
pop esi
pop ebx
add esp, 204 ; 000000ccH
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
_Add ENDP
_TEXT ENDS
PUBLIC _WritePort
; Function compile flags: /Odtp /RTCsu /ZI
; COMDAT _WritePort
_TEXT SEGMENT
_Adr$ = 8 ; size = 4
_Val$ = 12 ; size = 4
_WritePort PROC ; COMDAT
; Line 19
push ebp
mov ebp, esp
sub esp, 192 ; 000000c0H
push ebx
push esi
push edi
lea edi, DWORD PTR [ebp-192]
mov ecx, 48 ; 00000030H
mov eax, -858993460 ; ccccccccH
rep stosd
; Line 23
mov eax, DWORD PTR _Val$[ebp]
; Line 24
mov edx, DWORD PTR _Adr$[ebp]
; Line 26
out dx, al
; Line 29
pop edi
pop esi
pop ebx
add esp, 192 ; 000000c0H
cmp ebp, esp
call __RTC_CheckEsp
mov esp, ebp
pop ebp
ret 0
_WritePort ENDP
_TEXT ENDS
END



以上是VS2010 直接生成的文件 直接再用ML.exe 编译也会出错 ,去掉两行之后 可以正常,但是到ML64.exe下编译 就一大堆错 请高手告知其中的32位和64位下有这么大区别么
------解决思路----------------------
查看出错文字啊.太多的话最小化系统法排查
  相关解决方案