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

五、顺序结构

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:源操作数

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

5、算术运算指令

格式 说明 对标志位的影响
ADD ADD dest,src 加法,结果存入目标操作数中 CF、OF、AF、PF、SF、ZF
ADC ADC dest,src 带进位的加法,结果存入目标操作数中,dest = dest + src + CF,主要用于多字节相加 CF、OF、AF、PF、SF、ZF
INC INC dest 增一指令
SUB SUB dest,src 减法:dest = dest - src CF、OF、AF、PF、SF、ZF
SBB SBB dest,src 带进位的减法,dest = dest - src - CF,主要用于多字节相减 CF、OF、AF、PF、SF、ZF
DEC DEC dest 自减 不影响CF,其与都影响
NEG NEG dest 取补指令 CF、OF、AF、PF、SF、ZF
CMP CMP dest,src 从目标操作数中减去源操作数,但结果不储存,只保存对标志位的影响 CF、OF、AF、PF、SF、ZF

6、逻辑操作指令

格式 说明 对标志位的影响
NOT NOT dest 对每一位求反 没有
AND AND dest,src 逻辑与,一个数与自己进行逻辑与,可以用来影响标志位;可以借助某个指定的操作数来将另一个操作数中的某个位清零 CF、OF、AF、PF、SF、ZF
OR OR dest,src 逻辑或,可以用来是操作数中的某些位置位 CF、OF、AF、PF、SF、ZF
XOR XOR dest,src 异或,可用来使操作数中的某些位取反 CF、OF、AF、PF、SF、ZF
TEST TEST 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 取反
CF CLC STC CMC
DF CLD STD
IF CLI STI

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

六、分支结构程序

1、转移指令

1.1、无条件转移指令

JMP targ

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

1.2、条件转移指令

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

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

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

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

无符号数 标志位 带符号数 标志位
A < B JB CF=1 JL SF xor OF = 1
A <= B JBE CF=1||ZF=1 JLE ((SF xor OF)|| ZF)=1
A > B JA CF=0||ZF=0 JG ((SF xor OF)||ZF)=0
A >= B JAE CF=0 JGE SF xor OF = 0
A = B JE ZF=1 JE ZF=1
A != B JNE ZF=1 JNE ZF=1

你可能感兴趣的:(汇编语言,嵌入式,8086)