| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1518 人关注过本帖
标题:汇编的一些基础知识收集。
取消只看楼主 加入收藏
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
结帖率:54.55%
收藏
已结贴  问题点数:20 回复次数:4 
汇编的一些基础知识收集。

程序代码:
在学习加密与解密第三版了,基础很重要特别那些加减乘除,之前看王爽的书时我一直都是避开。 
收集中。 
 
and a,b     a与b按位相与 
 
规则:只有两个都是1时结果才为1,其它为0 
 
例子: 
 
mov al,01000000b 
 
and al,01001000b 
 
al=01000000b 即只有两个位都为1时结果才为1 
 
--------------------勿在浮沙筑高台-------------------- 
 
or a,b   a与b按位相或 
 
规则:只有两个都是0时结果才为0,其它为1 
 
例子: 
 
mov al,01000000b 
 
and al,01001000b 
 
al=01001000b 
 
--------------------勿在浮沙筑高台-------------------- 
 
not a    按位取反 
 
规则:1变0,0变1 
 
mov al,01000000b 
 
not al 
 
al=10111111b 
 
--------------------勿在浮沙筑高台-------------------- 
 
xor a,b  按位异或  
 
规则:只有同时为1或者同时为0时才为0,其它为1 [这个搜了N久才知道,汗] 
 
mov al,01000000b 
 
mov bl,01111001b 
 
xor al,bl 
 
al=00111001b 
 
--------------------勿在浮沙筑高台-------------------- 
 
  15  14  13  12  11  10  09  08  07  06  05  04  03  02  01  00 
                             of   df    if    tf    sf    zf          af          pf         cf  
 
CF——进位标志 无符号数运算 
 
PF——奇偶标志 1的个数为偶则pf为1 为奇数则pf为0 
 
AF——辅助标志  
 
ZF——零标志 结果为0时zf为1  不为0时zf为0 
 
SF——符号标志 
 
DF——方向标志 是控制标志位为方向标志,在串处理指令中控制处理信息的方向用。当DF为1时,每次操作后使变址寄存器SI和DI减小,这样就使串处理从高地址向低地址方向处理。当DF为0时相反 
 
OF——溢出标志   
 
TF—— 单步标志  当TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。有符号数运算 
 
IF——中断标志 
 
LAHF      标志寄存器传送,把标志装入AH.  
SAHF   标志寄存器传送,把AH内容装入标志寄存器.  
PUSHF   标志入栈 
POPF     标志出栈 
PUSHD 32位标志入栈 
POPD 32位标志出栈 
 
--------------------勿在浮沙筑高台-------------------- 
 
test a,b  按位相与,但不改变目的操作数。 注:test 目的操作数,源操作数 其它与and一样 
 
只改变标志位 
 
cmp a,b 目的-源,不改变操作数,改变标志位 
 
 这里待续。。。 
 
 --------------------勿在浮沙筑高台-------------------- 
 
计算机的数据全都是以补码存储 
 
正数补码:与原码相同 
 
+2的补码是00000010b 
 
负数补码:符号位为1,其余位为该数绝对值的原码按位取反,然后加1。  
 
-2的补码是: 
 
表示有符号数时,最高位是符号位,因为是负数,所以最高位是为1 [1表示负]所以10000010b 
 
其余7位是-2的绝对值2的原码, 0000010b按位取反得1111101再把这个数加上1得到1111110 
 
再加上最高位的符号位11111110 这个就是-2的补码了。 
 
(1)如果补码的符号位为“0”,表示是一个正数,所以补码就是该数的原码。  
(2)如果补码的符号位为“1”,表示是一个负数,求原码的操作可以是:符号位为1,其余各位取反,然后再整个数加1。 
 
例如,已知一个补码为11111001,则原码是10000111(-7):因为符号位为“1”,表示是一个负数,所以该位不变,仍为“1”;其余7位1111001取反后为0000110;再加1,所以是10000111。 
 
 --------------------勿在浮沙筑高台-------------------- 
 
 溢出标志是针对有符号数操作数才会使OF置位 
 
处理器内部以补码表示有符号数,8个二进制位能够表达的整数范围是:+127 ~ -128,16位表达的范围是:+32767 ~ -32768.如果运算结果超出了这个范围,就是产生了溢出,有溢出,说明有符号数的运算结果不正确 
 
例如: 
 
mov al,60h 
 
add al,70h ;al=D0 但是al是八字节,若是表示有符号时:+127 ~ -128 
 
这时已超过这个范围,此时OF为1 表示溢出 
 
溢出标志OF和进位标志CF是两个意义不同的标志.进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确。 
 
例1:3AH + 7CH=B6H 
无符号数运算:58+124=182,范围内,无进位 
有符号数运算: 58+124=182 ,范围外,有溢出 
例2:AAH + 7CH=(1)26H 
无符号数运算:170+124=294,范围外,有进位 
有符号数运算:-86+124=28 ,范围内,无溢出 
处理器对两个操作数进行运算时,按照无符号数求得结果,并相应设置进位标志CF;同时,根据是否超出有符号数的范围设置溢出标志OF。 
应该利用哪个标志,则由程序员来决定。也就是说,如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数,则要注意是否溢出。 
判断运算结果是否溢出有一个简单的规则:只有当两个相同符号数相加,而运算结果的符号与原数据符号相反时,产生溢出;因为,此时的运算结果显然不正确。其他情况下,则不会产生溢出。 
 


[ 本帖最后由 onepc 于 2009-11-3 07:50 编辑 ]
搜索更多相关主题的帖子: 收集 汇编 知识 基础 
2009-11-01 01:28
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
我会慢慢补上去,我想刚学的对有符号与无符号这个东东有点模糊,我也是。~~
2009-11-03 07:51
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
xor 用于对称加密中。可逆的算法。
(x xor y)[这里加密了] xor y[只要知道y就可以返回到x]=x
这个y就是密钥了。
2009-11-10 07:55
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
常用的,就是xor eax,eax 这种格式。
清零的效率比mov eax,0快。
2009-11-11 11:08
onepc
Rank: 7Rank: 7Rank: 7
等 级:黑侠
威 望:3
帖 子:223
专家分:569
注 册:2009-8-27
收藏
得分:0 
我看很多人说效率快,还可占字节比mov少。
2009-11-12 22:55
快速回复:汇编的一些基础知识收集。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.035362 second(s), 10 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved