处理器(CPU),所能识别的就是一串二进制机器语言的代码
java 的抽象就是java虚拟机的抽象.
中文编码unicode 4个字节 ASCII 1个字节
PTR 属性操作符,可以制定操作数的类型属性,优先于隐含的类型属性。
Bit意为"位"或"比特",是计算机运算的基础;
Byte意为"字节",是计算机文件大小的基本计算单位;
1byte=8bits,两者换算是1:8
al 是 8比特,8位, 有低四位 高四位.1字节
汇编语言程序的语句除 治理了难过 意外还可以有 位操作和宏指令组成.
MOV传送的是地址所指的内容,而LEA只是地址。0
LEA REG,SRC
link 连接 库文件 ,和 目标文件成为 可执行文件 exe
MUL SRC
- SRC是字节操作数 即:AX←(AL)*(SRC)
- SRC是字操作数 即:DX:AX←(AX)*(SRC)
受影响的标志位有:CF和OF(AF、PF、SF和ZF无定义)
如果乘积结果的高半部分等于零,则CF=OF=0,否则CF=OF=1
简化段定义 mov ax,@data mov ds,ax
neg是求补指令
STOS 该指令把AL,AX,EAX中的值存入到由目的寄存器DI指向的附加段的某单元中,并根据控制标志位DF的值和数据类型修改目的变址寄存器的值。
LODS 该指令把源变址寄存器SI指向的数据段中某单元的内容送到AL,AX,EAX中,并根据控制标志位DF的值和数据类型修改源变址寄存器的值。
另一组是指针寄存器和变址寄存器,包括:
SP(Stack Pointer):堆栈指针,与SS配合使用,可指向目前的堆栈位置
BP(Base Pointer):基址指针寄存器,可用作SS的一个相对基址位置
SI(Source Index):源变址寄存器,可用来存放相对于DS段之源变址指针
DI(Destination Index):目的变址寄存器,可用来存放相对于ES 段之目的变址指针。
控制标志位为方向标志,(direction flag,DF)DF为1每次操作后变址寄存器SI和DI减小,为0则增大。
name LABLE type
移位指令
SHL 逻辑左移 logical
SAL 算术左移 arithmetic
SHR 逻辑右移
SAR 算术右移
将段地址装入相应的段寄存器中
三、地址传送指令
(1) 格式:LEA REG,MEM
功能:将源操作数的有效地址传送到通用寄存器,操作数REG为16位或32位通用寄存器,源操作数为16位或32位存储器操作数。
例 3.21
LEA BX,BLOCK;将BLOCK的有效地址传送到BX中(16位)
LEA EAX,/[EBX/];将EBX内容(有效地址)传送到EAX中(32位)
一、字符串处理指令
(1) lodsb、lodsw:把DS:SI指向的存储单元中的数据装入AL或AX,然后根据DF标志增减SI
(2) stosb、stosw:把AL或AX中的数据装入ES:DI指向的存储单元,然后根据DF标志增减DI
(3) movsb、movsw:把DS:SI指向的存储单元中的数据装入ES:DI指向的存储单元中,然后根据DF标志分别增减SI和DI
(4) scasb、scasw:把AL或AX中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI
(5) cmpsb、cmpsw:把DS:SI指向的存储单元中的数据与ES:DI指向的存储单元中的数据相减,影响标志位,然后根据DF标志分别增减SI和DI
(6) rep:重复其后的串操作指令。重复前先判断CX是否为0,为0就结束重复,否则CX减1,重复其后的串操作指令。主要用在MOVS和STOS前。一般不用在LODS前。
上述指令涉及的寄存器:段寄存器DS和ES、变址寄存器SI和DI、累加器AX、计数器CX
涉及的标志位:DF、AF、CF、OF、PF、SF、ZF
NOP 无操作指令 ,占一个字节的空间,调试的时候用
HLT 停机指令 ,
ESC 换码指令,
WAIT 使处理机处于空转状态.
LOCK 前缀 维持总线的锁存信号
BOUND 界限指令
ENTER 建立堆栈帧
LEAVE 释放堆栈帧
SEGMENT 伪操作
MODEL 伪操作
状态标志 : 记录指令操作结果的标志, 共6位 : OF , SF ,ZF ,AF ,PF ,CF
控制标志 : 控制操作的标志,如DF位
段跨越前缀 ,如允许数据存放在除DS段以外的其他段中.
串处理指令的目的串必须用ES段
BCD码
BCD码 是用二进制的“数”来表示十进制的“数字”因此,对于一个“十进制数字”(例如“6”),我们可以用一个“8位二进制数”来表示(即0000 0110 b),这称为非压缩的BCD码;当然,我们也可以用一个“4位的二进制数”来表示它(即 0110 b),这称为压缩的BCD码。 于是,十进制数“36”用非压缩的BCD码表示为“00000011 00000110”而用压缩的BCD码表示为“0011 0110”。
就是每4位表示一个数字咯~原本一个字节8位代表一个数字的
CF是进(借)位标志 值为1或0sbb就是在sub的基础上再减去cf(借位标志) 带借位的减法就好像adc就是在add的基础上再加上cf(进位标志) 带进位的加法