注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

熊猫正正的博客

熊猫正正的天空

 
 
 

日志

 
 

寄存器(一)  

2012-05-06 17:59:28|  分类: 8086饭客网汇编学 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

需要掌握的内容:

1. 了解通用寄存器

2. 了解段寄存器

3. 了解控制寄存器

4. 学会使用debug

1. 通用寄存器

通用寄存器(General Register)共有8个,分为两类。

1) 数据寄存器

数据寄存器包括:AXAccumulator)、BXBase)、CXCounter)、DXData四个通用寄存器。

数据寄存器可以以字节(8位)为单位,也可以以字(16位)为单位进行操作。

AXAHAL作为累加器,在算术、逻辑运算中,也在某些指令中隐含使用。

BXBHBL经常用作基址寄存器。

CXCHCL在循环指令和串操作指令中隐含作为计数器用。

DXDHDL经常用在乘法除法存放高位字,存放I/O端口地址。

例:AX01001110 00100000B 4E20H

AH01001110B 4EH

AL00100000B 20H

2) 指针寄存器及变址寄存器

指针寄存器包括SPBP,变址寄存器包括SIDI这四个寄存器不能分为字节,只能以字为单位使用。

SPStack Pointer为堆栈指针寄存器,用来指示栈顶的偏移地址,确定堆栈段中的某一存储单元的地址。

BPBase Pointer为基址指针寄存器,BP与段寄存器SS联用,可作为堆栈区中的一个基地址,以相对方式访问堆栈中的存储单元。

SISource Index为源变址寄存器。SI与段寄存器DS联用,用来确定数据段中某一存储单元的地址。

DIDestination Index为目的变址寄存器。DI可与DSES联用,用来确定数据段或附加段中某一存储单元的地址。

2. 段寄存器

CSCode Segment为代码段寄存器,只能存放程序段首地址。

DSData Segment为数据段寄存器,只能存放数据段首地址。

ESExtra Segment为附加段寄存器,只能存放数据段首地址。

SSStack Segment为堆栈段寄存器,只能存放堆栈段首地址。

主存划分成多少个存储段是任意的。但是把由段寄存器CSDSESSS指明的段称为当前段,在程序运行的任何时刻,主存最多只能有4个当前段。

3. 控制寄存器

控制寄存器有两个,即指令指针IP和标志寄存器FR

1) IPInstruction Point)指令指针

IP是指令地址指针,用以指示程序运行至何处。程序运行时,IP的值自动修改,但始终存放即将执行指令的段内偏移地址。

IP不能用指令直接访问,即不能用指令去取出IP的值或者给IP设定值。

2) FRFlags Register)标志寄存器

标志寄存器FR体现了处理器CPU的当前状态和某些控制。FR共有9个标志位。其中6个(CFPFAFZFSFOF)为标志位,反映算术或逻辑运指令执行后的某些状态;另外3个标志位(TFIFDF)为控制标志位,用以体现处理器CPU的控制。PSW机器状态字。

15

14

13

12

11

10

9

8

7

6

5

4

3

2

1

0

OF

DF

IF

TF

SF

ZF

AF

PF

CF

OF(Overflow Flag)溢出位:当运算的结果超过字长所能表示的范围时,产生“溢出”。此时,OF1记为OVOverflow)。否则,OF0,记为NVNon Overflow),溢出产生的原因是由于同号数相加或异号数相减

CFCarry Flag)进位位:当进行算术运算时,如最高位(对字操作是第15位,对字节是第7位)产生进位(加类运算)或借位(减类运算),则CF1,记CYCarry)否则清0记为NVNon-Carry)。在移动位类指令中CF用以保存从最高位(左移时)或最低位(右移时)移出的位。

溢出与进位是两个不同的概念:进位产生的含义是无符号数的运算结果超过8位或16位。而溢出产生的含义是有符号数的运算结果超过7位或15位,数值占据了符号位。

SFSign Flag)符号位:当运算结果为负时,SF1,记为NGNegative)为正时清0记为PLPlus)。

ZFZero Flag)零位:若运算结果各位全为0时,则ZF1,记为ZRZero)。否则清0记为NZNon Zero)。

AFAuxiliary Carry Flag)辅助进位位:算术运算时,若低字节中低4位(即第3位)产生进位(加法)或借位(减法)时,则AF1记为ACAuxiliary Carry)。否则清0记为NANon-Auxiliary Carry)。AF只反映运算结果的低4位向高位进位,它是十进制调整的依据。

PFParity Flag)奇偶位:若操作结果低8位中有偶数个1时,则PF置为1,记为PEParity Even)。否则PF0记为POParity Odd)。

TFTrace Flag)单步跟踪位:当设定TF=1时,CPU每执行完一条指令将产生一个单步中断,用作调试程序的手段。进入单步中断处理程序时TF0.

DFDirections Flag)方向位:DF规定变址寄存器SIDI中地址增减。当设定DF=1时记为DNDown),进行串操作时,SIDI中的地址自动递减。当DF=0时记为UPUP),进行串操作时,SIDI中的地址自动递增。

IFInterrupt-enable Flag)中断允许位:当设定IF=1时,记为EIEnable Interrupt),CPU将响应可屏蔽中断源的中断请求。设定IF=0时,记为DIDisenable Interrupt),CPU则不理睬来自可屏蔽中断请求。

4. Debug的使用

DebugDOSwindows都提供的调试工具。使用它,可以查看CPU各种寄存器中的内容、内存的情况和机器级跟踪程序的运行。

Debug的功能:

R命令:查看、改变CPU寄存器的内容。

如:-r -r ax -r ip -r cs

D命令:查看内存中的内容。

-d -d 段地址:偏移地址 -d 段地址:起始偏移地址 结尾偏移地址

-d 0CA2:0100 -d 1000:0 9

E命令:修改内存中的内容。

-e 起始地址 数据 数据 数据…… -e起始地址 数据(如果数据为字符则加‘’)

-e 1000:0 0 1 2 3 4 5 6 7 8 9 -e 1000:0 1 a 2 b 3 ‘c 

U命令:将内容中的机器指令翻译成汇编指令。

-u -u 段地址:偏移地址

T命令:执行一条机器指令。

-t

A命令:以汇编指令格式在内存中写入一条机器指令。

-a -a段地址:偏移地址

g命令:执行

  评论这张
 
阅读(77)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017