根据教程视频,以下均以32位计算机为例
一.通用寄存器(32位计算机)
| 32位 | 16位 | 8位低↓高 | 编号 |
|---|---|---|---|
| EAX | AX | AL | 0 |
| ECX | CX | CL | 1 |
| EDX | DX | DL | 2 |
| EBX | BX | BL | 3 |
| ESP | SP | AH | 4 |
| EBP | BP | CH | 5 |
| ESI | SI | DH | 6 |
| EDI | DI | BH | 7 |
ps:eip显示的是当前程序运行处
其它寄存器主要用途在此先不做介绍
为何分出不同位?
减小不必要的损耗,8位能表示的就不必用32位表示。
寄存器结构
| 31 | 15 | 7 | 0 |
|---|---|---|---|
| EAX | AX | AH | AL |
| ECX | CX | CH | CL |
| EDX | DX | DH | DL |
| EBX | BX | BH | BL |
| ESP | SP | ||
| EBP | BP | ||
| ESI | SI | ||
| EDI | DI |
二.常用汇编指令
r代表寄存器,m代表相应内存空间,imm代表相应位的立即数(一般16进制)
说几位就几位,不够会补0,溢出会覆盖等等
数溢出时,只从最低位开始存,多余被去除
1.mov
实质:操作码+操作数
目标操作数:立即数,通用寄存器,段寄存器等等
源操作数:同上
在不搞小动作的情况下,操作数的宽度一般要一样,源操作数和目标操作数不为同一单元
用法:
mov 目标操作数,源操作数
语法:
目标操作数可为:
1.r/m8(16,32),r8(16,32)
2.r8(16,32),r/m8(16,32)
3.r8(16,32),imm8(16,32)
2.add
3.sub
4.and
5.or
6.xor
7.not
三.内存
简要介绍