
汇编
Free Jim
这个作者很懒,什么都没留下…
展开
-
gcc 不同优化等级
默认的编译方法gcc -S a.c -o a.s选择不同的优化等级:gcc -o1 -S a.c -o a2.s //-o表示输出,可自定义输出文件的命名优化等级越高,所需时间越长,但程序运行起来一般会更高效,下面有对比默认优化:O2优化:...原创 2020-01-11 18:53:13 · 1429 阅读 · 0 评论 -
机器码与汇编
jmp 的操作码是 11101001 即 e9则 jmp的操作数就是 ff ff ff 00Ps:小端方式\color{red}{Ps:小端方式}Ps:小端方式但是,这仍不是目标跳转地址jmp 采取相对寻址方式,即以当前指令为起始,偏移量为 ff ff ff 00(这是个负数,表示往低地址偏移)Ps:当前指令——到该指令结束即8048296+5+偏移量\color{red}{即 8...原创 2020-01-11 16:24:16 · 705 阅读 · 0 评论 -
逻辑运算指令
NOT:否AND:与OR:或XOR:异或以上的语句都会改变目的操作数例:andb $0xf , %al则会把结果存在 al 寄存器中TEST:与,但是不会改变目的操作数,而是把结果存在FLAG寄存器中...原创 2020-01-07 22:33:35 · 309 阅读 · 0 评论 -
位移指令
SHL:逻辑左移——每左移一次,最高位送入CF,低位补0SHR:逻辑右移——每左移一次,最低位送入CF\color{red}{最低位送入CF}最低位送入CF,高位补0SAL:算术左移——和上面的逻辑左移一样,只是多了一些操作。如果位移前后,符号位发生改变,则OF=1SAR:算术右移——和上面的逻辑右移也是只有一处不同。高位补的是符号\color{red}{高位补的是符号}高位补的是符号,不是...原创 2020-01-07 22:28:55 · 1241 阅读 · 1 评论 -
汇编set语句
cmp $eax,%edxsetb $cl解析:cmp 比较两个操作数,结果保存在FLAG寄存器中setb 的 b 表示无符号数的 below 小于,即如果 %eax < %edx ,则把cl寄存器的值置1否则置0Ps:是值置1,而不是寄存器的某一位当然 %eax < %edx 是从我们人的角度来看的对计算机而言,要看 FLAG 寄存器的标志位无符号,小于...原创 2020-01-07 22:20:07 · 3125 阅读 · 0 评论 -
汇编加减乘除
一.加减—— add / subadd %eac,%eaxeac 和 eax 寄存器的值相加,结果存到 eax 寄存器中二.乘 —— imul / mul (带符号/无符号)Ps:i —— integer 整数包括正负数,故表示带符号数的乘法1. 单操作数:mulb %BLBL (8位)寄存器和AL (8位)寄存器的值相乘,结果保存在 AX (16位)寄存器单操作数时,隐藏了操作数和...原创 2020-01-05 11:15:34 · 4223 阅读 · 0 评论 -
汇编指令中的一些字母
b——字——8位w——双字——16位l——四字——32位q——八字——64位movswl ——从2字节符号拓展到4字节s——sign——符号movzwl——从2字节零拓展到4字节z——zero——零...原创 2019-11-29 13:06:20 · 1867 阅读 · 0 评论