【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章

第二章 寄存器

通用寄存器

* 8086CPU的所有寄存器都是16位的,可以存放两个子节,
	AX,BX,CX,DX这4个寄存器通常用来存放一般性的数据,称为通用寄存器
* 一个16位寄存器可以储存一个16位的数据,储存数据最大值为2^16-1(从0到2^16-1一共2^16个数据)
* 通用寄存器都可以分为两个可独立使用的8位寄存器来用:AX -> AH AL 储存最大值2^8-1

字在寄存器中的存储

* 字:记为word,一个字由两个子节组成,前一个称为高位字节,后一个称为低位字节

几条汇编指令(不区分大小写)

* mov ax,18 将18送入寄存器AX
* add ax,8  将寄存器AX中的数值加上8
* mov ax,bx 将寄存器BX中的数据送入寄存器AX中
* add ax,bx 将AX和BX中的数值相加,结果存在AX中	
* 在进行数据传送或运算时,要注意指令的两个操作对象的位数应当是一致的

检测点2.1

(1)解答:‭F4A3‬H
	     31A3H
		 3123H
	 	 6246H
		 826CH
	 	 6246H
	 	 826CH
		 04D8H
	 	 0482H
	 	 6C82H
	 	 D882H
	 	 D888H
	 	 B010H
	 	 6246H
(2)解答:   mov ax,2
			 add ax,ax
			 add ax,ax
			 add ax,ax

物理地址

所有内存单元构成的储存空间是一个一维的线性空间,每一个内存单元在这个空间都有
唯一的地址,我们将这个唯一的地址称为物理地址

16位结构的CPU

运算器一次最多可以处理16位的数据
寄存器的最大宽度为16位
寄存器和运算器之间的通路为16位

8086CPU给出物理地址的方法

采用一种在内部用两个16位地址合成的方法来形成一个20位的物理地址
当8086CPU读写内存时:
	CPU中的相关部件提供两个16位的地址,一个位段地址,一个位偏移地址
	两个地址通过内部总线送入地址加法器,合成为一个20位的物理地址
	通过内部总线,将20位物理地址送入‘输入输出控制电路’
	输入输出控制电路将20位物理地址送上地址总线,传送到存储器
地址加法器采用物理地址 = 段地址 x 16 + 偏移地址的方法用段地址和偏移地址合成
	段地址x16也成为左移4位(位指二进制位)

“段地址x16 + 偏移地址 = 物理地址”的本质含义

CPU在访问内存时,用一个基础地址(段地址x16)和一个相对于基础地址的偏移地址
相加,给出内存单元的物理地址

段的概念

内存没有分段,段的划分来源自于CPU,地址10000H~100FFH组成一个段,基础地址为
10000H,段地址为1000H,大小为100H(100FF - 10000 - 0 + 1 = 100H)
基础地址必然是16的倍数,所以一个段的起始地址也一定是16的倍数
偏移地址为16位,16位寻址能力为2^16b=64KB,所以一个短的最大长度为64KB

检测点2.2

(1)解答:基础地址为0001Hx16 = 00010H 偏移地址为0000H 则为 00010H
								   偏移地址为64KB 则为 1000FH
(2)解答:偏移地址为:0000H 则SAx16 = 20000H SA = 2000H
		 偏移地址为:64KB 则SAx16+64KB = 20000H SA = 1000H(答案1001H)
		 当SA<1000H或者>2000H

段寄存器

储存段地址的,8086有四个段寄存器:CS DS SS ES 

CS和IP

8086最关键的寄存器,只是了CPU当前要读取指令的地址
CS为代码段寄存器,IP为指令指针寄存器,
CS内容为M,IP内容为N,8086CPU从内存Mx16+N单元开始,读取一条指令并执行

下图展示了8086CPU读取、执行的工作原理

【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第1张图片
工作过程可以简要描述如下:
(1)从CS:IP指向的内存单元读取指令,读取的指令进入指令缓冲器;
(2)IP= IP + 所读取指令的长度,从而指向下一条指令;
(3)执行指令,转到步骤(1),重复过程

修改CS、IP的指令

jmp指令:   
jmp段地址:偏移地址:用指令中给出的段地址修改CS,偏移地址修改IP  
	jmp 2AE3:3,执行后:CS=2AE3H,IP=0003H,CPU将从2AE33H处读取指令。  
	jmp 3:0B16,执行后:CS=0003H,IP=0B16,CPU将从00B45H处读取指令。  
jmp某一合法寄存器:用寄存器中的值修改IP,类似于mov IP,ax
	jmp ax,执行指令前:ax=1000H,CS=2000H,IP=0003H  
			执行指令后:ax=1000H,CS=2000H,IP=1000H  

CPU工作分为两个步骤:读取和执行。读取指令后,IP的值马上会增加,然后再根据内存中的机器码执行相应的操作。

检测点2.3

解答:  
读取mov ax,bx后,IP修改一次然后执行指令  
读取sub ax,ax后,IP修改一次然后执行指令  
读取jmp ax后,IP修改一次  
执行jmp ax后,IP修改一次  
所以总共四次

实验一 查看CPU和内存,使用机器指令和汇编指令编程

Debug的使用:

Debug是DOS、Windows都提供的实模式程序的调试工具,可以查看CPU各种寄存器中的内容、内存的情况和在机器码级跟踪程序的运行。

Debug的功能:

【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第2张图片

进入Debug:

基于Win10系统:(以下为本人的操作)
首先下载DOSBox,然后把debug.exe放到D盘根目录下
打开DOSBox.exe,然后步骤如下:
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第3张图片
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第4张图片
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第5张图片
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第6张图片
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第7张图片
即进入debug模式,可以开始测试debug各项功能。

实验任务:

【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第8张图片
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第9张图片
剩余内容即用-t执行指令。
(2)将下面3条指令写入从2000:0开始的内存单元中,利用这3条指令计算2的8次方。
mov ax,1
add ax,ax
jmp 2000:0003
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第10张图片
(3)查看内存中的内容。
PC机主板上的ROM中写着一个生产日期,在内存fff00H~fffffh的某几个单元中,请找出这个生产日期并试图改变它。
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第11张图片
生产日期无法随意改变
(4)向内存从B8100H开始的单元中填写数据,如:
-e B8100:0000 01 01 02 02 03 03 04 04
【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章_第12张图片

你可能感兴趣的:(【汇编语言(汇编语言第三版 王爽著)】--知识归纳--第二章)