第5章 8086 8088汇编语言程序设计

第5章 8086 8088汇编语言程序设计

ID:5326979

大小:301.57 KB

页数:62页

时间:2017-12-08

第5章  8086 8088汇编语言程序设计_第1页
第5章  8086 8088汇编语言程序设计_第2页
第5章  8086 8088汇编语言程序设计_第3页
第5章  8086 8088汇编语言程序设计_第4页
第5章  8086 8088汇编语言程序设计_第5页
资源描述:

《第5章 8086 8088汇编语言程序设计》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、第5章8086/8088汇编语言程序设计5.1汇编语言源程序的框架结构5.2顺序结构程序设计程序的基本结构5.3分支结构程序设计5.4循环结构程序设计5.5子程序设计5.6高级汇编语言技术5.7DOS功能子程序的调用5.1汇编语言源程序的框架结构•8086/8088汇编语言程序采用分段结构。•8086/8088汇编语言程序通常运行在DOS环境下,为了运行后能正常返回DOS系统,就必须在程序代码段的开始和结束处设置特定的语句。•DOS系统将任何一个用户程序的EXE文件装入存储器时,都会生成一个“程序段前缀”(ProgramSegmentPrefix,即PSP)用来提供EX

2、E文件的控制信息。同时,CS:IP指向用户程序执行的起始地址,SS指向堆栈段,DS、ES指向PSP。例:基本结构1DATASEGMENTDATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1BEGINPROCFAR;将用户程序设置为过程PUSHDS;将PSP的段基值压入堆栈MOVAX,0PUSHAX;将PSP起始单元偏移量压入堆栈MOVAX,DATAMOVDS,AXRET;返回到DOSBEGINENDPCODEENDSENDBEGIN例:基

3、本结构2DATASEGMENTDATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODESEGMENTBEGIN:MOVAX,DATAMOVDS,AXMOVAH,4CHINT21H;返回到DOS,返回码为0CODEENDSENDBEGIN5.2顺序结构程序设计程序有三种基本形式:顺序结构、分支结构和循环结构。顺序程序结构——是指完全按照顺序逐条执行的指令序列。开始语句1语句2语句3结束顺序程序的结构形式例1:试编写一程序计算以下表达式:Z=(3X+Y-5)/2开始设X、Y的值存放在字变量VARX、VARY中,结果放在V

4、ARZ中。计算3X计算3X+Y算法分析:(1)乘2和除2可以使用算术左移和右移实现;计算3X+Y-5(2)3X可以分解成2X+X。计算(3X+Y-5)/2存结果结束TITLEEQUATIONCOMPUTEDATASEGMENTVARXDW15VARYDW10VARZDW?DATAENDSSTACK1SEGMENTPARASTACKDW20HDUP(0)STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATA,SS:STACK1COMPPROCFARPUSHDS;保护返回DOS地址MOVAX,0PUSHAXMOVAX,DATA;初始化DSMOV

5、DS,AXMOVAX,VARX;(AX)⇐XSRLAX,1;(AX)⇐2XADDAX,VARX;(AX)⇐3XADDAX,VARY;(AX)⇐3X+YSUBAX,5;(AX)⇐3X+Y-5SARAX,1;(AX)⇐(3X+Y-5)/2MOVVARZ,AX;存结果RET;返回DOSCOMPENDPCODEENDSENDCOMP5.3分支结构程序设计实现方法:在产生分支之前,通常用比较、测试的办法在标志寄存器中设置相应的标志位,然后再选用适当的条件转移指令,以实现不同情况的分支转移。(1)进行比较,使用比较指令:CMPDEST,SRC该指令进行减法操作,而不保存结果,只设置

6、标志位。(2)进行测试,使用测试指令TESTDEST,SRC该指令进行逻辑与操作,而不保存结果,只设置标志位。YN例1:写一程序判断两个字节变量DB1、DB2内容是否相等。若相等,将AL置全0;否则将AL置全1。流程图如右图,程序段如下:(AL)⇐DB1YN(AL)=DB2?L1(AL)⇐0(AL)⇐1MOVAL,DB1CMPAL,DB2;设置ZF标志L2JZL1;相等转到L1,否则顺序执行两路分支结构MOVAL,0FFH;不相等,(AL)⇐全1JMPL2;跳过下一指令L1:MOVAL,00H;相等,(AL)⇐全0L2:…例2:数据段的ARY数组中存放有10个无符号数,

7、试找出其中最大者送入MAX单元中。分析:设SI作数组的地址指针,每次相临两数比较后,将较大的数放入AL,比较完后,最大数在AL中。程序段如下:DATASEGMENTARYDB17,5,40,0,12,34,78,32,10,60MAXDB?DATAENDSLEASI,ARY;SI指向ARY的第一个元素MOVCX,9;CX作比较次数计数器MOVAL,[SI];取第一个元素到ALLOP:INCSI;SI指向下一元素CMPAL,[SI];比较两个数JAEBIGER;前者≥后者转移,否则顺序执行MOVAL,[SI];取后一元素到ALBIGER:D

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。