(32位汇编)帮看看哪错了!!改了我半天了

ifineedhelp 2007-04-20 11:51:20
control.asm
-------------------------------------------------------------------
.386
.model flat, stdcall
option casemap :none
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include gdi32.inc
includelib gdi32.lib
ICO_MAIN equ 1000H
DLG_MAIN equ 1005
IDC_Y equ 1001
IDC_X equ 1002
IDC_N equ 1003
IDC_TITLETEXT equ 1010
.data?
hInstance dd ?
lpChar db 512 dup(?)
Number dd ?
Text dd ?
@N dd ?
@N2 dd ?
lpOldProcEdit dd ?
lpOldProcEditI dd ?
hWinMain dd ?
.const
szText1 db 'and',0
szText2 db 'or',0
szText3 db 'xor',0
szAllowedChar db '0123456789ABCDEFabcdef',08h
szFmtHexToDec db '%u',0
.code
_ProcEdit proc uses ebx edi esi hWnd,uMsg,wParam,lParam
mov eax,uMsg
.if uMsg == WM_CHAR
mov eax,wParam
mov edi,offset szAllowedChar
mov ecx,sizeof szAllowedChar
repnz scasb
.if ZERO?
.if al > '9'
and al,not 20h
.endif
invoke CallWindowProc,lpOldProcEdit,\
hWnd,uMsg,eax,lParam
ret
.endif
.else
invoke CallWindowProc,lpOldProcEdit,\
hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_ProcEdit endp
_ProcEditI proc uses ebx edi esi hWnd,uMsg,wParam,lParam
mov eax,uMsg
.if uMsg == WM_CHAR
mov eax,wParam
mov edi,offset szAllowedChar
mov ecx,sizeof szAllowedChar
repnz scasb
.if ZERO?
.if al > '9'
and al,not 20h
.endif
invoke CallWindowProc,lpOldProcEditI,\
hWnd,uMsg,eax,lParam
ret
.endif
.else
invoke CallWindowProc,lpOldProcEditI,\
hWnd,uMsg,wParam,lParam
ret
.endif
xor eax,eax
ret
_ProcEditI endp
_DECTOHEC proc uses ebx edi esi
lea esi,lpChar
cld
xor eax,eax
mov ebx,16
.while TRUE
movzx ecx,byte ptr [esi]
inc esi
.break .if ! ecx
.if cl > '9'
sub cl,'A' - 0ah
.else
sub cl,'0'
.endif
mul ebx
add eax,ecx
.endw
ret
_DECTOHEC endp
_ProcDlgMain proc uses ebx edi esi hWnd,wMsg,wParam,lParam
local @szBuffer[128]:byte

mov eax,wMsg
.if eax == WM_CLOSE
invoke EndDialog,hWnd,NULL
.elseif eax == WM_INITDIALOG

invoke LoadIcon,hInstance,ICO_MAIN
invoke SendMessage,hWnd,WM_SETICON,ICON_BIG,eax
mov eax,hWnd
mov hWinMain,eax
invoke SendDlgItemMessage,hWnd,\
IDC_X,EM_LIMITTEXT,8,0
invoke SendDlgItemMessage,hWnd,\
IDC_Y,EM_LIMITTEXT,8,0
invoke SendDlgItemMessage,hWnd,\
IDC_N,EM_LIMITTEXT,10,0
invoke GetDlgItem,hWnd,IDC_X
invoke SetWindowLong,eax,GWL_WNDPROC,addr _ProcEdit
mov lpOldProcEdit,eax
invoke GetDlgItem,hWnd,IDC_Y
invoke SetWindowLong,eax,GWL_WNDPROC,addr _ProcEditI
mov lpOldProcEditI,eax

invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText1
invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText2
invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_ADDSTRING,0,addr szText3
invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_SETCURSEL,0,0

.elseif ax == IDOK
invoke GetDlgItemText,hWnd,IDC_X,addr lpChar,sizeof lpChar
invoke _DECTOHEC
mov edx,Text
invoke GetDlgItemText,hWnd,IDC_Y,addr lpChar,sizeof lpChar
invoke _DECTOHEC
mov ecx,Text
mov ebx,@N2
.if ebx == 0
.elseif ebx == 1
.else ebx == 2
.endif
invoke wsprintf,addr lpChar,addr szFmtHexToDec,@N
invoke SetDlgItemText,hWinMain,IDC_N,addr lpChar
.endif

.elseif ax == IDC_TITLETEXT
shr eax,16
.if ax == CBN_SELENDOK
invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_GETCURSEL,0,0
.if eax == 0
mov ebx,0
mov @N2,ebx
.elseif eax == 1
mov ebx,1
mov @N2,ebx
.else eax == 2
mov ebx,2
mov @N2,ebx
.endif
.endif
.else
mov eax,FALSE
ret
.endif
mov eax,TRUE
ret
_ProcDlgMain endp
start:
invoke GetModuleHandle,NULL
mov hInstance,eax
invoke DialogBoxParam,hInstance,DLG_MAIN,NULL,offset _ProcDlgMain,NULL
invoke ExitProcess,NULL
end start
------------------------------------------------------------------------
control.rc
--------------------------------------------------------------------------
#include <resource.h>
#define ICO_MAIN 0x1000
#define DLG_MAIN 1005
#define IDC_Y 1001
#define IDC_X 1002
#define IDC_N 1003
#define IDC_TITLETEXT 1010

ICO_MAIN ICON "Main.ico"
DLG_MAIN DIALOG 200, 200, 185, 140
STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
CAPTION "位计算器"
FONT 9, "宋体"
{
LTEXT "X", -1, 7, 9, 15, 8
EDITTEXT IDC_Y, 27, 7, 94, 12
LTEXT "Y", -1, 7, 26, 15, 8
EDITTEXT IDC_X, 27, 24, 94, 12
LTEXT "=", -1, 7, 43, 15, 8
EDITTEXT IDC_N,27, 55, 94, 12,ES_NUMBER
COMBOBOX IDC_TITLETEXT, 27, 70, 40, 70, CBS_DROPDOWNLIST | WS_TABSTOP
DEFPUSHBUTTON "开始计算(&C)", IDOK, 60, 90, 50, 14
PUSHBUTTON "退出(&X)", IDCANCEL, 120, 110, 50, 14
}
------------------------------------------------------------------------
makefile
------------------------------------------------------------------------
NAME = Control
OBJS = $(NAME).obj
RES = $(NAME).res

LINK_FLAG = /subsystem:windows
ML_FLAG = /c /coff

$(NAME).exe: $(OBJS) $(RES)
Link $(LINK_FLAG) $(OBJS) $(RES)

.asm.obj:
ml $(ML_FLAG) $<
.rc.res:
rc $<

clean:
del *.obj
del *.res
改了一天了都不知道哪错了
各位前辈帮帮忙
小弟感激不尽!!
...全文
285 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ifineedhelp 2007-04-20
  • 打赏
  • 举报
回复
错误信息:control.asm<174>:error A2008:syntax error:ebx
control.asm<182>:fatal error a1001:diretive must be in control block
大熊猫侯佩 2007-04-20
  • 打赏
  • 举报
回复
//所以这个 .elseif 就突兀了

^0^
ifineedhelp 2007-04-20
  • 打赏
  • 举报
回复
谢谢各位帮我解答谢谢!!!
zara 2007-04-20
  • 打赏
  • 举报
回复
...
mov ebx,@N2
.if ebx == 0
.elseif ebx == 1
.else ebx == 2 ;* 这里应是 .elseif 吧?
.endif
invoke wsprintf,addr lpChar,addr szFmtHexToDec,@N
invoke SetDlgItemText,hWinMain,IDC_N,addr lpChar
.endif

.elseif ax == IDC_TITLETEXT ;* 这里, 前面的 .endif 已经关闭了所有的 .if 了
;* 所以这个 .elseif 就突兀了. 这里前前后后的处理逻辑上很乱, 要整理清楚了
shr eax,16
.if ax == CBN_SELENDOK
invoke SendDlgItemMessage,hWnd,IDC_TITLETEXT,CB_GETCURSEL,0,0
.if eax == 0
mov ebx,0
mov @N2,ebx
.else ifeax == 1
mov ebx,1
mov @N2,ebx
.else eax == 2 ;* 这里应该是 .elseif 吧?
...
大熊猫侯佩 2007-04-20
  • 打赏
  • 举报
回复
show us error line code!
ifineedhelp 2007-04-20
  • 打赏
  • 举报
回复
control.asm<174>:error A2008:syntax error:ebx
--------------------------------------------------
本来我想改改用其他的寄存器的话会不会出现这条错误信息
可惜还是错了
都不知道是怎么回事
郁闷
xuelong_zl 2007-04-20
  • 打赏
  • 举报
回复
楼主,你写的行号,我们怎么知道哪是174和 182呀,你把这两行标注一下吧。

风格很像是看罗云彬的书呀,有机会了解一下radasm,winasm这些IDE开发时会更方便呀


再者源码中这部分是啥意思??你想做什么呀??
.if ebx == 0
.elseif ebx == 1
.else ebx == 2
.endif
内容概要:本文研究了基于麻雀优化算法(SSA)优化CNN-BiLSTM-Attention混合模型的风电功率预测方法,采用多变量输入实现单步预测。通过SSA算法对模型的关键超参数进行智能寻优,有效提升了预测的精度与鲁棒性。该混合模型充分融合了卷积神经网络(CNN)的局部特征提取能力、双向长短期记忆网络(BiLSTM)对时序数据前后依赖关系的建模优势,以及注意力(Attention)机制对关键时间步特征的自适应加权聚焦能力,能够深入挖掘风电数据中复杂的非线性动态特性与时序关联模式。研究在Matlab平台上完成了完整的代码实现,并通过严谨的实验验证了所提方法在风电功率预测任务中相较于传统模型的优越性能。; 适合人群:具备一定机器学习与深度学习理论基础,熟悉Matlab编程环境,从事新能源发电预测、电力系统调度、智能优化算法应用或相关领域研究的科研人员、工程技术人员及高年级研究生。; 使用场景及目标:①应用于风电场实际运行中的短期功率单步预测,为电网调度决策提供高精度数据支持,提升新能源消纳能力和系统运行稳定性;②为深度学习模型的超参数优化提供一种高效的智能算法应用范例;③作为融合多种先进神经网络结构与元启发式优化算法的综合性研究案例,服务于学术科研复现、技术创新与教学实践。; 阅读建议:建议读者结合提供的Matlab代码,深入理解从数据预处理、模型构建、SSA优化流程到结果分析的完整技术链条,重点关注多变量特征选择、网络结构设计细节及注意力机制的实现原理,并可通过替换数据集或调整模型组件来进一步拓展研究深度与应用广度。

21,500

社区成员

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

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