| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1905 人关注过本帖
标题:请问谁能帮我调试一下看看是哪里出问题了!
取消只看楼主 加入收藏
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
 问题点数:0 回复次数:4 
请问谁能帮我调试一下看看是哪里出问题了!
这道题的意思是从主函数传递过三个实参,根据BZ的值执行加密和解密,加密为原字符*2+3,最后调用一个窗口显示加密或解密后的字符串.在这也要感谢两位热心版主的解答...

整道题编完后没有结果,不知道哪里出问题了,编译的能通过,不过我不会调试...
主函数:
DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    mov        eax,uMsg
    .if eax==WM_INITDIALOG

    .elseif eax==WM_COMMAND
        mov  eax,wParam
        .if eax==1001
        mov  eax,wParam
        .if eax==1001
            mov bz,0   
            invoke string,addr s,addr s1,bz     ;函数调用
        .if eax==1002
            mov bz,1
            invoke string,addr s1,addr s2,bz    ;函数调用      
        .endif
        .endif
        .endif
    .elseif eax==WM_CLOSE
        invoke EndDialog,hWin,0
    .else
        mov        eax,FALSE
        ret
    .endif
    mov        eax,TRUE
    ret

DlgProc endp

子函数:
string proc str1:DWORD,str2:DWORD,bz1:DWORD
        cmp bz1,0
        je jiami
        jmp jiemi
  jiami:
        mov esi,offset s
        lea edi,str1    ;把s1的有效地址装入edi
        mov al,[esi] ;如果进行字节操作,注意用al
        cmp al,0
        je L1
        shl al,1
        add al,3
        mov [edi],al
        inc byte ptr [esi]
        inc byte ptr [edi]
        mov al,[esi] ;进行字操作的话就用ax,类推
        jmp jiami
        
  jiemi:
        lea esi,str1
        lea edi,str2    ;把s1的有效地址装入edi
        mov al,[esi] ;如果进行字节操作,注意用al
        sub al,3
        shr al,1
        mov [edi],al
        inc byte ptr [edi]
        inc byte ptr [esi]
        mov al,[esi]
        cmp al,0
        je L2
        jmp jiemi
     L1:
        mov [edi],al
        invoke MessageBox,0,addr str1,addr mtl,MB_OK
     L2:
        mov [edi],al
        invoke MessageBox,0,addr str2,addr mtl,MB_OK
string endp
搜索更多相关主题的帖子: 调试 
2008-11-19 18:20
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
得分:0 
恩,我改了一下,现在做得差不多了,编译的时候能正常通过,但是在最终显示的时候失败了,麻烦你帮我调试一下,看是哪里出问题了,谢谢!

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive


include windows.inc
include kernel32.inc
include user32.inc
include Comctl32.inc
include shell32.inc
includelib kernel32.lib
includelib user32.lib
includelib Comctl32.lib
includelib shell32.lib

DlgProc            PROTO    :HWND,:UINT,:WPARAM,:LPARAM

.const

IDD_DIALOG1            equ 101

;#########################################################################

.data?

hInstance            dd ?

;#########################################################################
.data
mt1    db    "加密字符串为:",0
mt2 db    "解密字符串为:",0
s DB "11",0
s1 db 20 dup(0)
s2 db 20 dup(0)
bz1 dd 1
bz0 dd 0
;#########################################################################


.code

start:

    invoke GetModuleHandle,NULL
    mov        hInstance,eax

    invoke InitCommonControls
    invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
    invoke ExitProcess,0
    
string proc str1:DWORD,str2:DWORD,bz:DWORD
        cmp bz,1     ;根据BZ的值执行加密或解密
        je ddd       ;如果BZ=1执行解密
        mov esi,str1    ;把str1的有效地址装esi
        mov edi,str2    ;把str2的有效地址装入edi
        mov al,[esi] ;如果进行字节操作,注意用al
  jiami:cmp al,0     ;检查字符串是否到执行完
        je L1
        shl al,1
        add al,3
        mov [edi],al
        inc byte ptr [esi]
        inc byte ptr [edi]
        mov al,[esi]
        jmp jiami
        
 
   ddd: mov esi,str2
        mov edi,str1   
        mov al,[esi]   
  jiemi:sub al,3
        shr al,1
        mov [edi],al
        inc byte ptr [edi]
        inc byte ptr [esi]
        mov al,[esi]
        cmp al,0
        je L2
        jmp jiemi
     L1:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt1,MB_OK
     L2:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt2,MB_OK
string endp
;########################################################################

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

    mov        eax,uMsg
    .if eax==WM_INITDIALOG
    
    .elseif eax==WM_COMMAND
        mov  eax,wParam
        .if eax==1001
        invoke string,addr s,addr s1,bz0     
        .endif
        .if eax==1002
            invoke string,addr s1,addr s2,bz1            
        .endif
    .elseif eax==WM_CLOSE
        invoke EndDialog,hWin,0
    .else
        mov        eax,FALSE
        ret
    .endif
    mov        eax,TRUE
    ret

DlgProc endp

end start
2008-11-20 11:26
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
得分:0 
请问
        jmp    @F
     L2:
        mov [edi],al
        invoke MessageBox,0,str2,addr mt2,MB_OK
       @@:   
这里头尾的@F和@@是什么意思?
还有你是用MASMplus编译器吗?我用radasm编译的时候还是没结果出来,不知道怎么回事,那个MASMplus的RC文件在哪有?我打开MASMplus新建的时候只有ASM这个文件.
2008-11-20 14:11
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
得分:0 
谢谢zklhp,ONEPROBLEM和你们都要疼我哦几位的回答,我现在才学汇编2个多星期而已,基础是很菜,而且只有一本国外的汇编教程,我会好好去学习的.

现在那道题不知道怎么回事,我用RADMSM编译后无论是点第一个窗口还是第二个窗口,都是提示
解密字符为:
但就是没结果,我那道缺少了个返回,但是无论编译你改后的那道还是我自己那道结果都是那样,都搞不懂是哪里出问题了.
2008-11-20 18:04
cnlkf
Rank: 1
等 级:新手上路
帖 子:32
专家分:0
注 册:2008-5-13
收藏
得分:0 
终于知道哪里出问题了,原来我设置了两个按钮的名称都是一样,一运行起来就直接解密了...郁闷...

谢谢大家的帮忙,这道题总算做出来了,还好学到了不少东西...再次感谢!
2008-11-21 09:48
快速回复:请问谁能帮我调试一下看看是哪里出问题了!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026945 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved