汇编语言(王爽著)第二章 寄存器

1.概念问题

寄存器的作用:信息存储

2.地址的表示方式(不唯一)

段地址+偏移地址

汇编语言(王爽著)第二章 寄存器_第1张图片

3.为什么不能直接表示物理地址

16位机,地址总线20根

4.寄存器的分类

通用寄存器和专用寄存器

通用:ax,bx,cx,dx;专用:cs,ds;ss,es,ip,,,,,

其中段寄存器:cs,ds;ss,es;

汇编语言(王爽著)第二章 寄存器_第2张图片

5.修改cs,ip的指令

首先思考为什么修改?

汇编语言是按照顺序进行执行的,指令的地址也是不断递增的。如果我想循环执行某条指令,怎么办?就把当前要读取的指令地址转到上面执行过的某个地址。

如何修改呢?用jmp指令。比如修改cs,ip 的值,jmp 2ae3:3  

如果单独改ip的值,可以通过jmp ax   

6.执行指令

如何执行指令?

输入 t即可。

如何执行指定地址处的指令?

需要对cs,ip进行修改!

如何进行修改?

r cs

r ip 

此处修改与5.修改cs,ip的指令有何区别??

一个是debug模式下的修改,一个是在程序运行过程中的修改。

6.代码段

为什么需要代码段这个概念?

用处:存放代码

定义:长度《=64kB大小的一组代码,存在一组地址连续,起始地址为16的倍数的内存单元中。

为什么《=64KB?  偏移地址就是16根线来表示,最大就是64K。每个地址对应一个字节,所以64KB空间。

7.学完这一节,你有哪些新的认识?

a计算机如何执行内存中的指令?是通过cs,ip寄存器中的值。

为什么计算机能总不停息的运行指令?因为ip会自动加,使得顺序从内存中读出指令来。

任何复杂的运算,都可以被分解为一系列二值运算,所以执行a+b+c,先是把a,b放到寄存器中,求出a+b放在寄存器中,在把c放到寄存器中,求出a+b+c。

一条指令的大小由什么决定? 

比如 mov ax,0123     mov bx,0003  mov ax,bx.这三个指令的机器语言是  

汇编语言(王爽著)第二章 寄存器_第3张图片

执行指令是根据cs,ip来执行的。一个c语言程序,指令的运行也是从某个地址开始运行。那么执行第一条指令时:cs,ip的值应该时固定的。程序的存储应该也是从一个固定的位置开始,与前面的cs,ip值对应。

 

本节涉及的计算,只是把值直接赋值给寄存器,比如mov ax 1, mov bx 1,add ax bx。这种一种比较基础的运算。我们知道计算机的硬盘是可以存储数据的,如果我想利用硬盘中的数据进行加和,比如10001和10002两个单元的值加和,那又如何操作呢?

 

你可能感兴趣的:(汇编语言)