能力值:
(RANK:410 )
|
-
-
2 楼
; 大概修改了一下。
LineInput proc _Bf,_Sr:byte,Pa;从内存中Pa开始位置读入一行字符串,返回字符串结束位置 ; 看你下面的操作,这一句的_Sr变量也有问题,这个变量应该是一个Buffer指针才对吧。所以应该改成下面那样。
LineInput proc _Bf,_OutStrBuff,Pa
local IsExit;退出标志
local Num;计数器
mov Num,0;计数器初始化
push esi ; 你的代码改变了esi寄存器,一般函数规则是除了eax/edx/ecx之外其它寄存器在函数返回时必须恢复原始值。所以这里添加一句push esi的语句
; lea esi,_Bf;移至开始位置 ; 这一句有问题,改成下面那句
mov esi,_Bf
add esi,Pa
.while TRUE;进入循环
add esi,Num
cmp BYTE ptr [esi],10;比较该字符是否等于10(换行键)
je labelExit;如果为换行键,跳转
cmp BYTE ptr [esi],13;比较该字符是否等于13(回车键)
jne labelPro;不等于回车键,跳转
mov IsExit,TRUE;退出标志为真
cmp BYTE ptr [esi],0;是否为0(结束符)
je Exit;如果为结束符则退出循环
inc Num;位置后移一位
.continue;跳至循环开始位置
Exit:
.break;退出循环
labelPro:
; lea ax,_Sr ; 根据上面的定义,这一句改成下面那样。
mov eax,_OutStrBuff
mov BYTE ptr [ax+Num],BYTE ptr [esi];将该字符加入字符串 ; 将这一句改成下面几句
mov edx,Num
mov cl,byte ptr [esi]
mov byte ptr [eax+edx],cl
inc Num;计数器加1********************这句出错
.continue;跳至循环开始位置
labelExit:
inc Num;位置后移一位
.break .if IsExit;如果退出标志为真且该字符等于10则退出
.endw;
mov eax,esi;将位置返回
pop esi ; 恢复esi的值
LineInput endp
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
晕..刚在AOGO网站上看过...
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
感谢小虾版主的无私教诲,成功了
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
同感谢小虾版主的详细指点.
|
|
|