那些年,我们一起学过的汇编----之顺序、分支与循环程序设计
来源:互联网 发布:村淘宝网 编辑:程序博客网 时间:2024/05/16 14:03
出自于:http://yiluohuanghun.blog.51cto.com/3407300/940198
一个算法用程序设计语言的语句有序的组合在一起加以描述,其组合方式称为程序的控制结构或简称为程序结构
。程序的基本结构有顺序结构,分支结构和循环结构。
一:顺序结构
顺序结构是最简单的,也是最基本的程序结构形式,这种结构形式的程序的最大特点点就是程序运行时从开始到结尾一直是按照编写指令的顺序执行,且每条指令仅执行一次,具有顺序结构的程序或者程序段,成为顺序程序。
DATA SEGMENT
X DW 1032H
Y DW 2043H
DATA ENDS
STACK SEGMENT
DW 20H DUP(0)
ASSUME CS:CODE, DS:DATA, SS:STACK
START: MOV AX,DATA
MOV DS, AX
MOV AX , X
XCHG AX ,Y
MOV X ,AX
MOV AH, 4CH
INT 21H
CODE ENDS
END START
代码分析:前面一部分是对数据段以及堆栈段的定义,从BEGIN开始,,因为对于MOV来说,不能够直接将DATA
作为源操作数,DS最为目的操作数,所以要通过一个通用寄存器来实现两者之间的赋值,,MOV AX, X意为将X的值先保存在AX中,而后执行XCHGAX, Y将AX与Y的值进行交换,此时Y里面存储的便是X的值,AX中存储的Y的值。紧接着MOVX, AX再将AX中存储的Y的值赋予X,即实现X与Y值得交换。
二:分支程序设计
实现分支程序需要有相应的转移指令的支持,而转移指令又分为无条件转移转移指令与有条件转移指令两类,在有条件转移指令中,不同的条件往往是通过标志寄存器中条件标志的不同状态反映的。因而,分支程序设计中一个至关重要的问题是如何根据标志寄存器中标志位的不同状态,配合使用合适的转移指令实现程序的转移。关于转移指令请看我的
DATA SEGMENT
X DW 0F874H
DATA ENDS
STACK SEGMENT
ASSUME CS:CODE, SS:STACK, DS:DATA
BEGIN: MOV AX,DATA
MOV DS,AX
MOV AX,X
TSET AX,AX ;比较两个数的大小
JNS DONE :跳转到DONE指令,若结果为正转移
NEG X :负指令NEG取反 若结果不为正,则对它进行取反
DONE: MOV AH,4CH
INT 21H
CODE ENDS
END BEGIN
三:循环程序设计
DATA SEGMENT
ARY DB 17,8,9,62,53,48,19,27,68,73
MAX DB ?
DATA ENDS
STACK SEGMENT PARA STACK
DW 20H DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE, SS:STACK, DS:DATA
START: MOV AX,DATA
MOV DS , AX
MOV SI ,OFFSET ARY; SI指向ARY的第一个元素
MOV CX, 9 ;CX做循环计数
MOV AL, [SI] ;取出第一个元素到AL
LOP: INC SI ;SI指向后一个元素
CMP AL, [SI] ;比较两个数
JAE BIGGER ;前一个元素大于后一个元素是转移
MOV AL , [SI]; 取较大数AL
BIGGER: LOP LOP :(CX)不等与0则转移
MOV MAX,AL
MOV AH ,4CH
INT 21H
CODE ENDS
END START
- 那些年,我们一起学过的汇编----之顺序、分支与循环程序设计
- 那些年,我们一起学过的汇编----之子程序设计
- 那些年,我们一起学过的汇编----之伪指令
- 那些年,我们一起学过的汇编----之程序返回操作系统
- 那些年,我们一起学过的汇编----之跳转指令
- 那些年我们一起学的汇编----之寻址方式
- 那些年,我们没有一起学过的英语。
- 那些年,我们一起学过的linux
- 那些年,我们一起学过的编程语言
- 那些年,我们一起学过的R语言
- 那些年,我们一起学过的算法。
- 那些年我们一起学过的“排序算法”
- 那些年我们一起学过的“排序算法”
- ~这些年,我们一起学过的java~11~小学期程序设计之日历问题
- ~这些年,我们一起学过的java~12~小学期程序设计之生理周期问题
- ~这些年,我们一起学过的java~13~小学期程序设计之身份证校验
- 那些年,我们一起读过的《JAVA与模式》
- 那些年,我们一起学的C++
- 冰雪初融,旭日阳刚,a fine day 哦~~~
- 30 Linux Kernel Developers in 30 Weeks: Dave Jones
- input checkbox
- 怎么查询端口被占用
- 30 Linux Kernel Developers in 30 Weeks: Paul Mundt
- 那些年,我们一起学过的汇编----之顺序、分支与循环程序设计
- Java中继承thread类与实现Runnable接口的区别
- emacs+clojure的安装配置(win7)
- android二级listview列表
- OFBiz的MVC框架
- 最新体温单控件
- Android实现图文混排(2) 通过webview实现 并实现点击 图片处理事件
- C#中海量数据的批量插入和更新 [顶]
- proc文件系统