目录
一、通用寄存器
1、寄存器结构
1、分割的主要原因是:寄存器的发展需要兼容
2、寄存器位数不同是因为对空间合理利用的需求
3、16位——>8位:AX-->【AH(A HIGH)-------AL (A LOW)】
4、对汇编的理解:在内存---寄存器、寄存器----寄存器之间不断地移动数据,程序的复杂源于移动的复杂
5、程序单步运行图(debug)
MOV(操作码)含义:将源操作数(0x~~~)的值移到目标操作数【(eg:eax)(eax:32位寄存器)】中,源操作数的数据宽度可以小于所用寄存器宽度
要求:
-------------------------------------------------------------------------------------------------------------------------------
1)源操作数与目标操作数的宽度必须一致,
2)如果 立即数/寄存器 宽度小于目标操作数宽度,则在多于位置补0
举例:
执行:MOV CX,1
结果:AAAAEEEE------->AAAA0001
3)如果 立即数寄存器 宽度大于目标操作数宽度,则多余的高位被舍去
------------------------------------------------------------------------------------------------------------------------分界线
F8--->执行第二步:MOV AX,0xBBBB
AAAAAAAA----->AAAABBBB
证明:AX是EAX的一部分
F8:执行:MOV AH,0xDD
AAAABBBB------>AAAADDBB
AX的高位是AH,地位是AL
F8:执行:MOV AL,0xEE
AAAADDBB----->AAAADDEE
2、 寄存器使用
举例:
执行2:MOV AX,DX
结果:
3、汇编指令类型:
1)ADD指令
2)SUB指令:
原结果: EAX 0000 0003
F8执行:SUB EAX,2
结果:EAX 0000 0003 -------->EAX 0000 0001
3)AND(&)指令:
执行:AND EAX,3
计算分析如下:
结果:
------------------------------------------------------------------------------------------------->
4)OR(||)指令:
------------------------------------------------------------------
执行 : OR EAX,3
结果:
--------------------------------------------------------------------------------------------->
二、内存读写
1、寄存器与内存区别:
只要是32位计算机,那么最多是别的内存是4G,这种说法对吗?
答:正常情况下没错,但是不包括改变寻址范围情况
-----------------------------------------------------------------------------------------------------------------------------
2、内存:
计算机如何区别 立即数与内存编号呢? // 内存编号表示:【内存编号】
涉及到内存读写的一定要指定内存宽度
3、编写指令要求:
-----------------------------------------------------------------------------------------------------------------------------
一个程序所占用的内存空间并不都是可以访问的,但是 ESP中的地址编号一定可以访问
0012FFC4代表内存编号---------------------------7C82F23B代表当前内存中存储的值
一个内存编号存一个字节,但是编号是以4个字节为单位命名
读取内存:
执行结果: