我要写一个抄表机的程序,其中要用到PASCAL语言的HT扩展函数库,其中有不少汇编代码
其中有一段是这样的
function CharStr(c: char; n: integer): string; assembler;
asm
les di, @result //这行出错 提示:Operand size mismatch
mov ax, n //这行出错 提示:Operand size mismatch
call AdjustLen
cld
stosb
mov cl, al
xor ch, ch
mov al, c
rep stosb
end;可是在编译时候老是出错,是不是我需要在程序开始USES什么文件的。
请大家帮忙看看,谢谢
其中有一段是这样的
function CharStr(c: char; n: integer): string; assembler;
asm
les di, @result //这行出错 提示:Operand size mismatch
mov ax, n //这行出错 提示:Operand size mismatch
call AdjustLen
cld
stosb
mov cl, al
xor ch, ch
mov al, c
rep stosb
end;可是在编译时候老是出错,是不是我需要在程序开始USES什么文件的。
请大家帮忙看看,谢谢
解决方案 »
- cnpack 安装到delphi7时不成功,寻求帮助
- 请问这种情况下不Free TStrings,会不会造成内存占用?
- 如何判断EDIT中的值只能是数值和字母????
- 求助高手用delphi6实现点对点文件传输
- 请问视频和音频传输的原理需要看哪些书籍?
- 利用DLL封装重用窗体的问题——————在线等待!!!!
- Delphi6.0使用什么做报表打印比较好?
- 一个奇怪的问题,大家看看。
- 数据保存时违反约束规定(比如关键字为空,关键字不唯一,类型错误……),如何获得错误信息和进行控制
- Win7 64位下Delphi7 TPageControl无法自绘,求解决
- 如何加密文档
- FTP自動上傳,為什麼一段時間後就聯接失敗,提示"software caused connection abort"?
这行应该就是寄存器的问题,用EAX就可以。
EDI也是32Bit!没E的都是16Bit,E的是32http://lysoft.7u7.net
les di, @result //这行出错 提示:Operand size mismatch
mov ax, n //这行出错 提示:Operand size mismatch
---------------------------------------------------------------
改为
asm
push
les Edi, @result //这行出错 提示:Operand size mismatch
mov Eax, n //这行出错 提示:Operand size mismatch
...
pop edi
试试吧
asm
push //这行出错 提示Invalid combination of opcode and operands
les edi, @result //这行出错 提示Invalid combination of opcode and operands
mov eax, n
call AdjustLen
cld
stosb
mov cl, al
xor ch, ch
mov al, c
rep stosb
pop edi
end;
不管你用什么寄存器,用之前要PUSH他们,用之后也要POP他们。但不管你不不用EBX寄存器,都要PUSH EBX,汇编程序结束前也要POP EBX。这是一定的
>>不管你用什么寄存器,用之前要PUSH他们,用之后也要POP他们。
>>但不管你不不用EBX寄存器,都要PUSH EBX,汇编程序结束前也要POP EBX。这是一定的先别这么激动骂人家笨蛋啥,似懂非懂误导别人会害死人的,以前教我们的那个汇编老师就这样,晕死~~~乱用PUSH/POP是会严重降低程序性能的
push edi //sorry 少了edi
les edi, @result
mov eax, n
call AdjustLen
cld
stosb
mov cl, al
xor ch, ch
mov al, c
rep stosb
pop edi
end;