能力值:
( LV3,RANK:20 )
|
-
-
2 楼
问题1 一个是减法指令 一个是传送指令
问题2 一个是入栈 一个是出栈
问题3 用于比较一般用于跳转
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
问题1:我明白是减法指令,一个是传送指令,这两句功能,是不是完全一样?
问题2:我明白是入出栈指令,我的意思是,这两句指令,合起来的作用,和mov ax,dx是不是一样?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
mov ax,0 与 sub ax,ax结果一样 但是如果转成机器码的话 sub ax,ax比较小
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
呵,原来是这样啊。谢谢楼上的。还有两个问题,大侠帮忙。
|
能力值:
( LV2,RANK:10 )
|
-
-
6 楼
我想了一下,sub ax,ax 应该还会影响标志会,是吧
|
能力值:
( LV5,RANK:60 )
|
-
-
7 楼
不会,只是编译器优化的结果,这样比较省CPU时钟周期。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
不会影响ZF标志位吗?
|
能力值:
( 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
|
能力值:
( LV2,RANK:10 )
|
-
-
10 楼
哎,汇编语言一直没学精,
|
能力值:
( LV2,RANK:10 )
|
-
-
11 楼
原来这样也可以啊
|
能力值:
( LV2,RANK:10 )
|
-
-
12 楼
哎,学习汇编,好难啊。今天的学习进度没有完成。真郁闷。
|
能力值:
( 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之类的跳转。
希望能对你有所帮助。
|
能力值:
( LV2,RANK:10 )
|
-
-
14 楼
楼上的,你的回复,是我见的最精辟的,谢谢了。
|
能力值:
( LV2,RANK:10 )
|
-
-
15 楼
一问一答一世界
受益了!
|
能力值:
( LV2,RANK:10 )
|
-
-
16 楼
没想到几乎看不懂额
|
能力值:
( LV2,RANK:10 )
|
-
-
17 楼
lz是不是把pop ax 写成 poo ax了
|
|
|