能力值:
( LV3,RANK:20 )
|
-
-
2 楼
LEA SI,[hex+cx+1]
DEBUG反汇编:
LEA DI,[BX+SI+0001]
楼主这是看花眼了吧?连寄存器都改了?
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
[QUOTE=邋遢鬼;1179876]LEA SI,[hex+cx+1]
DEBUG反汇编:
LEA DI,[BX+SI+0001]
楼主这是看花眼了吧?连寄存器都改了?[/QUOTE]
没有的,,我截个图你看就知道了
作为附件上传
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
你把源代码发下呀。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
发了,,在上面那个打包文件里
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
好的,晚点回去了才能看,郁闷。
|
能力值:
( LV13,RANK:400 )
|
-
-
7 楼
从你的二进制代码来说,如果信不过DEBUG的反汇编,我们就动手去查intel的OPCODE对照表,
你的那条指令的二进制内容是十六进制形式 : 8DB80100
二进制形式是:
|10001101 | 10 | 111 | 000 | 00000001 00000000|
| OpCode | mod | r16 |R/M| disp16 | 经过查表得出 这条指令应该是 LEA DI, [SI+BX]+1
问题应该是出在你的代码中,原操作数的寻址方式没有写,因为相对寻址只能使用BX,BP,SI,DI
mov bx, offset hex
mov si, cx
lea si, [BX][SI]+1
try it..
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
楼上说的对,间接寻址不能使用ax,cx和dx这3个寄存器,楼主的寄存器没有用对。只要打开debug,输入LEA汇编指令一试就全明白了。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
嗯,问题已解决,灰常感谢tishion!感谢楼上的几位兄弟!学习了,再次感谢!
看来还需要再看看寻址方式,基本功不扎实,汗!
|
|
|