汇编语言程序设计基础知识二

五、顺序结构

1、程序设计的步骤

1、分析问题

2、建立数据模型

3、设计算法

4、编制程序

5、上机调试

2、流程图的应用

3、程序的基本控制结构

1、顺序结构:程序顺序执行,不发生跳转

2、分支结构:程序在执行过程中发生跳转

3、循环结构:程序重复执行多次

4、数据传送指令

对于双操作数的要求:

(以MOV指令为例)

MOV 寄存器,立即数

MOV 寄存器,寄存器

MOV 寄存器,内存单元

MOV 内存单元,寄存器

MOV 内存单元,立即数

不能两个操作数都是内存单元

CS不能用作目标操作数

IP寄存器不能做操作数

用BX、SI、DI间接寻址时,默认的段寄存器为DS

立即数不能做目标操作数

立即数不能直接送入段寄存器

源操作数与目标操作数数据类型必须相同

段寄存器之间不能互相传送

dest:目标操作数

src:源操作数

格式说明对标志位的影响
MOVMOV dest,src将源操作数(字节或字)传送到目标操作数中没有
PUSHPUSH src堆栈指针先减2,再将源操作数存入,(必须是字数据)(src必须是字类型)没有
POPPOP dest先将栈顶中存放的字数据存入dest中,再将堆栈指针加2 (dest必须是字类型)没有
XCHGXCHG dest,src交换(同一条指令中,数据类型必须一致)没有
XLATXLAT换码(查表)指令,BX和AL内容之和指出的内存字节单元的内容放到AL中没有
LEALEA dest,src取有效地址,将源操作数地址的偏移量,即有效地址传送到dest中(dest可以是任一16位通用寄存器,但不能是IP和段寄存器)没有
LDSLDS dest,src加载数据段寄存器,将src指出的连续两个字的内容,高位字为段地址送入DS,低位字为偏移量送入dest没有
LESLES dest,src加载附加段寄存器,将src指出的连续两个字的内容,高位字为段地址送入ES,低位字为偏移量送入dest没有

5、算术运算指令

格式说明对标志位的影响
ADDADD dest,src加法,结果存入目标操作数中CF、OF、AF、PF、SF、ZF
ADCADC dest,src带进位的加法,结果存入目标操作数中,dest = dest + src + CF,主要用于多字节相加CF、OF、AF、PF、SF、ZF
INCINC dest增一指令
SUBSUB dest,src减法:dest = dest - srcCF、OF、AF、PF、SF、ZF
SBBSBB dest,src带进位的减法,dest = dest - src - CF,主要用于多字节相减CF、OF、AF、PF、SF、ZF
DECDEC dest自减不影响CF,其与都影响
NEGNEG dest取补指令CF、OF、AF、PF、SF、ZF
CMPCMP dest,src从目标操作数中减去源操作数,但结果不储存,只保存对标志位的影响CF、OF、AF、PF、SF、ZF

6、逻辑操作指令

格式说明对标志位的影响
NOTNOT dest对每一位求反没有
ANDAND dest,src逻辑与,一个数与自己进行逻辑与,可以用来影响标志位;可以借助某个指定的操作数来将另一个操作数中的某个位清零CF、OF、AF、PF、SF、ZF
OROR dest,src逻辑或,可以用来是操作数中的某些位置位CF、OF、AF、PF、SF、ZF
XORXOR dest,src异或,可用来使操作数中的某些位取反CF、OF、AF、PF、SF、ZF
TESTTEST dest,src将两个操作数进行逻辑与,但不改变两个操作数的原始值,并将CF和OF置零CF、OF、AF、PF、SF、ZF

7、移位操作指令

逻辑移位(SHL、SHR)

逻辑移位指令 dest,cnt

cnt可以为1,但如果大于1,则需要存放到CL中,再进行移位

执行移位指令时,一位一移,过程中源操作数的最高位发生过变化,OF为1,否则为0

左移时,最高位送入CF,右移时,最低位送入CF

不带进位循环移位(EOL、ROR)

带进位循环移位(RCL、RCR)

8、状态标志位操作指令

清0置1取反
CFCLCSTCCMC
DFCLDSTD
IFCLISTI

9、简单的I/O功能调用

六、分支结构程序

1、转移指令

1.1、无条件转移指令

JMP targ

不影响标志位,可以转到内存中存放的任何程序段,targ可以是直接标号、寄存器间接寻址、存储器间接寻址

1.2、条件转移指令

根据执行该指令前CPU中状态标志位的状态决定程序执行的流程

在比较玩两个数的大小后根据比较的结果决定是否进行转移,实际是测试不同的标志位

1.2.1、单条件转移指令
条件转移指令
CF = 1JC
CF = 0JNC
ZF = 1JZ/JE
ZF = 0JNZ/JNE
SF = 1JS
SF = 0JNS
OF = 1JO
OF = 0JNO
PF = 1JP/JPE
PF = 0JNP/JPO
1.2.2、带符号数和无符号数的条件转移指令

条件:使用前用过CMP、SUB、SBB指令

无符号数标志位带符号数标志位
A < BJBCF=1JLSF xor OF = 1
A <= BJBECF=1||ZF=1JLE((SF xor OF)|| ZF)=1
A > BJACF=0||ZF=0JG((SF xor OF)||ZF)=0
A >= BJAECF=0JGESF xor OF = 0
A = BJEZF=1JEZF=1
A != BJNEZF=1JNEZF=1
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

黑夜蔓蔓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值