汇编程序员就是通过汇编指令来修改寄存器中的内容,来控制CPU
CS:IP 和指令有关
DS:[0] 和数据有关
SS:IP 临时性数据
地址总线:
一个CPU有N根地址线,这样的CPU最多可以寻找2的N次方个内存单元
一个内存单元的大小是一字节 (内存中最小单元——字节) 1个字节=2个16进制 (00)
20根总线 220=1024(KB)x1024 =1(MB)
32根总线 4GB
数据总线:
1根数据总线可传送1个二进制数据
8根数据总线可传送1个字节 16根数据总线可传送1个字
进制缩写:
- B,Binary(二进制);
- O,Octal(八进制);
- D,Decimal(十进制);
- H,Hex(十六进制);
16进制与2进制: (4个二进制表示1个16进制)
1111 (B) = F (H) 24 = 16 8个2进制可以表示1个字节或字母 16个2进制可表示1个字或2个字母。 (4个二进制表示半个字母)
16进制00可表示一个字节 16进制0000可表示一个字
8bit(位)=1Byte(字节)
1024Byte(字节)=1KB
转移指令的原理:
CPU在执行jmp指令的时候并不需要转移目的地址
对IP的修改是根据转移目的地址和转移起始地址之间的位移来进行的。(机器码中包含目的地址的位移距离)
CPU中存放段地址信息的寄存器: ds es ss cs
CPU中存放偏移地址信息的寄存器: bp ip sp id si bx
;ds 数据从哪里来 ds:[si]
;es 数据放到哪里去 es:[di]
栈: 临时性保存数据
栈都是我们自己安排的 注意栈越界
and和or命令:
and 0 有0就变为0 转化为大写:and al,11011111B
or 1 有1就变为1 转化为小写:or al,00100000B
div指令:
除数8位(小于255) AH余数 AL商
除数16位 DX余数 AX商
标志寄存器:
OF <---Overflow--> OV(1) ; NV(0) 1为溢出 0为不溢出
DF <--Direction-> DN(1) ; UP(0) 1——si,di递减 0——si,di递增
IF <-----> EI(1) ; DI(0)
SF <--Sign-> NG(1) ; PL(0) 1为负 0为非负
ZF <--Zero---> ZR(1) ; NZ(0) 1为结果为0 0为结果不为0
AF <-----> AC(1) ; NA(0)
PF <-Parity-> PE(1) ; PO(0) 1为结果为奇数 0为结果为偶数
CF <--Carry---> CY(1) ; NC(0) 1进位 0不进位