汇编语言
(1)学习背景
由于第三阶段的任务需要对程序进行反汇编并进行分析,因此需要重新将汇编语言的基础知识复习一遍。
(2)学习内容
- 8086CPU有14个寄存器,分别是:
AX,BX,CX,DX,SI,DI,SP,BP,IP,CS,SS,DS,ES,PSW.
这些寄存器都是16位的,可以放两个字节。
AX,BX,CX,DX用来存放一般性的数据,称为通用寄存器。为了兼容上代的CPU,这四个寄存器又都可以分为两个独立使用的8位寄存器:
AX:AH,AL; BX:BH,BL;CX:CH,CL;DX:DH,DL.
AX的低八位(0-7位)构成了AL寄存器,高八位(8-15位)构成了AH寄存器。AL产生的进位会丢失,而不会存储在AH中。
在写汇编指令或一个寄存器的名称时不区分大小写。
在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。
- 物理地址=段地址*16+偏移地址
本质:CPU访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。
段地址*16必然是16的倍数,因此一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB.(内存并没有分段,段的划分来自于CPU)
- 通用寄存器 ``` ax,bx,cx,dx, 用来存放一般数据。大小是16位即2个字节
8086CPU为了兼容上一代的8位CPU,ax,bx,cx,dx都可以分成两个独立的寄存器
AX 可分为 AH (AX的高8位)和 AL(AX低8位)
同理BX 可分为 BH 和BL 、CX 可分为CH 和 CL 、DX可分为DH和AL
4. 几条简单的汇编指令
mov ax, 18 ax=0018H
mov ah, 78 ah=0078H
add ax, 8 ax = ax+008H
mov ax, bx ax = bx
add ax, bx ax = ax + bx
5. CS和ip
cs是代码段地址寄存器
ip是指令指针寄存器,存放偏移地址
不能用 mov cs, 1000H mov ip, 0 来修改段寄存器
要用jmp指令如 jmp 2AE3:3 把cs改成2AE3H 把ip改成003H
如果只想改ip用如下指令
jmp 0 或者jmp ax ```
后期学习计划
预计需要三到四天的时间将汇编语言好好回顾一下,期间也对题目进行尝试分析。