首页
社区
课程
招聘
在汇编中,经常看到这些语句,不知道是何作用?高手帮小弟解困
发表于: 2011-5-7 19:45 7761

在汇编中,经常看到这些语句,不知道是何作用?高手帮小弟解困

2011-5-7 19:45
7761
and al,al
not al,al
or al,al
xor ax,ax
sub ax,ax 这一句,和mov ax,0 有什么区别?
shr ax,1
shl ax,1

push dx
poo ax
以上两句,和mov ax,dx有何差别?

test ax,1 这句是何作用?
可能问的问题有些弱智,可就是弱智的问题,让人很郁闷。大侠们帮帮我。

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (16)
雪    币: 71
活跃值: (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
问题1 一个是减法指令 一个是传送指令
问题2 一个是入栈 一个是出栈
问题3 用于比较一般用于跳转
2011-5-7 19:51
0
雪    币: 183
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
问题1:我明白是减法指令,一个是传送指令,这两句功能,是不是完全一样?
问题2:我明白是入出栈指令,我的意思是,这两句指令,合起来的作用,和mov ax,dx是不是一样?
2011-5-7 20:00
0
雪    币: 219
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mov ax,0 与 sub ax,ax结果一样 但是如果转成机器码的话   sub ax,ax比较小
2011-5-7 20:01
0
雪    币: 183
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
呵,原来是这样啊。谢谢楼上的。还有两个问题,大侠帮忙。
2011-5-7 20:24
0
雪    币: 183
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
我想了一下,sub ax,ax 应该还会影响标志会,是吧
2011-5-7 20:38
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
不会,只是编译器优化的结果,这样比较省CPU时钟周期。
2011-5-7 20:44
0
雪    币: 183
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
不会影响ZF标志位吗?
2011-5-7 21:21
0
雪    币: 494
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
不记得了,书也没带在身边。汇编语言程序设计里面有的,我的那边是国防科技出版社的,对着个指令介绍的很详细。
减法指令SUB(Subtract Binary Values Instruction)
指令的格式:SUB Reg/Mem, Reg/Mem/Imm
受影响的标志位:AF、CF、OF、PF、SF 和ZF
指令的功能是从目的操作数中减去源操作数。

                                                                                 在   8088 8086 80286 80386 80486 Pentium  执行用周期
sub reg8, reg8 0010 10x0[11-reg-r/                                                                            3   3   2  2 1 1
sub reg16, reg16 0010 10x1[11-reg-r/m]                                                                    3   3   2  2 1 1
sub reg32, reg32 0110 01100010 10x1[11-reg-r/m]                                                   3   3   2  2 1 1

mov reg8, imm 1011 0rrr[imm8]                                                                                   4   4   2  2 1 1
mov reg8, imm(alternate encoding)1100 0110[11-000-r/m][imm8]                            10  10  2  2 1 1
mov reg16, imm 1011 1rrr[imm16]                                                                               4   4   2  2 1 1
mov reg16, imm(alternate encoding)1100 0111[11-000-r/m][imm16]                        10  10  2  2 1 1
mov reg32, imm 0110 01101011 1rrr[imm32]                                                               -   -   -    2 1 1
mov reg32, imm(alternate encoding)0110 01101100 0111[11-000-r/m][imm32]         -    -   -   2 1 1
2011-5-7 21:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
哎,汇编语言一直没学精,
2011-5-7 21:51
0
雪    币: 230
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
原来这样也可以啊
2011-5-8 15:49
0
雪    币: 183
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
哎,学习汇编,好难啊。今天的学习进度没有完成。真郁闷。
2011-5-8 22:02
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
问题1:都是ax清零的作用,mov ax,0(16位汇编)指令长度为5B,而sub ax,ax占指令长度为4B。在反汇编中一般都用xor eax,eax(32位汇编)实现上述功能(占3B空间),节省空间。sub影响标志位,mov不影响。

问题2:push dx   pop ax通过入栈出栈方式改变寄存器的值,与mov ax,dax效果一样,没什么区别,反汇编中由于大部分变量都是在堆栈操作,故经常通过栈改变变量的值。

问题3:该语句用于测试ax的值是否为1。test ax,1 等价于and ax,1(“与”操作),结果反映在标志位上(ZF),但不返回;意思是说仅仅影响标志位(ZF)而已,ax的值还是没变化的。通常用于测试,后常跟 jz、jnz之类的跳转。

希望能对你有所帮助。
2011-5-9 03:12
0
雪    币: 183
活跃值: (14)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
楼上的,你的回复,是我见的最精辟的,谢谢了。
2011-5-9 13:42
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
一问一答一世界
受益了!
2011-5-9 14:13
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
没想到几乎看不懂额
2011-7-14 13:36
0
雪    币: 119
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
lz是不是把pop ax 写成 poo ax了
2011-7-14 13:41
0
游客
登录 | 注册 方可回帖
返回
//