c语言decsub函数,计算机系统基础(三)

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

IA-32指令类型

IA-32的标志寄存器6个条件标志OF (Overflow Flag) 溢出标志位

溢出标志OF用于反映有符号数加减运算所得结果是否溢出。如果运算结果超过当前运算位数所能表示的范围,则称为溢出,OF的值被置为1,否则,OF的值被清为0。

SF (Sign Flag) 符号标志

符号标志SF用来反映运算结果的符号位,它与运算结果的最高位相同。在微机系统中,有符号数采用补码表示法,所以,SF也就反映运算结果的正负号。运算结果为正数时,SF的值为0,否则其值为1。

ZF (Zero Flag) 零标志

零标志ZF用来反映运算结果是否为0。如果运算结果为0,则其值为1,否则其值为0。在判断运算结果是否为0时,可使用此标志位。

CF (Carry Flag) 进位标志

进位标志CF主要用来反映运算是否产生进位或借位。如果运算结果的最高位产生了一个进位或借位,那么,其值为1,否则其值为0。

使用该标志位的情况有:多字(字节)数的加减运算,无符号数的大小比较运算,移位操作,字(字节)之间移位,专门改变CF值的指令等。

AF (Auxiliary Carry Flag) 辅助进位标志

在发生下列情况时,辅助进位标志AF的值被置为1,否则其值为0:在字操作时,发生低字节向高字节进位或借位时;

在字节操作时,发生低4位向高4位进位或借位时。

PF(Parity Flag) 奇偶标志

奇偶标志PF用于反映运算结果中“1”的个数的奇偶性。如果“1”的个数为偶数,则PF的值为1,否则其值为0。3个控制标志DF (Direction Flag) 方向标志(自动变址方向是增还是减)

方向标志DF用来决定在串操作指令执行时有关指针寄存器发生调整的方向。

IF (Interruput Flag) 中断允许标志(仅对外部可屏蔽中断有用)

中断允许标志IF是用来决定CPU是否响应CPU外部的可屏蔽中断发出的中断请求。但不管该标志为何值,CPU都必须响应CPU外部的不可屏蔽中断所发出的中断请求,以及CPU内部产生的中断请求。当IF=1时,CPU可以响应CPU外部的可屏蔽中断发出的中断请求;

当IF=0时,CPU不响应CPU外部的可屏蔽中断发出的中断请求。

TF (Trap Flag) 陷阱标志(是否是单步跟踪状态)

当追踪标志TF被置为1时,CPU进入单步执行方式,即每执行一条指令,产生一个单步中断请求。这种方式主要用于程序的调试。

59eb51b84b45f.png

IA-32 指令系统概述IA-32是典型的CISC(复杂指令集计算机)风格ISA8个通用寄存器

2个专用寄存器:EIP(PC) EIP寄存器主要用于存放当前代码段即将被执行的下一条指令的偏移,但其本质上并不能直接被指令直接访问。

标志寄存器EFLAGS

6个段寄存器(间接给出段基址)

存储器地址空间为4GB,按字节编址,小端方式

寻址方式立即

寄存器

存储器 段基址+有效地址(位移量)

59eb591312400.png

[B]——基址寄存器编号 [I]——变址寄存器编号 s——比例因子 A——位移量 这些信息可以排列组合相对寻址(指令)

变长指令字,变长操作码汇编语言格式Inter格式汇编

AT&T格式汇编

IA-32指令类型

传送指令通用数据传送指令MOV:一般传送

==注意: MOV指令不能在两个存储器之间进行数据直接传送。 MOV指令不能在两个段寄存器之间进行数据直接传送。==

MOVS:符号扩展传送

MOVZ: 零扩展传送

XCHG: 数据交换

PUSH/POP: 入栈/出栈地址传送指令LEA 加载有效地址输入输出指令IN和OUT: I/O端口与寄存器之间的交换标志传送指令PUSHF、POPF: 将EFLAG压栈,将栈顶内容送入EFLAG

定点算术运算指令加减(影响标志,不区分无/带符号)ADD SUB增1/减1运算(影响除CF以外的标志,不区分无/带符号)INC DEC取负运算(影响标志,若对0取负,则结果为0且CF清0,否则CF置1)NEG比较运算(做减法得到标志,不区分无/带符号)CMP乘/除运算(不影响标志,区分无/带符号)MUL/IMUL 无符号乘/带符号乘

DIV/IDIV 无符号除/带符号除

59eb7f2e9412e.png

按位运算逻辑运算NOT 非

AND 与

OR 或

XOR 异或

TEST 做“与”测试,仅影响标志移位运算 (左/右移时,最高/最低位送CF)SHL/SHR:逻辑左/右移

SAL/SAR: 算术左/右移 左移判溢出,右移高位补符

ROL/ROR 循环左/右移

RCL/RCR 带进位循环左/右移

9cb9646a5d19e045249952afc902aedf.png

控制转移指令无条件转移指令JMP DST 无条件转移到目标指令DST处执行条件转移Jcc DST cc为条件码,根据标志(条件码)判断是否满足条件,若满足,则转移道目标指DST处执行,否则顺序执行条件设置SETcc DST 按条件码cc判断的结果保存到DST(是一个8为寄存器)调用和返回指令(用于过程调用)中断指令CALL DST 返回地址RA入栈,转DST处执行

RET 从栈中取出返回地址RA,转到RA处执行

adddf582f7db8c71625b6c39b937fed8.png

x87浮点处理指令

92f8f80b8d0721fa11268cbbe7aaf05f.png

C语言语句的机器级表示

c79924bc0b9b6459deeec7f5e8b882c8.png

过程(函数)的结构一个C过程的大致结构如下准备阶段形成帧底:push指令和mov指令

生成栈帧(如果需要的话):sub指令或and指令

保存现场(如果有被调用者保存寄存器): mov指令过程(函数)体分配局部变量空间,并赋值

具体处理逻辑,如果遇到函数调用时准备参数: 将实参送栈帧入口参数处

CLLL指令: 保存返回地址并转被调用函数

在EAX中准备返回参数结束阶段退栈: leave指令或pop指令

选择结构

d261029f3a2911af33320973fc6e52c5.png

循环结构

f1afcec6ddd6047b09151a0747b0766e.png

==为提高程序性能,能用非递归方式执行最好用非递归方式。==

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值