| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
免费IT实战开发视频教程合集分享千里之行 始于足下
共有 506 人关注过本帖
标题:刚开始学习汇编,有问题。代码我贴出来,还请大家解答,谢谢!
只看楼主 加入收藏
本帖由 静夜思 于 2018-10-17 01:53 移动
WilliamLin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-10-17
结帖率:0
  已结贴   问题点数:20  回复次数:7   
刚开始学习汇编,有问题。代码我贴出来,还请大家解答,谢谢!
以下是我改动后的代码,编译方面已经没有错误了。但是执行程序的时候,按道理说我输入“ZHANGSAN”后应该要出现"PLEASE INPUT THE PASSWORD:",可是它怎么一直出现"PLEASE INPUT THE BOSS NAME:",这个应该是名字不符时才应该出现的。请问这个问题怎么解决,我想可能是定义字符串变量时可能不对,但是我改来改去还是不知道问题在哪,求赐教。代码附在文字下方。

.386
.model flat,stdcall

; ExitProcess 在 kernel32.lib中实现,原型定义如下
ExitProcess PROTO STDCALL : DWORD
includelib  kernel32.lib

; printf 在 msvcrt.lib中实现,原型定义如下
includelib      msvcrt.lib
printf          PROTO C : ptr sbyte, : VARARG
scanf_s         PROTO C : ptr sbyte, : VARARG

.DATA
STRING DB "%s",0
BUF DB "%d",0
BNAME DB 'ZHANGSAN',0   ; 老板姓名
BPASS DB 'test',0     ; 密码
N EQU 30
GA1 DB 'PEN',4 DUP(0)   ; 商品名称
    DW    35, 56, 70, 25, ? ;进货价 销售价 进货总数 已售数量 利润率未计算
GA2    DB 'PENCIL',7 DUP(0); 商品名称
    DW    2, 3, 80, 40, ? ; 进货价 销售价 进货总数 已售数量 利润率未计算
GA3    DB 'BOOK',5 DUP(0)  ; 商品名称
    DW    12, 30, 25, 5, ?  ; 进货价 销售价 进货总数 已售数量 利润率未计算
GA4    DB 'RULER',6 DUP(0) ; 商品名称
    DW    4, 7, 75, 30, ? ; 进货价 销售价 进货总数 已售数量 利润率未计算
KEY DB 0 ;判断是否为老板的标志位
input_name DB 10 DUP(0),0
input_password DB "%s",0
input_goodsname DB "%s",0
NAMEINPUT DB "PLEASE INPUT THE BOSS NAME:",0
PASSWORDINPUT DB "PLEASE INPUT THE PASSWORD:",0
FAIL DB "LOGIN FAILED!TRY AGAIN!",0
SUCCESS DB "LOGIN SUCCESSFULLY!",0
GOODSINPUT DB "PLEASE INPUT THE GOOD'S NAME:",0
NOTFOUND DB "CANNOT FIND THE GOOD!TRY AGAIN!",0
GOODSNAME DB "THE NAME OF THE GOOD IS:",0  ;商品名
GOODSCOST DB "THE COST OF THE GOOD IS:",0 ;成本价
GOODSSALE DB "THE SALE OF THE GOOD IS:",0  ;销售价
GOODSALLNUMBER DB "THE ALL NUMBER OF THE GOOD IS:",0  ;进货总数
GOODSSOLDNUMBER DB "THE SOLD NUMBER OF THE GOOD IS:",0  ;已售数量
GOODSPROFITRATE DB "THE PROFIT RATE OF THE GOOD IS:",0  ;利润率

.STACK 200

.CODE

START:
LOGIN_INPUTNAME:
        MOV KEY,0;登录是否成功标志
        invoke printf, offset STRING, addr NAMEINPUT ;输入老板名字
        invoke scanf_s, offset STRING, offset input_name
        LEA EBX,input_name
        CMP DWORD PTR[EBX],0DH
        JE  CUSTOMER_SEARCH_GOODS;用户输入回车跳过管理员权限获取,成为普通用户
        CMP DWORD PTR[EBX],71H;输入quit退出程序,直接结束
        JE  EXIT
        MOV EDI,OFFSET input_name ; 取输入名字字符串首地址
        MOV ESI,OFFSET BNAME; 取用户名首地址
        MOV ECX,0   ;         完成
COMPARE_NAME:  ; 循环比较名字字符
        CMP ECX, 10; 执行10次
        JE  LOGIN_INPUTPASSWORD; 10次都相同则成立,跳到验证密码
        MOV EAX, DWORD PTR[EDI]
        MOV EDX, DWORD PTR[ESI]
        ADD EDI, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP EAX,EDX           ; 比较字节
        JE  COMPARE_NAME; 字节相同循环进行
        JNE LOGIN_INPUTNAME; 字节出现不相同,跳到登录页面
LOGIN_INPUTPASSWORD:  ; 验证密码
        invoke printf, offset STRING, addr PASSWORDINPUT; 显示输入密码
        invoke scanf_s, offset STRING, offset input_password
        ADD EDI,10
        MOV EDI,OFFSET input_password; 取输入密码字符串首地址
        ADD ESI,10
        MOV ESI,OFFSET BPASS; 取密码首地址
        ADD ECX,10
        MOV ECX, 0
COMPARE_PASSWORD:  ; 循环比较密码字符
        CMP ECX, 6; 执行6次
        JE  LOGIN_SUCCESSFULLY; 6次都相同则成立,跳到登陆成功
        MOV AL, BYTE PTR[EDI+10]
        MOV BL, BYTE PTR[ESI+10]; 比较字节
        ADD EDI,1
        ADD ESI,1
        ADD ECX,1
        CMP BL,AL
        JE  COMPARE_PASSWORD; 字节相同循环进行
        JNE LOGIN_FAILURE; 字节出现不相同,跳到登录失败
LOGIN_SUCCESSFULLY:  ;登录成功
        MOV KEY,1;登录状态为1成功获取权限显示全部信息
        invoke printf, offset STRING, addr SUCCESS; 显示登录成功
        JMP BOSS_SEARCH_GOODS
LOGIN_FAILURE:    ;登陆失败
        invoke printf, offset STRING, addr FAIL; 显登陆失败弹出信息
        JMP LOGIN_INPUTNAME

BOSS_SEARCH_GOODS:     ;老板查询商品
        MOV EDI,0
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        MOV ESI,OFFSET GA1
        invoke printf, offset STRING, addr GOODSNAME
        invoke printf, offset STRING, addr DWORD PTR[ESI]
        ADD ESI,10
        MOV EBX,ESI ;GA1 成本价
        invoke printf, offset STRING, addr GOODSCOST
        invoke printf, offset BUF, addr DWORD PTR[EBX]
        ADD ESI,2
        MOV EAX,ESI ;GA1 销售价
        invoke printf, offset STRING, addr GOODSSALE
        invoke printf, offset BUF, addr DWORD PTR[EAX]
        ADD ESI,2
        MOV EDI,ESI ;GA1 进货数量
        invoke printf, offset STRING, addr GOODSALLNUMBER
        invoke printf, offset BUF, addr DWORD PTR[EDI]
        ADD ESI,2
        MOV ECX,ESI ;GA1 已售数量
        invoke printf, offset STRING, addr GOODSSOLDNUMBER
        invoke printf, offset BUF,addr DWORD PTR[ECX]
        IMUL EAX,ECX ;销售价乘以已售数量
        IMUL EBX,EDI ;成本价乘以进货数量
        SUB EAX,EBX  ;销售总额减去成本总价
        IMUL EAX,100 ;乘以100
        IDIV EBX
        invoke printf, offset STRING, addr GOODSPROFITRATE
        invoke printf, offset BUF, addr DWORD PTR[EAX]

CUSTOMER_SEARCH_GOODS: ;顾客查询商品
        MOV EDI,0
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        invoke printf, offset STRING, addr GOODSINPUT
        invoke scanf_s, offset STRING, offset input_goodsname
        LEA EBX,input_goodsname
        CMP BYTE PTR[EBX], 'q';输入quit退出程序,直接结束
        JE  EXIT
        MOV ESI,OFFSET GA1; 取商品名字首地址
        JMP COMPARE_GOODSNAME_GA1
        
COMPARE_GOODSNAME_GA1:    ;确定是否符合商品1名称   
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA1  ; 字节相同循环进行
        JNE COMPARE_GOODSNAME_GA2

COMPARE_GOODSNAME_GA2:    ;确定是否符合商品1名称
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA2  ; 字节相同循环进行
        JNE COMPARE_GOODSNAME_GA3

COMPARE_GOODSNAME_GA3:    ;确定是否符合商品1名称
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA3  ; 字节相同循环进行
        JNE COMPARE_GOODSNAME_GA4

COMPARE_GOODSNAME_GA4:    ;确定是否符合商品1名称
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA4  ; 字节相同循环进行
        JNE NOT_FOUND

NOT_FOUND:
        invoke printf, offset STRING, addr NOTFOUND; 显登陆失败弹出信息
        JMP CUSTOMER_SEARCH_GOODS


SALEINFORMATION:
        MOV EDX,DWORD PTR[ESI+2]
        invoke printf, offset STRING, addr GOODSNAME
        invoke printf, offset STRING, addr input_goodsname
        invoke printf, offset STRING, addr GOODSSALE   ;销售价的printf
        invoke printf, offset BUF, addr DWORD PTR[EDX]  ;....
EXIT:
       MOV AH,4CH
       INT 21H


END START




——————————————————————————————————————分界线————————————————————————————————————————————————



.386
.model flat,stdcall

; ExitProcess 在 kernel32.lib中实现,原型定义如下
ExitProcess PROTO STDCALL : DWORD
includelib  kernel32.lib

; printf 在 msvcrt.lib中实现,原型定义如下
includelib      msvcrt.lib
printf          PROTO C : ptr sbyte, : VARARG
scanf_s         PROTO C : ptr sbyte, : VARARG

.DATA
STRING DB "%s",0ah,0dh,0
BUF DB "%d",0
BNAME DB 'ZhangSan',0   ; 老板姓名
BPASS DB 'test',0,0     ; 密码
N EQU 30
GA1 DB 'PEN',4 DUP(0)   ; 商品名称
    DW    35, 56, 70, 25, ? ;进货价 销售价 进货总数 已售数量 利润率未计算
GA2    DB 'PENCIL',7 DUP(0); 商品名称
    DW    2, 3, 80, 40, ? ; 进货价 销售价 进货总数 已售数量 利润率未计算
GA3    DB 'BOOK',5 DUP(0)  ; 商品名称
    DW    12, 30, 25, 5, ?  ; 进货价 销售价 进货总数 已售数量 利润率未计算
GA4    DB 'RULER',6 DUP(0) ; 商品名称
    DW    4, 7, 75, 30, ? ; 进货价 销售价 进货总数 已售数量 利润率未计算
KEY DB 0 ;判断是否为老板的标志位
input_name DB "%s",0
input_password DB "%s",0
input_goodsname DB "%s",0
NAMEINPUT DB "PLEASE INPUT THE BOSS NAME :\n"
PASSWORDINPUT DB "PLEASE INPUT THE PASSWORD : \n"
FAIL DB "LOGIN FAILED!TRY AGAIN!\n"
SUCCESS DB "LOGIN SUCCESSFULLY!\n"
GOODSINPUT DB "PLEASE INPUT THE GOOD'S NAME :\n"
NOTFOUND DB "CANNOT FIND THE GOOD!TRY AGAIN!\n"
GOODSNAME DB "THE NAME OF THE GOOD IS:\n"  ;商品名
GOODSCOST DB "THE COST OF THE GOOD IS:\n"  ;成本价
GOODSSALE DB "THE SALE OF THE GOOD IS:\n"  ;销售价
GOODSALLNUMBER DB "THE ALL NUMBER OF THE GOOD IS:\n"  ;进货总数
GOODSSOLDNUMBER DB "THE SOLD NUMBER OF THE GOOD IS:\n"  ;已售数量
GOODSPROFITRATE DB "THE PROFIT RATE OF THE GOOD IS:\n"  ;利润率

.STACK 200

.CODE

START:
LOGIN_INPUTNAME:
        MOV KEY,0;登录是否成功标志
        invoke printf, offset STRING, addr NAMEINPUT ;输入老板名字
        invoke scanf_s, offset STRING, offset input_name
        LEA EBX,input_name
        CMP BYTE PTR[EBX],0DH
        JE  CUSTOMER_SEARCH_GOODS;用户输入回车跳过管理员权限获取,成为普通用户
        CMP BYTE PTR[EBX], 'q';输入quit退出程序,直接结束
        JE  EXIT
        MOV EDI,OFFSET input_name ; 取输入名字字符串首地址
        MOV ESI,OFFSET BNAME; 取用户名首地址
        MOV ECX,0   ;         完成
COMPARE_NAME:  ; 循环比较名字字符
        CMP ECX, 10; 执行10次
        JE  LOGIN_INPUTPASSWORD; 10次都相同则成立,跳到验证密码
        MOV AL, BYTE PTR[EDI]
        MOV BL, BYTE PTR[ESI]
        ADD EDI, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_NAME; 字节相同循环进行
        JNE LOGIN_INPUTNAME; 字节出现不相同,跳到登录页面
LOGIN_INPUTPASSWORD:  ; 验证密码
        invoke printf, offset STRING, addr PASSWORDINPUT; 显示输入密码
        invoke scanf_s, offset STRING, offset input_password
        MOV EDI+10,OFFSET input_password; 取输入密码字符串首地址
        MOV ESI+10,OFFSET BPASS; 取密码首地址
        MOV ECX+10, 0
COMPARE_PASSWORD:  ; 循环比较密码字符
        CMP ECX+10, 6; 执行6次
        JE  LOGIN_SUCCESSFULLY; 6次都相同则成立,跳到登陆成功
        MOV AL, BYTE PTR[EDI+10]
        MOV BL, BYTE PTR[ESI+10]; 比较字节
        ADD EDI+10,1
        ADD ESI+10,1
        ADD ECX+10,1
        CMP BL,AL
        JE  COMPARE_PASSWORD; 字节相同循环进行
        JNE LOGIN_FAILURE; 字节出现不相同,跳到登录失败
LOGIN_SUCCESSFULLY:  ;登录成功
        MOV KEY,1;登录状态为1成功获取权限显示全部信息
        invoke printf, offset STRING, addr SUCCESS; 显示登录成功
        JMP BOSS_SEARCH_GOODS
LOGIN_FAILURE:    ;登陆失败
        invoke printf, offset STRING, addr FAIL; 显登陆失败弹出信息
        JMP LOGIN_INPUTNAME

BOSS_SEARCH_GOODS:     ;老板查询商品
        MOV EDI,0
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        MOV ESI,OFFSET GA1
        invoke printf, offset STRING, addr GOODSNAME
        invoke printf, offset STRING, addr DWORD PTR[ESI]
        MOV EBX,ESI+10 ;GA1 成本价
        invoke printf, offset STRING, addr GOODSCOST
        invoke printf, offset BUF, addr DWORD PTR[EBX]
        MOV EAX,ESI+12 ;GA1 销售价
        invoke printf, offset STRING, addr GOODSSALE
        invoke printf, offset BUF, addr DWORD PTR[EAX]
        MOV EDI,ESI+14 ;GA1 进货数量
        invoke printf, offset STRING, addr GOODSALLNUMBER
        invoke printf, offset BUF, addr DWORD PTR[EDI]
        MOV ECX,ESI+16 ;GA1 已售数量
        invoke printf, offset STRING, addr GOODSSOLDNUMBER
        invoke printf, offset BUF,addr DWORD PTR[ECX]
        IMUL EAX,ECX ;销售价乘以已售数量
        IMUL EBX,EDI ;成本价乘以进货数量
        SUB EAX,EBX  ;销售总额减去成本总价
        IMUL EAX,100 ;乘以100
        IDIV EBX
        invoke printf, offset STRING, addr GOODSPROFITRATE
        invoke printf, offset BUF, addr DWORD PTR[EAX]

CUSTOMER_SEARCH_GOODS: ;顾客查询商品
        MOV EDI,0
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        invoke printf, offset STRING, addr GOODSINPUT
        invoke scanf_s, offset STRING, offset input_goodsname
        LEA EBX,input_goodsname
        CMP BYTE PTR[EBX], 'q';输入quit退出程序,直接结束
        JE  EXIT
        MOV ESI,OFFSET GA1; 取商品名字首地址
        JMP COMPARE_GOODSNAME_GA1
        
COMPARE_GOODSNAME_GA1:    ;确定是否符合商品1名称   
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA1  ; 字节相同循环进行
        JNE COMPARE_GOODSNAME_GA2

COMPARE_GOODSNAME_GA2:    ;确定是否符合商品1名称
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA2  ; 字节相同循环进行
        JNE COMPARE_GOODSNAME_GA3

COMPARE_GOODSNAME_GA3:    ;确定是否符合商品1名称
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA3  ; 字节相同循环进行
        JNE COMPARE_GOODSNAME_GA4

COMPARE_GOODSNAME_GA4:    ;确定是否符合商品1名称
        MOV EBX,0
        MOV ESI,0
        MOV ECX,0
        CMP ECX, 10; 执行10次
        JE  SALEINFORMATION; 10次都相同则成立,跳到SALEINFORMATION
        MOV AL, BYTE PTR[EBX]
        MOV BL, BYTE PTR[ESI]
        ADD EBX, 1
        ADD ESI, 1
        ADD ECX, 1
        CMP BL,AL           ; 比较字节
        JE  COMPARE_GOODSNAME_GA4  ; 字节相同循环进行
        JNE NOT_FOUND

NOT_FOUND:
        invoke printf, offset STRING, addr NOTFOUND; 显登陆失败弹出信息
        JMP CUSTOMER_SEARCH_GOODS


SALEINFORMATION:
        MOV EDX,WORD PTR[ESI+2]
        invoke printf, offset STRING, addr GOODSNAME
        invoke printf, offset STRING, addr input_goodsname
        invoke printf, offset STRING, addr GOODSSALE   ;销售价的printf
        invoke printf, offset BUF, addr DWORD PTR[EDX]  ;....
EXIT:
       MOV AH,4CH
       INT 21H

CODE ENDS
END START

两个错误为:
error MSB3721: 命令“ml.exe /c /nologo /Zi /Fo"Debug\text_1.obj" /W3 /errorReport:prompt  /Tatext_1.asm”已退出,返回代码为 1。
error A1010: unmatched block nesting : CODES


[此贴子已经被作者于2018-10-17 17:08编辑过]

2018-10-17 01:51
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:204
专家分:1362
注 册:2016-5-15
  得分:20 
先删除 CODE ENDS 一句.

以下一堆指令都有语法错误,基本上不可以这样写.


        MOV EDI+10,OFFSET input_password; 取输入密码字符串首地址
        MOV ESI+10,OFFSET BPASS; 取密码首地址
        MOV ECX+10, 0

        CMP ECX+10, 6; 执行6次

        ADD EDI+10,1
        ADD ESI+10,1
        ADD ECX+10,1

        MOV EBX,ESI+10 ;GA1 成本价

        MOV EAX,ESI+12 ;GA1 销售价

        MOV EDI,ESI+14 ;GA1 进货数量

        MOV ECX,ESI+16 ;GA1 已售数量

        MOV EDX,WORD PTR[ESI+2]
2018-10-17 06:46
WilliamLin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-10-17
  得分:0 
回复 2楼 Valenciax
寄存器加上立即数不能作为目的操作数吗,还是寄存器加上立即数本身就是错误的?去掉了CODE ENDS会出现更多报错。
——————————
突然意识到是要用变址寻址,谢谢啦我回去试试看。
——————————
变址可能也不对,用ADD指令?

[此贴子已经被作者于2018-10-17 11:05编辑过]

2018-10-17 08:55
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:204
专家分:1362
注 册:2016-5-15
  得分:0 
回复 3楼 WilliamLin
不须要code ends 结束句,这是最严重的错误.
未更正这个,编译懒得理会其他问题.
删除后,编译才会去检视其他错误.


[定址法]有一定规定,不外几种,2楼指出的代码都不符规矩.
2018-10-17 10:29
WilliamLin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-10-17
  得分:0 
回复 4楼 Valenciax
首先感谢你,我已经按你的说法改过了,编译没有问题了,可是执行还是有问题,能否再看看?求赐教。
2018-10-17 17:10
Valenciax
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:10
帖 子:204
专家分:1362
注 册:2016-5-15
  得分:0 
回复 5楼 WilliamLin
代码能通过编译?
起码这些写法在我的masm6.x是不容许的

MOV EDI+10,OFFSET input_password
应该写成
MOV word ptr [EDI+10],OFFSET input_password
dos下的程式,地址不会用到32bit,所以用word


ADD EDI+10,1
应该写成
ADD byte ptr [EDI+10],1 或
ADD word ptr [EDI+10],1 或
ADD dword ptr [EDI+10],1 或
以上的指令,其实更好的写法是
inc byte ptr [EDI+10]
..
..


MOV EBX,ESI+10
应该写成
MOV EBX,[ESI+10]

等等.....

至于执行是否成功,那是另外的问题.
2018-10-17 18:27
WilliamLin
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2018-10-17
  得分:0 
回复 6楼 Valenciax


[此贴子已经被作者于2018-10-17 19:34编辑过]

2018-10-17 19:10
blackcd
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-5-19
  得分:0 
是不是你判断了10次字符的问题,应该看看字符是不是0字符,然后再判断
5 天前 20:43







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

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