深入理解计算机系统(3)——程序的机器级表示

一、以8086为例的寄存器(8个通用寄存器、一个指令指针寄存器、一个标志寄存器、4个段寄存器)
1.通用寄存器(包含数据、变址、指针寄存器):通用指都能作为一般的操作数、结果、地址的存储;通用寄存器有8个,除了通用作用之外还有自己单独的用处;
数据寄存器(4个)
(1)AX(accumulator register):累加器、(编程时)使用频率最高,用于算术(加、减、乘、除)、逻辑运算以及与外设传送信息(如从键盘读只能读到此处,不能读错地方)等;比如(以下为Intel编程)ADD AX 100;或用它读取当前键盘按键的值:AL 60h(端口地址);这里一定用累加器AL,因为只有AL与外援设备有通路;
(2)BX(baseaddress register):基址寄存器,常用作存放存储器地址;结构体、数组首地址(再加上偏移就可以表示其他成员或元素了);
(3)CX(counter register):计数器,作为循环和串操作等指令中的隐含计数器;比如C中的for(i= …)这里的i就用CX存;还有数组、字符串操作时也用CX;当用LOOP时隐含用CX表示;
(4)DX(data register):数据寄存器,常用来存放双子长数据的高16位,或存放外设端口地址;如乘法时乘数一定在AX中,乘积则是在DX和AX共同组成的32位数;除法也是一样;
注:以上X是register的缩写,这里没有用R表示
***变址寄存器(2个)***用于存储器寻址时提供地址,用于串(数组)操作指令;
(5)SI:源变址寄存器;
(6)DI:目的变址寄存器;
怎么用呢?如有两个数组,将一个拷贝到另一个:则数组一起始地址存在SI中,数组二起始地址存在DI中;如果要拷贝,还要记得将CX赋值为数组元素的个数;
指针寄存器(2个)
(7)SP(stack pointer):堆栈指针寄存器,指示栈顶的偏移地址;
(8)BP(base pointer):基址指针寄存器,表示数据在堆栈段中的基地址;
局部变量是存放到堆栈中的,参数传递也是放入堆栈中的,堆栈是内存中的连续区域;操作系统对它申请时,就找一连续区域,并将堆栈首地址给SS(堆栈段寄存器),并通过SP执行当前堆栈的栈底;当操作系统把代码段加载进去时也把ESP加载进去指向栈底;操作时(压栈PUSH、弹栈POP),ESP就做出相应移动。
注:尽量不要对堆栈寄存器进行加减,一般由编译器按规则做,原因显而易见;
2.指令指针寄存器
IP与CS一起指出当前程序执行的位置;这是一个专用寄存器,编程时不能直接修改它,但是可以通过指令间接修改,比如用call指令,jump指令等跳走了,则IP变了;如果直接修改,CPU会报错;
3.标志寄存器
反应程序执行的结果或控制下面指令执行的方式如允不允许中断、数组正向还是反向等等;这些通过标志寄存器不同的位表示;,这些标志位分两类:6个状态标志位(表示当前指令执行结果的状态信息)以及3个控制标志位(控制下面指令执行的方式);
(1)状态标志位
CF:进位标志位,当前加减运算时是否往前有进位;如果有进位则无符号运算结果溢出;
ZF:零标志位,结果是0,ZF位是1;
SF:符号标志位,最高位为1则SF=1;
PF:奇偶标志位,最低字节中1的个数为奇数PF=0;
OF:溢出标志位,有符号数运算结果是否有溢出;当加数、被加数、和的最高位都相等则OF=0;当加数、被加数最高位相等但与结果最高位不等,则OF=1;当被加数与加数符号位不等时,OF=0;
(溢出表示有符号数运算结果超出范围,进位表示无符号数运算结果超出范围)
辅助进位标志位;
注:CPU不知道是有符号数还是无符号数,它就算完将以上标志位全都设置;
(2)控制标志位
方向标志位DF:用汇编语言可以设置其值,控制数组操作的方向;
中断允许标志位IF:是否允许外源设备产生中断请求暂时终止CPU运行,当IF=1时,那按鼠标按键盘CPU可以响应,否则不行;最简单的模拟机器死机,就可以用CLI(不允许外源设备中断),STI(允许);(问:怎么用?)
陷阱标志位TF(Trag Flag):开发VS等调试软件才会用到;
4.段寄存器
CS(代码段)、SS(堆栈段)、DS(数据段)、ES(附加段),均为16位的寄存器;
二、计算机系统的指令集体系结构
在这里插入图片描述
这里不做具体解释;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ape:hello code world

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值