如何禁止masm优化?

TaiJi1985 2006-04-05 11:04:56
我将一个vc程序和一个masm编写的汇编程序 连接后,用vc跟踪反汇编代码。
发现用masm32编译的汇编代码被弄得乱七八糟了。masm是不是默认优化代码啊?
如何关闭优化呢?

谢谢!
...全文
216 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
TaiJi1985 2006-06-08
  • 打赏
  • 举报
回复
问题已经解决,谢谢各位捧场,给分!
TaiJi1985 2006-04-08
  • 打赏
  • 举报
回复
晕死,我过了一天后,又调发现没有问题了,一个问题又隐藏了起来了。
现在把源代码贴出来。

----------
这是一个进程切换的函数,寄存器的切换
.386
.model flat
.data
newthread dd 0
oldthread dd 0
save_eax dd 0
save_ebx dd 0

.code
;;;;const ;;;;;;;;
REG_SAVESIZE equ 8
REG_EAX equ 0
REG_EBX equ 4
REG_ECX equ 8
REG_EDX equ 12
REG_ESP equ 16
REG_EBP equ 20
REG_ESI equ 24
REG_EDI equ 28
START_PROC equ 32
;;;;;end const ;;;;;
; esp + 4 old
; esp + 8 new
; c: SWITCH(old,new)
;
;;;;;;;;;;;;;;;;;;;
_SWITCH proc

mov save_eax,eax ;;save eax

mov eax,[esp+4] ;; mov address of old thread to eax
mov oldthread,eax ;; mov address of old thread to val oldthread
mov [eax+REG_EBX],ebx
mov [eax+REG_ECX],ecx
mov [eax+REG_EDX],edx
mov ebx,[esp] ; ret address! ,save to bx
mov [eax+START_PROC],ebx ;;[esp] contain ret address!,save it!
mov [eax+REG_ESP],esp ;;
mov [eax+REG_EBP],ebp
mov [eax+REG_ESI],esi
mov [eax+REG_EDI],edi
mov eax,save_eax ;; recover eax
mov [esp+4],eax ;; save eax

;;set reg
mov eax,[esp+8] ;; mov address of new thread to eax
mov newthread,eax ;; mov address of new thread to val new thread
mov ebx,REG_EBX[eax]
mov ecx,REG_ECX[eax]
mov edx,REG_EDX[eax]
mov esp,REG_ESP[eax]
mov ebp,REG_EBP[eax]
mov esi,REG_ESI[eax]
mov edi,REG_EDI[eax];;
mov save_eax,eax ;;save eax
mov eax,START_PROC[eax] ;return address
mov [esp],eax ;set return address
mov eax,save_eax ;;recover eax
mov eax,REG_EAX[eax]

ret
_SWITCH endp

end
-------------------------------
原先,写的是
.386
.model flat
.data
newthread dd 0
oldthread dd 0
save_eax dd 0
save_ebx dd 0

.code
;;;;const ;;;;;;;;
REG_SAVESIZE equ 8
REG_EAX equ 0
REG_EBX equ 4
REG_ECX equ 8
REG_EDX equ 12
REG_ESP equ 16
REG_EBP equ 20
REG_ESI equ 24
REG_EDI equ 28
START_PROC equ 32
;;;;;end const ;;;;;
; esp + 4 old
; esp + 8 new
; c: SWITCH(old,new)
;
;;;;;;;;;;;;;;;;;;;
_SWITCH proc

mov save_eax,eax ;;save eax

mov eax,[esp+4] ;; mov address of old thread to eax
mov oldthread,eax ;; mov address of old thread to val oldthread
mov REG_EBX[eax],ebx
mov REG_ECX[eax],ecx
mov REG_EDX[eax],edx
mov ebx,[esp] ; ret address! ,save to bx
mov START_PROC[eax],ebx ;;[esp] contain ret address!,save it!
mov REG_ESP[eax],esp ;;
mov REG_EBP[eax],ebp
mov REG_ESI[eax],esi
mov REG_EDI[eax],edi
mov eax,save_eax ;; recover eax
mov [esp+4],eax ;; save eax

;;set reg
mov eax,[esp+8] ;; mov address of new thread to eax
mov newthread,eax ;; mov address of new thread to val new thread
mov ebx,REG_EBX[eax]
mov ecx,REG_ECX[eax]
mov edx,REG_EDX[eax]
mov esp,REG_ESP[eax]
mov ebp,REG_EBP[eax]
mov esi,REG_ESI[eax]
mov edi,REG_EDI[eax];;
mov save_eax,eax ;;save eax
mov eax,START_PROC[eax] ;return address
mov [esp],eax ;set return address
mov eax,save_eax ;;recover eax
mov eax,REG_EAX[eax]

ret
_SWITCH endp

end
fhb13 2006-04-05
  • 打赏
  • 举报
回复
你是不是用了宏汇编指令?
建议你用存汇编试试。
大熊猫侯佩 2006-04-05
  • 打赏
  • 举报
回复
masm 源代码贴出来。

21,497

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧