注册 登录
编程论坛 汇编论坛

初学汇编遇到了点问题求解决。

az71566 发布于 2013-09-19 19:32, 1265 次点击
下面3条指令执行后,CPU几次修改IP?都是在什么时候?最后IP的值是多少?
mov  ax,bx
sub  ax,ax
jmp  ax
貌似sub不是汇编指令吧?
分析过程最好写详细些 谢过了
13 回复
#2
az715662013-09-19 19:56
B8   20000   
23   20001     mov,ax=0123H
01   20002
B8   20003
00   20004     mov,bx=0000H
00   20005
8B   20006
               mov,ax,bx
D8   20007
FF   20008
               sub,ax,ax
E3   20009
ax-ax=0
jmp ax  ip中的值是0
这样算是对的吗?
#3
az715662013-09-19 19:59
还有为什么MOV指令一定要3个字节?
#4
Explorerlxz2013-09-19 22:28
怎么都问这个问题,前几天我刚在csdn上回答过这个问题,再贴过来
第1次:执行完mov ax,bx后ip指向下一条指令sub ax,ax
第2次:执行完sub ax,ax后ip指向下一条指令jmp ax
第3次:读入jmp ax后ip指向jmp ax下一行的指令
第4次:执行完jmp ax后(跳转指令,此时ax已经为0)ip=0
#5
Explorerlxz2013-09-19 22:41
请问楼主,如果sub不是汇编指令,那么它是什么,为什么能用于汇编程序,你为什么怀疑它不是呢?
对于二楼中的问题我的回答是8086指令系统采用变长指令,指令长度可由1到6字节组成
mov指令的长度也不是固定的,比如说mov ax,bx占用两字节,而mov al,[bx+0123h]占四个字节
我也有个问题要问楼主,二楼的反汇编是怎样得来的,我是自学汇编,8086不知道用什么工具学,只是看了些书,没怎么实践!
#6
Explorerlxz2013-09-19 22:45
说错了,最近学win32说成反汇编了我的意思是二楼的十六进制机器码是怎样得来的
#7
az715662013-09-19 22:48
书上看的
#8
Explorerlxz2013-09-19 22:53
我也说如果你能用到那等工具,这些应该都不成问题,我搜索了一下,好像是debug!我也只是在书上看到过这个软件,请问楼主学8086汇编的环境电脑系统是xp还是win7用的是masm32,emu8086还是什么,我很想学,不过觉得win7下用这两种软件效果都不好,又不想去虚拟机里学!
#9
Explorerlxz2013-09-19 23:06
不方便说就算了,我还是多看书以后再去虚拟机里实验
话说这是楼主开的贴,我倒反问了不少问题,不好意思,学汇编的太少了,我只是很感兴趣!楼主加油
#10
az715662013-09-20 22:40
额!我也是自学的汇编,还没到你那高度呢  我用的是XP的 debug 也是刚刚才学了几个命令
#11
Explorerlxz2013-09-21 13:26
嗯,好好努力,你看的是王爽的书吧!那本书挺不错的,昨天看了几章,那天的疑惑全都消除了!
#12
az715662013-09-21 17:51
第一步执行MOV,AX=0123,第二步执行MOV,BX=1230第三步执行MOV,AX,BX第四步执行SUB,AX,AX.   AX=O IP地址为0
是不是这样啊?
#13
Explorerlxz2013-09-21 22:24
请问ax=0与ip有关系吗?一楼中是由于执行跳转指令jmp ax才改变了ip的值,不执行跳转指令的话ip由电脑控制,自动指向下一条指令,跟寄存器啥关系都没有!
#14
3037709572013-09-22 17:53
等你来结贴!
1