前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >汇编语言从入门到精通-5微机CPU的指令系统2

汇编语言从入门到精通-5微机CPU的指令系统2

作者头像
墨文
发布2020-02-28 14:30:23
7830
发布2020-02-28 14:30:23
举报
文章被收录于专栏:m0w3n

微机CPU的指令系统

5.2.2 标志位操作指令

标志位操作指令是一组对标志位置位、复位、保存和恢复等操作的指令。

1、进位CF操作指令

a、清进位指令CLC(Clear Carry Flag):CF←0

b、置进位指令STC(Set Carry Flag):CF←1

c、进位取反指令CMC(Complement Carry Flag):CF←not CF

2、方向位DF操作指令

a、清方向位指令CLD(Clear Direction Flag):DF←0

b、置方向位指令STD(Set Direction Flag):DF←1

3、中断允许位IF操作指令

a、清中断允许位指令CLI(Clear Interrupt Flag):IF←0     其功能是不允许可屏蔽的外部中断来中断其后程序段的执行。

b、置中断允许位指令STI(Set Interrupt Flag):IF←1     其功能是恢复可屏蔽的外部中断的中断响应功能,通常是与CLI成对使用的。

4、取标志位操作指令

a、LAHF(Load AH from Flags):AH←Flags的低8位

b、SAHF(Store AH in Flags):Flags的低8位←AH

5、标志位堆栈操作指令

a、PUSHF/PUSHFD(Push Flags onto Stack):把16位/32位标志寄存器进栈;

b、POPF/POPFD(Pop Flags off Stack):把16位/32位标志寄存器出栈;

6、逻辑操作指令的小结

  下面是学习标志位指令的控件,浏览者可以运用此类指令,观看标志寄存器的相应变化。

5.2.3 算术运算指令

  算术运算指令是反映CPU计算能力的一组指令,也是编程时经常使用的一组指令。它包括:加、减、乘、除及其相关的辅助指令。

  该组指令的操作数可以是8位、16位和32位(80386+)。当存储单元是该类指令的操作数时,该操作数的寻址方式可以是任意一种存储单元寻址方式。

  1、加法指令

  a、加法指令ADD(ADD Binary Numbers Instruction)

    指令的格式:ADD  Reg/Mem, Reg/Mem/Imm     受影响的标志位:AF、CF、OF、PF、SF和ZF     指令的功能是把源操作数的值加到目的操作数中。

  b、带进位加指令ADC(ADD With Carry Instruction)

    指令的格式:ADC  Reg/Mem, Reg/Mem/Imm     受影响的标志位:AF、CF、OF、PF、SF和ZF     指令的功能是把源操作数和进位标志位CF的值(0/1)一起加到目的操作数中。

  c、加1指令INC(Increment by 1 Instruction)

    指令的格式:INC  Reg/Mem     受影响的标志位:AF、OF、PF、SF和ZF,不影响CF     指令的功能是把操作数的值加1。

  d、交换加指令XADD(Exchange and Add)

    指令的格式:XADD  Reg/Mem, Reg      ;80486+     受影响的标志位:AF、CF、OF、PF、SF和ZF     指令的功能是先交换两个操作数的值,再进行算术“加”法操作。

  例5.3 已知有二个32位数d1和d2(用数据类型DD说明),编写程序片段把d2的值加到d1中。

    解:32位数d1和d2在内存中如下所示。

    方法1:用16位寄存器编写程序         MOV AX, word ptr d1 ;由于d1是双字类型,必须使用强制类型说明符。以下同。         MOV DX, word ptr d1+2 ;(DX,AX)构成一个32位数据         ADD AX, word ptr d2 ;低字相加         ADC DX, word ptr d2+2 ;高字相加。在低字相加时,有可能会产生“进位”         MOV word ptr d1, AX ;低字送给d1的低字         MOV word ptr d1+2, DX ;高字送给d1的高字     方法2:用32位寄存器编写程序         MOV EAX, d1         ADD EAX, d2         MOV d1, EAX

   从上面两段程序不难看出:用32位寄存器来处理32位数据显得简单、明了,而16位微机虽然也能处理32位数据,但做起来就要复杂一些。

  下面是学习和掌握加法类指令的控件,可模拟执行ADD、ADC、INC、XADD、CLC、STC和CMC等指令。用鼠标左键单击寄存器列表框中指定的寄存器,则可修改其值。后面其它控件的有关操作与此相一致,不再说明。从上面两段程序不难看出:用32位寄存器来处理32位数据显得简单、明了,而16位微机虽然也能处理32位数据,但做起来就要复杂一些。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-11-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档