1.概念问题
寄存器的作用:信息存储
2.地址的表示方式(不唯一)
段地址+偏移地址
3.为什么不能直接表示物理地址
16位机,地址总线20根
4.寄存器的分类
通用寄存器和专用寄存器
通用:ax,bx,cx,dx;专用:cs,ds;ss,es,ip,,,,,
其中段寄存器:cs,ds;ss,es;
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.这三个指令的机器语言是
执行指令是根据cs,ip来执行的。一个c语言程序,指令的运行也是从某个地址开始运行。那么执行第一条指令时:cs,ip的值应该时固定的。程序的存储应该也是从一个固定的位置开始,与前面的cs,ip值对应。
本章小结:
R命令:查看,修改cpu寄存器的内容
通过修改cs ip的值,执行该内存地址的代码;
E命令:修改内存中的内容
给内存单元写入值,使得其变为数据或者代码。
T命令:执行CSip指向的内存单元。
A命令:以汇编指令的方式向内存中写入指令。
本节涉及的计算,只是把值直接赋值给寄存器,比如mov ax 1, mov bx 1,add ax bx。这种一种比较基础的运算。我们知道计算机的内存是可以存储数据的,如果我想利用内存中的数据进行加和,比如10001和10002两个单元的值加和,那又如何操作呢?