注册 登录
编程论坛 汇编论坛

基础问题,求助,请问''里面的是字符还是字符串?""呢?

onepc 发布于 2009-09-24 14:02, 744 次点击
直接在程序里定义的 'a'这样表示的是把a转成acssi码之后的数值吧?
'aaaa'这个是否也是?

请问:[第十章的查找全盘文件的例子]
.if    @stData.cFileName != '.'
                                 invoke    _findfile,addr @szFindFile
.endif
这里我要再加多一个[[[用逻辑与[]]] @stData.cFileName != '..'  这个怎么加?我加的都会出错。


之后我改成jz的
   invoke lstrcmp,@stData.cFileName,addr szd   ;这里是 db '.',0      
  mov @checkd,eax
 ;cmp @checkd,0
  jz @f
                          
    invoke lstrcmp,@stData.cFileName,add szdd ;db '..',0
  mov @checkdd,eax
  ;cmp @checkdd,0
   jz @f
会出错。编译过了。查找时会出错。不知
6 回复
#2
swp1601082009-09-24 14:09
只有字符能用=比较 字符串必须用函数来比较 不用cmp指令 .if支持 eax==ebx ebx!=eax  eax&&ebx 等运算符的
invoke lstrcmp,@stData.cFileName,addr szd   ;这里是 db '.',0
.if !eax
    ;这是字符串相等
.else
    ;这是字符串不相等
.emdif
#3
onepc2009-09-24 14:34
程序代码:
              invoke lstrcmp,@stData.cFileName,addr szd
                          mov @checkd,eax
                          invoke lstrcmp,@stData.cFileName,addr szdd
                          mov @checkdd,eax
                          .if @checkd && @checkdd
                              invoke    _findfile,addr @szFindFile
                          .endif   
这样是那里有问题呢。都是会内存不能为read


                            ; .if    @stData.cFileName != '.'  
                             ;    invoke    _findfile,addr @szFindFile
                           ; .endif
用这句是OK的可以查找的。

程序代码:

原分支是这样的。
 .if    @stData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY
                           
           .if    @stData.cFileName != '.'  
     invoke    _findfile,addr @szFindFile
       .endif
                      .else
                               invoke MessageBox,NULL,addr @szFindFile,CTXT("Find-File"),0
                     .endif
#4
zklhp2009-09-24 18:13
WIN32_FIND_DATA STRUCT
  dwFileAttributes      DWORD      ?
  ftCreationTime        FILETIME <>
  ftLastAccessTime      FILETIME <>
  ftLastWriteTime       FILETIME <>
  nFileSizeHigh         DWORD      ?
  nFileSizeLow          DWORD      ?
  dwReserved0           DWORD      ?
  dwReserved1           DWORD      ?
  cFileName             BYTE MAX_PATH dup(?)
  cAlternate            BYTE 14 dup(?)
WIN32_FIND_DATA ENDS
#5
zklhp2009-09-24 18:14
都是会内存不能为read

应该给地址~~

应该是指针的问题~~
#6
东海一鱼2009-09-24 20:11
lstrcmp(LPCSTR str1,LPCSTR str2)  参数是两个字符串指针变量,不是值变量

所以应该是
invoke lstrcmp,addr @stData.cFileName,addr szd
#7
onepc2009-09-25 07:56
谢谢二位。。我看提示时也是看到是lp开头的参数,感觉上没错我就以为是打上地址的了。
1