基础汇编
进制与数据宽度
1字=2字节 (1 word =2 byte)
1个字的字长是16(位)bit
1字节=8bit (1byte = 8bit)
一个字节的字长是8(位)bit
数字编码与有符号数无符号数
有符号数:
正数以源码进行存储,正数二进制为正数增长
负数用补码存储 ,负数二进制为负增长
0为正数,1为负数
1
0000 0001
-6
1000 0110
反码:除符号位,其他都取反
-1
1000 0001
反码:1111 1110
补码:
正数
正整数的补码是其二进制表示,与原码相同
例:+9的补码是00001001。(备注:这个+9的补码是用8位2进制来表示的,补码表示方式很多,还有16位二进制补码表示形式,以及32位二进制补码表示形式,64位进制补码表示形式等。每一种补码表示形式都只能表示有限的数字。)
负数
求负整数的补码,将其原码除符号位外的所有位取反(0变1,1变0,符号位为1不变)后加1
同一个数字在不同的补码表示形式中是不同的。比如-15的补码,在8位二进制中是11110001,然而在16位二进制补码表示中,就是1111111111110001。以下都使用8位2进制来表示。
比如-5的补码。
-5对应带符号位负数5(10000101)→除符号位外所有位取反(11111010)→加 00000001为 (11111011)
所以-5的补码是11111011。
无符号数:
已源码进行存储
逻辑运算与寄存器
寄存器
通用寄存器
32位汇编 16寄存器 8位寄存器
32位通用寄存器
eax,ebx,ecx,edx
12位寄存器
ax,bx,cx,dx
8位寄存器
al,ah,bl,bh,cl,ch,dl,dh
左移右移与加法减法
not(非运算)
11111000非运算取反
00000111
左移若干位 高位舍去 低位补0
shl 01111000左移2
11100000
shr与shl方法一样
shr 0111 1000 右移两位
0001 1100
sar最高位补符号位
sar 1111 0001 右移两位
1111 1100
计算机只会做位运算4+5=
1.先进行异或运算
0000 0100
xor 0000 0101
0000 0001
-----------------
2.判断进位
将左移1位的结果
0000 0100
and 0000 0101
0000 1000
-----------------
0000 0001
xor 0000 1000
0000 1001
与第一次运算的结果接续异或
判断进位
0000 0001
and 0000 1000
0000 0000
常用汇编指令
相加 add 1+1 2+2 3+3
add eax,8
add ebx,eax
add 内存地址(寄存器),立即数(寄存器)
相减 sub 同上
push
push word ptr ds:[0x00402000]
pop eax
lea
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)