汇编源程序中数据不能以字母开头,所以一般在前面加个0,eg: mov ax,0ffffh
;---------------------------------------------------------------------------------------------------------
寄存器:(14个)AX,BX,CX,DX,SP,BP,SI,DI,IP,FLAG,CS,DS,SS,ES
通用寄存器:
AX,BX,CX,DX 称作为数据寄存器:(可拆分)
AX (Accumulator):累加寄存器,也称之为累加器;
BX (Base):基地址寄存器;
CX (Count):计数器寄存器;
DX (Data):数据寄存器;
SP 和 BP 又称作为指针寄存器:
SP (Stack Pointer):堆栈指针寄存器;
BP (Base Pointer):基指针寄存器;
注:bp:基址寄存器(stack pointer),一般在函数中用来保存进入函数时的sp的栈顶基址
它的用途有点特殊,是和堆栈指针SP联合使用的,作为SP校准使用的,
只有在寻找堆栈里的数据和使用个别的寻址方式时候才能用到
SP,BP一般与段寄存器SS 联用,以确定堆栈寄存器中某一单元的地址,
SP用以指示栈顶的偏移地址,而BP可 作为堆栈区中的一个基地址,用以确定在堆栈中的操作数地址。
每次子函数调用时,系统在开始时都会保存这个两个指针并在函数结束时恢复sp和bp的值。如下
在函数进入时:
push bp // 保存bp指针
mov bp,sp // 将sp指针传给bp,此时bp指向sp的基地址。
// 这个时候,如果该函数有参数,则[bp + 2*4]则是该子函数的第一个参数,
[bp+3*4]则是该子函数的 第二个参数,以此类推,有多少个参数则[bp+(n-1)*4]。
.....
.....
函数结束时:
mov sp,bp // 将原sp指针传回给sp
pop bp // 恢复原bp的值。
ret // 退出子函数
SI 和 DI 又称作为变址寄存器:
SI (Source Index):源变址寄存器;
DI (Destination Index):目的变址寄存器;
控制寄存器:
IP (Instruction Pointer):指令指针寄存器;
FLAG:标志寄存器;
标志位 标志位名称及外语全称 =1 =0
CF 进位标志/Carry Flag CY/Carry/进位 NC/No Carry/无进位
PF 奇偶标志/Parity Flag PE/Parity Even/偶 PO/Parity Odd/奇
AF 辅助进位标志/Auxiliary Carry Flag AC/Auxiliary Carry/进位 NA/No Auxiliary Carry/无进位
ZF 零标志/Zero Flag ZR/Zero/等于零 NZ/Not Zero/不等于零
SF 符号标志/Sign Flag NG/Negative/负 PL/Positive/非负
TF 跟踪标志/Trace Flag
IF 中断标志/Interrupt Flag EI/Enable Interrupt/允许 DI/Disable Interrupt/禁止
DF 方向标志/Direction Flag DN/Down/减少 UP/增加
OF 溢出标志/Overflow Flag OV/Overflow/溢出 NV/Not Overflow/未溢出
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00
OF DF IF TF SF ZF AF PF CF
pushf 将FLAG压入栈
popf 将栈内数据放到FLAG
段寄存器:
CS (Code Segment):代码段寄存器;
DS (Data Segment):数据段寄存器;
SS (Stack Segment):堆栈段寄存器;
ES (Extra Segment):附加段寄存器;
寻址:
bx,bp,si,di都可单独出现
在[...]中,这4个寄存器可以单个出现或只能以四种组合出现:bx和si,bx和di,bp和si,bp和di
bx是数据基址寄存器,缺省时使用ds段寄存器,它可以和ds或es段寄存器显式的联合使用
bp是栈基址寄存器,缺省时使用ss段寄存器,也可以和ds、es段寄存器显式的联合使用
si、di分别是源、目的变址寄存器,缺省分别使用ds、es段寄存器,均可以显式的和ds、es段寄存器联合使用
;-----------------------------------------------------------------------------------------------------------
安全空间 0:0200-0:0300
;-----------------------------------------------------------------------------------------------------------
80X25彩色字符模式显示缓冲区的结构:
在内存地址结构中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区。
向这个地址空间写入数据,写入的内容将立即出现在显示器上。
在80x25彩色模式下,显示器可以显示25行,每行80个字符,每个字符可以由256中属性。
80x25模式下,一屏的内容在显示缓冲区共4000个字符。每个字符占一个字,高8位为字符的ASCII码,低8位为字符的属性
字符属性含义:
7 6 5 4 3 2 1 0
BL R G B I R G B
闪烁 背景 高亮 前景
RGB,R:red、G:green、B:blue
闪烁效果在全屏DOS下才能看到
0040:17单元储存键盘状态字节,记录控制键和切换键的状态:
0 右shift 置1表示按下右shift键
1 左shift 置1表示按下左shift键
2 Ctrl 置1表示按下Ctrl键
3 Alt 置1表示按下Alt键
4 ScrollLock 置1表示按下ScrollLock指示灯亮
5 NumLock 置1表示小键盘输入的是数字
6 CapsLock 置1表示输入大写字母
7 Insert 置1表示处于删除状态
原文地址:http://blog.51cto.com/13542777/2114202