好贷网好贷款

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

发布时间:2016-12-4 3:54:09 编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"汇编语言(王爽)第二章寄存器",主要涉及到汇编语言(王爽)第二章寄存器方面的内容,对于汇编语言(王爽)第二章寄存器感兴趣的同学可以参考一下。

一个典型的CPU由运算器、控制器、寄存器等部件组成,部件之间靠内部总线连接。运算器进行信息处理,寄存器进行信息存储;控制器控制各部件进行工作,内部总线连接各部件以进行数据的传输。不同的CPU寄存器的个数和结构都是不尽相同的。 2.1通用寄存器 以8086为例,其内部所有寄存器都是16位的,即两个字节。其中AX、BX、CX、DX这4个通常存放一般性的数据,称为通用寄存器。AX的低8位(0~7位)构成一个8位寄存器AL,高8位(8~15位)构成一个8位寄存器AH,其他也类似。 若:AX=8000H;对于指令add ax,8888H后ax的值是多少? 8000H+8888H=10888H,但AX只能保存16位数,因此ax=0888H,最高位的“1”会被AX舍弃,但CPU并不舍弃这个“1”。 若:ax=0080H,对于指令add al,88H后ax的值是多少? 80H+88H=108H,但al只能保存8位,因此al=08H,最高位的“1”被al舍弃,也不会被ah接收,因此ax=0008H,同样CPU不舍弃这个“1”。 上述两例中溢出产生的“1”都会被存放在一个特定位置,后面会学到。 检测点2.1 (1)写出每条汇编指令执行后相关寄存器的值: mov ax,62627   ax=f4a3H mov ah,31H      ax=31a3H mov al,23H   ax=3123H add ax,ax     ax=6246H mov bx,826cH  bx=826cH mov cx,ax    cx=6246H mov ax,bx   ax=826cH add ax,bx        ax=04d8H mov al,bh     ax=0482H mov ah,bl        ax=6c82H add ah,ah        ax=d882H add al,6       ax=d888H add al,al       ax=d810H mov ax,cx        ax=6246H (2)只能使用目前学过的汇编指令,最多用4条指令,编程计算2的4次方 mov ax,2 add ax,ax add ax,ax add ax,ax 2.6  8086CPU给出物理地址的方法:8086有20根地址总线,寻址能力为1MB;而8086又是16位结构,在内部一次性处理的位数为16位,如果在其内部不进行处理,那只能发出最多16位的地址,即寻址能力只有64KB;为使其外部地址总线20根能都被用到,则须在其内部进行处理。这种处理方式就是用段地址和偏移地址组合的方式组成20位地址:段地址和偏移地址均为16位,通过加法运算器的运算,具体为段地址*16+偏移地址,得到20位地址数据后送入输入输出电路,再从8086内部通过输入输出电路将这20位地址送上地址总线。 2.8  段的概念:对于物理上的内存而言,并没有分段的概念。只是对于CPU来说,通过段地址+偏移地址的方式进行寻址,“段”仅仅是一个逻辑上的概念,并无特定之说。对于同一个物理内存地址来说,它的段地址也并不是固定的,比如物理地址10086H,可以设其段地址为1000H,那么对应的偏移地址就是0086H;若设其段地址为1008H,那它偏移地址就是0006H。 检测点2.2 (1)给定段地址0001H,仅仅通过变换偏移地址寻址,CPU的寻址范围是(00010H)~(1000FH)。 (2)有一数据存放在内存20000H中,现在给定段地址为SA,若想用偏移地址寻到此单元,则SA应满足的条件为:最小:1001H;最大:2000H。 2.9段寄存器:8086有4个段寄存器,当CPU需要访问内存单元时,由这4个寄存器存放段地址。 2.10CS和IP:在8086PC机中,任意时候,CPU都讲从CS:IP指向的内存单元开始读第一条指令并执行。8086CPU工作过程可以简要描述如下: (1)从CS:IP指向的内存单元取出指令,将指令传送到指令缓冲器; (2)IP更新为原IP+读取指令长度; (3)执行(1)指令缓冲器中的指令。转到(1)。 2.11通过JMP指令修改CS和IP的值;如jmp 2168:8;执行后CS=2168H,IP=0008H。8086指令集中不提供通过mov来改变CS、IP的值。若仅想改变IP的值,则可通过“jmp 寄存器”指令完成,如:jmp ax;若此时ax=1008H,则指令执行后ip=1008H; 检测点2.3 下面的3条指令执行后,CPU几次修改IP?在何时?最后IP中的值是多少? mov ax,bx        sub ax,ax jmp ax 答:指令执行前CS:IP指向第一条指令存放的内存单元首地址,第一条先读取进入指令缓冲器,IP第一次改变,同时指向第二条指令;第一条指令执行,读取第二条指令进入指令缓冲器,IP第二次改变,同时指向第三条指令;第二条指令执行,读取第三条指令进入指令缓冲器,IP第三次改变,同时指向第三条指令在内存中的后续内存单元;第三条指令执行,IP中的值变为ax中存放的值,这是IP第四次改变。 实验1: 1、关于DEBUG的使用和命令 (1)r命令:可查看CPU中各寄存器的值,并显示当前CS:IP指向的指令。 (2)"r  寄存器名称“命令:修改该寄存器的值。 (3)d命令:"d  段地址:偏移地址“查看以该地址起始的128个内存单元的值,并在右侧显示对应ASCII的显示符。如:d 1000:0则查看从10000H到1007fH;如d 1000:2则查看从10002H到10081H。 若要查看内存中指定几个连续单元的值,则用"d 段地址:起始偏移地址  终止偏移地址”;如d 1000:2 8查看的是10002H到10008H这7个内存单元的值。 (4)e命令:修改某段内存单元的值。”e 段地址:偏移地址  修改值1  修改值2  。。。“;如”e 1000:2 0 1 2 3 4"则将地址10002H到10006H中的值分别修改成:0、1、2、3、4。 (5)u命令:“u 段地址:偏移地址”查看以该地址起始的指令序列。 (6)t命令:单步执行当前CS:IP指向的指令。            

上一篇:汇编语言(王爽)第一章基础知识
下一篇:C++11 理解 (七) 之 类型推导

相关文章

相关评论