2012年12月13日

X86系列指令

摘要: 一、 数据传输指令实现数据在内存和寄存器或寄存器和寄存器的单个数据传输。如 mov, push, pop, pushf, popf, 不影响标志寄存器二、 算术运算指令如 add, adc, sub, sbb, inc, dex, mul ,div, 影响标志寄存器三、 逻辑运算指令如 and, or, not, xor, shr, shl, 除 not 外,影响标志寄存器四、 转移指令修改ip。如 jmp, loop, je, call, int, ret五、 控制指令设置标志寄存器和 cpu 状态。 如 std, cld, sti, cli, nop六、 串处理指令对内存中数据批量处理。如 阅读全文

posted @ 2012-12-13 14:57 人世间的金某人 阅读(197) 评论(0) 推荐(0) 编辑

汇编总结

摘要: 汇编是用机器的角度看问题,举一个很简单的例子可读性与效率,a*8 与 a<<3 结果是一样的,但a*8可读性好,除非是一些特别关注与效率的程序比如驱动程序,一般都是用前者,这就是在人的角度看与在机器的角度看的区别汇编主要是cpu与内存的故事,学汇编最好是把所有程序的内存变化图写下来一些命令其实也是几个指令的组合,用c语言形式和汇编形式重新写是一个不错的理解方式学了汇编可以理解函数的代码重用,就那几个指令写功能实在是太麻烦了,函数对提高可读性也是一大促进,程序执行都是从 main 函数开始,如果把 main 函数中用几个函数模块化,程序的可读性、重用行、分工都是有作用。数据和指令(代 阅读全文

posted @ 2012-12-13 14:56 人世间的金某人 阅读(134) 评论(0) 推荐(0) 编辑

寄存器各flag理解

摘要: 第0位 CF(carry flag):记录有无进位,主要是记录超过寄存器字长的虚拟一位,当虚拟位是1的话,CF = 1;虚拟位为0的的话,CF = 0;这里有一个问题我郁闷了两天翻《计组》中的运算才搞明白,虽然机器码都是二进制码,但是存储的方式是补码,负数补码是2^(n+1) + x,【n:整数位数, x:真值】所以说位数比单纯的取反加1多一位,所以计算得出的虚拟为可以是1,给无符号数使用第2位 PF(parity flag):记录机器码的1个数,个数为偶数,PF = 1;个数为奇数,Pf = 0;第4位 AF第6位 ZF(zero flag):当机器码全为0时, ZF = 0;不全为0是,Z 阅读全文

posted @ 2012-12-13 14:56 人世间的金某人 阅读(352) 评论(0) 推荐(0) 编辑

指针在函数传参的使用

摘要: 首先函数有形参和实参之分,形参是在函数原型和函数定义中写的参数,实参是在实际调用函数时的参数调用函数的过程:将实参压栈,在栈内存空间中重新创建以形参为编译地址的空间,值为实参传递,(这里就说明了为什么要在实参为大数据,尤其是结构体的时候,建议用指针传地址,因为指针大小固定是4个字节,这是因为指针即地址,现在地址总线是32根,32bit == 4Byte),所以说在调用函数结束时,因为出栈,这块内存空间被系统回收,原先压栈的实参没变化当实参是指针时,传指针是传地址,而*p又是指向实参,导致修改*p可以修改实参指向的内存,所以当希望可以通过函数修改实参的时候,一般就是传递实参地址,所以c++专门多 阅读全文

posted @ 2012-12-13 14:55 人世间的金某人 阅读(180) 评论(0) 推荐(0) 编辑

汇编对学C语言的帮助(尚未完成)

摘要: 首先先说明,在汇编中没有定义变量,跟变量有相同作用的是cpu寄存器,一般寄存器我现在看到的都是跟地址打交道,运算寄存器部分在计算机组成原理部分,汇编没讲然后说明,在c语言中变量名其实就是地址,一般在c语言我们是传递变量的值,但是在编译器中我们变量名就是内存单元的别名(1)寻址方式对数据类型的理解汇编寻址方式(一): mov ax, [0]是寻址的基础方式汇编寻址方式(二): mov ax, [bx]汇编寻址方式(三): mov ax, [bx + idata]可转换为格式: [bx].idata <==> 结构体idata[bx] <==> 数组汇编寻址方式(四): m 阅读全文

posted @ 2012-12-13 14:55 人世间的金某人 阅读(177) 评论(0) 推荐(0) 编辑

转移指令总结

摘要: 转移指令:可以修改ip的指令。无条件转移 jmp(1) jmp short s 标号,短转移:用一个字节表示大小,范围为-128--127(2) jmp near ptr s 标号,近转移:用两个字节表示大小,范围为-32768--32767(3) jmp far ptr s 标号,远转移:用四个字节表示地址,低位为ip,高位为cs(4) jmp ax 寄存器,地址,修改ip(5) jmp word ptr ds:[idata] 内存,地址,修改ip(6) jmp dword ptr ds:[idata] 内存,地址,低位为ip,高位为cs条件转移 jcxz, ja, jna, je, jne 阅读全文

posted @ 2012-12-13 14:54 人世间的金某人 阅读(277) 评论(0) 推荐(0) 编辑

逻辑运算符(and, or, nor)

摘要: and &规则: 1&1 = 1; 1&0 = 0; 0&1 = 0; 0&0 =0运用:and al, 10111111B将0位对应的数值置为0将1位对应的数值保持不变or |规则:1|1 = 1; 1|0 = 1; 0|1 = 1; 0|0 = 0运用:or al, 10111111B将0位对用的数值保持不变将1位对应的数值置为1nor ^规则:1^1 = 0; 1^0 = 1; 0^1 = 1; 0^0 = 0运用:a^b^b == a;小技巧:不用第三个变量交换变量内容a = a^b;b = a^b; //此时 b = a0;a = a^b; / 阅读全文

posted @ 2012-12-13 14:53 人世间的金某人 阅读(1254) 评论(0) 推荐(0) 编辑

导航