社区
汇编语言
帖子详情
如何禁止masm优化?
TaiJi1985
2006-04-05 11:04:56
我将一个vc程序和一个masm编写的汇编程序 连接后,用vc跟踪反汇编代码。
发现用masm32编译的汇编代码被弄得乱七八糟了。masm是不是默认优化代码啊?
如何关闭优化呢?
谢谢!
...全文
216
4
打赏
收藏
如何禁止masm优化?
我将一个vc程序和一个masm编写的汇编程序 连接后,用vc跟踪反汇编代码。 发现用masm32编译的汇编代码被弄得乱七八糟了。masm是不是默认优化代码啊? 如何关闭优化呢? 谢谢!
复制链接
扫一扫
分享
转发到动态
举报
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 源代码贴出来。
汇编软件
masm
611
汇编软件
masm
611汇编软件
masm
611汇编软件
masm
611
masm
615和
masm
5
汇编指令学习的时候,编译使用,
masm
615和
masm
5两个版本
masm
6.11与
masm
6.15安装包
这里面是
masm
6.11和
masm
6.15的安装包,本人亲自实践过。之所以放在一起,是因为有时候存在版本不兼容的问题,所以当你用其中一个不行时,可换成另外一个试试。
masm
masm
6.15 64位
masm
masm
6.15 64位
MASM
50.
MASM
51.
MASM
60.
MASM
611.
MASM
611FULL.
MASM
614.
MASM
615工具
MASM
50.
MASM
51.
MASM
60.
MASM
611.
MASM
611FULL.
MASM
614.
MASM
615工具
汇编语言
21,497
社区成员
41,616
社区内容
发帖
与我相关
我的任务
汇编语言
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
复制链接
扫一扫
分享
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章