day12汇编语言

数据宽度

0 1 10 11 100 101 110 111 1000(16进制8) 1001 1010 1011 1100

C和C++都需要定义数据的类型。计算机底层需要我们给这些数据定义宽度

位(bit) 0 1

字节(Byte) 0 ~0xFF

字(Word) 0~0xFFFF

双字(DWord) 0~0xFFFFFFFF

( 一个F四个1)

在计算机中,每一个数据都需要给它定义类型。定义宽度。在内存中的宽度。


编码规则

无符号的直接一样

有符号数的编码规则

原码:最高位符号位,对齐它的为进行本身绝对值即可

反码:

  • 正数:反码和原码相同
  • 负数:符号位一定是1,其余为对原码取反

补码:

  • 正数:补码和原码相同
  • 负数:符号位一定是1,反码+1

测试

# 现在说的这些都是8位
#如果是正数,那都是一样


#如果是负数
-1
#原码 1000  0001
#反码 1111  1110
#补码 1111  1111


#二进制的标志
2   10
4   100
8   1000
16  10000
32  100000

运算

与运算(and &)

电路串联 ---------- > 两个都为1 ,结果为1

1011 0001

1101 1000

------------------------- 与运算

1001 0000

或运算(or |)

电路并联 ---------- > 只要有一个为1 ,结果为1

1011 0001

1101 1000

------------------------- 或运算

1111 1001

异或运算 (xor ^)

不一样就是1

1011 0001

1101 1000

------------------------- 异或运算

0110 1001

非运算 (单目运算符 not ~)

1101 1000

--------------------- ^

0010 0111

位运算 (<< >>移动位 , 左移*2 右移/2)

0000 0001 1

0000 0010 2

0000 0100 4

0000 1000 8

print("%d\n",a>>2);

(<< ) @所有二进制位全部左移若干位 ,高位丢弃

(>> )@ 所有二进制位全部右移若干位 ,低位丢弃 //区别开 0 / 负数补1


汇编工具 (1.Vc6 程序到汇编的理解、 2.OD 3.抓包工具 4.加密解密工具)


通用寄存器 (mov指令 )

8个 EAX, ECX..


内存

内存写值

mov 数据宽度(byte word dword qword) 内存地址 ,1

mov byte ptr ds:[0x19FF70],1

传递值 大小一定要和数据宽度相等

内存地址有多种写法

ds:[0x19FF70+4]

ds:[eax]

ds:[eax+4]

数组[]

ds:[reg+reg*{1,2,4,8}]

posted @ 2022-09-14 16:13  小土豆888888  阅读(42)  评论(0)    收藏  举报