重要知识的总结,方便自己以后翻阅复习,在知识连贯性上穿插性较大,注意。
1.基本知识
内存单元:每个内存单元是 1个字节=8位=2个16进制数 “A5H” 则可以表示一个内存单元的值
字:就是在CPU内部传输,处理,暂时存放的最大数据大小。学习的汇编都是以8086的CPU为基础,在8086的CPU当中内部都是16位来传输的。所以之后我们所说都是1字=2字节=16位
存储:都是小端存储(LittleEndian),低位数据放在低位。
20位:因为地址总线每次传输的是20位,但是CPU内部是16位,这样就诞生了后面很多偏移的概念了。(= =为什么不直接设计成16位传输呢)
2.寄存器
注意命令
mov ds,1000H
mov bx,0001H
mov ax,[bx] 这句会将内存地址为 10001H和10002H的16位都赋值给ax,因为ax是16位的
2.1通用寄存器
ax:存放临时数据
bx:放偏移量 使用[bx]实际上是 (bx)+(ds)
cx:和Loop有关,循环的次数
dx:
2.2 段地址寄存器
ds:[bx] 表示一个数据段
cs:IP 表示代码段
ss:sp 表示栈段,sp始终指向栈顶。注意push 先进行sp-2 再将寄存器的内容传送到内存单元。而pop则先将内存单元的内容给寄存器后进行sp+2
3.debug
u 查看CS:IP处开始的所有汇编指令(将机器指令转换成汇编指令)
r 查看修改寄存器
a 以汇编指令的形式在内存中写入指令
d 查看内存中的内容
t 执行一条指令
4.程序基本结构
assume cs:mycode //assume伪指令定义一个代码段 叫mycode mycode segment start: mov ax,2000H //start标号定义程序开始 mov ds,ax mov bx,1000H mov ax,[bx] inc bx inc bx mov [bx],ax inc bx inc bx mov [bx],ax inc bx mov [bx],al inc bx mov [bx],al mov ax,4c00H int 21H mycode ends //代码段的结束 end segment end start //程序结束