首页
社区
课程
招聘
汇编指令LEA的一个小问题
发表于: 2013-5-22 15:45 5097

汇编指令LEA的一个小问题

2013-5-22 15:45
5097
如题:我遍历字符串,使用LEA指令把首地址装入SI,但是在DEBUG中反汇编得来的指令完全变样了呢
原指令:
LEA     SI,[hex+cx+1]
DEBUG反汇编:
LEA     DI,[BX+SI+0001]
程序是16位的。
在线等,求高手指点,谢谢!!
补充:我把我的源文件和程序打包放在下面了,代码略丑,包涵。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
LEA     SI,[hex+cx+1]
DEBUG反汇编:
LEA     DI,[BX+SI+0001]
楼主这是看花眼了吧?连寄存器都改了?
2013-5-22 19:18
0
雪    币: 35
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=邋遢鬼;1179876]LEA     SI,[hex+cx+1]
DEBUG反汇编:
LEA     DI,[BX+SI+0001]
楼主这是看花眼了吧?连寄存器都改了?[/QUOTE]

没有的,,我截个图你看就知道了
作为附件上传
上传的附件:
2013-5-23 09:59
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
你把源代码发下呀。
2013-5-23 11:28
0
雪    币: 35
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
发了,,在上面那个打包文件里
2013-5-23 12:34
0
雪    币: 31
活跃值: (48)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
好的,晚点回去了才能看,郁闷。
2013-5-23 13:04
0
雪    币: 496
活跃值: (286)
能力值: ( 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..
上传的附件:
2013-5-23 14:11
0
雪    币: 807
活跃值: (2273)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
楼上说的对,间接寻址不能使用ax,cx和dx这3个寄存器,楼主的寄存器没有用对。只要打开debug,输入LEA汇编指令一试就全明白了。
2013-5-24 03:15
0
雪    币: 35
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
嗯,问题已解决,灰常感谢tishion!感谢楼上的几位兄弟!学习了,再次感谢!
看来还需要再看看寻址方式,基本功不扎实,汗!
2013-5-24 15:19
0
游客
登录 | 注册 方可回帖
返回
//