汇编语言基本格式

汇编语言与机器语言是一对一的,而高级语言与机器语言是一对多的

int Y;
int X = ( Y + 4 ) * 3;
mov eax,Y  ;Y 送入 EAX 寄存器
add eax,4  ;EAX 寄存器内容加 4
mov ebx,3  ;3 送入 EBX 寄存器
imul ebx   ;EAX 与 EBX 相乘
mov x,eax  ;EAX 的值送入 X

寄存器是cpu中被命名的存储位置,用于保存操作的中间结果

二进制转十进制(加权位计数法)

$$
dec = ( Dn-1 x 2n-1 ) + ( Dn-2 x 2n-2 ) +…+ ( D1 x 21 )+ ( D0 x 20 )
$$

D表示二进制的数字(0,1)
列:00001001=( 1 X 23 ) + ( 1 X 20 ) = 9

十六进制转十进制

$$
dec = (Dn-1 X 16n-1)+ (Dn-2 x 16n-2)+…+ (D1 X 161)+ (D0 x 160)
$$

列:3BA4=(3 x 163)+(11 x 162)+(10 x 161)+( 4 x 160)=15268

二进制相加

0+0=0 0+1=1
1+0=1 1+1=10

列:00101001+01011010=10000011

字节的度量单位

1 千字节(kilobyte)等于 210,或 1024 个字节。
1 兆字节(megabyte)(1MB)等于 220,或 1 048 576 字节。
1 吉字节(gigabyte)(1GB)等于 230 即 10243,或 1 073 741 824 字节。
1 太字节(terabyte)(1TB)等于 240,即 10244,或 1 099 511 627 776 字节。
1 拍字节(petabyte)等于 250,或 1 125 899 906 842 624 字节。
1 艾字节(exabyte)等于 260,或 1 152 921 504 606 846 976 字节。
1 泽字节(zettabyte)等于 270 个字节。
1 尧字节(yottabyte)等于 280 个字节。

补码的应用及运算方式

一个数的补码是其加法逆元

1011001010011100
msb为高位
lsb为低位
最高位为1表示负为0表示正

二进制补码计算:

00000001取反=11111110 +1=11111111(补码)
逆元方式-1 11111111-1=11111110取反=00000001

16进制补码计算:

6A3D取反(每位数减15)=95C2 +1=95C3
逆元方式95C3取反加1=6A3C+1=6A3D

有符号的二进制数转化十进制

最高位是1该数是补码,所以进行求补得正数然后转化十进制再加上符号

11111000 取反=00000111 +1=00001000=8 为负=-8

-8的二进制表示就是将8的二进制数进行取反+1

00001000 取反=11110111 +1=11111000(上一步相反的过程)

汇编boolean表达式(与或非)

非(NOT):标记为 ¬ 或 ~ 或 '
与(AND):标记为^或 ·
或(OR):标记为 ∨ 或 +
¬X=NOT X ¬X∨Y=(NOT X) OR Y
X^Y=X AND Y ¬(X^Y)=NOT (X AND Y)
X∨Y=X OR Y X^¬Y=X AND (NOT Y)


随笔      ctf

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!