汇编语言Assembly Language.asm--8086
寻址方式*4
寻址方式 |
操作数 |
寻址 |
立即数寻址 |
操作数就是立即数 |
-- |
寄存器寻址 |
操作数在寄存器中 |
用寄存器名寻址 |
内存寻址 |
操作数在内存中 |
用物理地址寻址 |
I/O端口寻址 |
操作数在IO设备中 |
立即数作为地址 |
内存寻址*5
寻址方式 |
有效地址EA |
默认段 |
直接寻址 |
EA=IMME |
默认段DS |
寄存器间接寻址 |
EA=(REG) |
BX/SI/DI默认DS,BP默认SS |
寄存器相对间接寻址 |
EA=(REG)+IMME |
同上 |
基址变址寻址 |
EA=(基REG)+(变REG) |
BX默认DS,BP默认SS |
相对基址变址寄存器 |
EA=(基REG)+(变REG)+IMME |
同上 |
IMME作为地址时,可以8位或16位;物理地址PA=SA*10H+EA; |
思维导图
寄存器命名的演化
处理器 |
年份 |
寄存器名称演化 |
8008-世界上第一个8位微处理器 |
1972年 |
A B C D E H L |
8086-16位微处理器 |
1979年 |
AX BX CX DX AL BL CL DL AH BH CH DH |
80386-x86系列中的第一个32位处理器 |
1985年 |
EAX AX AH AL |
x86-64 |
2003年 |
RAX EAX AX AH AL |
x86-64 |
NOW |
R15(64) R15D(32) R15W(16) R15B(8) |
物理地址=段地址*16+偏移地址
默认组合
SS:SP |
栈段地址+栈指针 |
SS:BP |
栈段地址+基指针 |
DS:SI |
数据段地址+源变址 |
ES:DI |
附加段地址+目标变址 |
CS:IP |
代码段地址+指令指针 |
DS:BX |
数据段地址+基数 |
寄存器*14
通用*4(ABCD) |
Accumulate+Base+Count+Data |
ACD(数据)B(地址) |
段*4(CDES) |
Code+Data+Extra+Stack |
CDES(地址) |
指针*3(SBI) |
Stack+Base+Instruction |
SBI(地址) |
变址*2(SD) |
Source+Destination |
SD(地址) |
标志*1 Flag/PSW |
program status word |
Flag(状态) |
指令分类
一、数据传送指令 |
MOV,PUSH,POP,XCHG,IN,OUT,XLAT,LEA,LDS,LES,LAHF,SAHF,PUSHF,POPF |
二、算术指令 |
ADD,ADC,INC,SUB,SBB,DEC,NEG,CMP,MUL,IMUL,DIV,IDIV,CBW,CWD |
三、逻辑指令 |
AND,OR,XOR,TEST,NOT,SHL/SHR,SAL/SAR,ROL/ROR,RCL/RCR |
四、串处理指令 |
MOVS,LODS,STOS,CMPS,SCAS |
五、控制转移指令 |
JMP,...,LOOP,LOOPZ/LOOPE,LOOPNZ/LOOPNE,CALL,RET,INT,INTO,IRET |
六、处理机控制指令 |
|
语言组成
①标号 |
表示指令地址或变量地址 start:mov ax,bx |
②助记符 |
机器指令的符号化表示jmp |
③操作数 |
add ax,250H |
④注释 |
单行注释;多行注释comment |
堆栈 heap+stack
堆=heap |
栈=stack |
人为申请开辟malloc |
系统自动分配 |
手动释放free |
编译器自动释放 |
空间较大 |
空间较小,栈的大小是1M |
速度比较慢 |
速度较快 |
不连续的空间,产生碎片 |
连续的空间,不会产生碎片 |
链表数据结构存储空闲内存地址 |
栈是机器系统提供的数据结构, 专门的寄存器存储地址 |
堆一般是在头部用一个字节存放堆的大小,堆中的具体内容是人为安排 |
栈在函数调用时,函数调用语句的下一条可执行语句的地址第一个进栈,然后函数的各个参数进栈,其中静态变量是不入栈的 |