汇编语言个人笔记

汇编程序员就是通过汇编指令来修改寄存器中的内容,来控制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不进位

原文地址:https://www.cnblogs.com/zhang1422749310/p/10975863.html