复习汇编语言

Hello world,hello blog!

Posted by 吴柚 on April 4, 2019

汇编语言

(1)学习背景

由于第三阶段的任务需要对程序进行反汇编并进行分析,因此需要重新将汇编语言的基础知识复习一遍。

(2)学习内容

  1. 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中。

在写汇编指令或一个寄存器的名称时不区分大小写。

在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的。
  1. 物理地址=段地址*16+偏移地址

本质:CPU访问内存时,用一个基础地址(段地址*16)和一个相对于基础地址的偏移地址相加,给出内存单元的物理地址。

段地址*16必然是16的倍数,因此一个段的起始地址也一定是16的倍数;偏移地址为16位,16位地址的寻址能力为64KB,所以一个段的长度最大为64KB.(内存并没有分段,段的划分来自于CPU)

  1. 通用寄存器 ``` 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  ```

后期学习计划

预计需要三到四天的时间将汇编语言好好回顾一下,期间也对题目进行尝试分析。