




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
§4
程序设计
汇编语言程序设计步骤:1.分析问题,确定算法
2.编制程序流程图
3.编制程序
4.调试程序
一个源程序的基本格式如下:DATASEGMENT•DATAENDSEXTRASEGEMNT•
EXTRAENDSSTACK1SEGMENTPARASTACK•STACK1ENDSCODESEGMENTASSUMECS:CODE,DS:DATAASSUMESS:STACK1,ES:EXTRA••••••;存放数据项的数据段;存放数据项的附加段;堆栈段START:MOVAX,DATAMOVDS,AXMOVAX,EXTRAMOVES,AXMOVAH,4CHINT21HCODEENDSENDSTART••••••(核心程序段);DD装入段基址;ES装入段基址;系统功能调用;返回操作系统(一)顺序结构程序例1编制程序,求下列公式中的Z值,并将结果存放到RESULT单元中。
=Z(X+Y)*8-X2
设X,Y的值分别存放在VARX,VARY单元中,运算结果不超过16位。解:(1)存储单元RESULT用来存放结果,VARX和VARY放
X、Y的值。寄存器DX放中间运算结果,左移1位相当于乘2,右移1位相当于除2,所以可以用左移3位得到乘以8的结果。
(2)程序流程图和程序如下:开始预置段寄存器DXXDXX+YDX右移得((X+Y)*8-X)/2RESULTDX结束DX左移3次(X+Y)*8DX(DX)-XDATASEGMENTVARXDW0006HVARYDW0007HRESULDW?DATAENDSSACK1SEGMENTPARASTACKDW100HDUP(?) SACK1ENDSCOSEGSEGMENTASSUMECS:COSEGASSUMEDS:DATAASSUMESS:STACK1START:MOVAX,DATAMOVDS,AXMOVDX,VARX;DXXADDDX,VARY;DXX+YMOVCL,3SALDX,CL;DX(X+Y)*8SUBDX,VARX;DX(X+Y)*8-XSARDX,1;DX((X+Y)*8-X)/2MOVRESULT,DXMOVAH,4CH;系统功能调用,返回操作系统
INT21HCOSEGENDSENDSTART
例:顺序程序设计
设:在内存XX单元中存放数x(0<x<9的整数),查表求x的平方值,并将结果存入YY单元中。
DATASEGMENTTABDB0,1,4,9,16,25DB36,49,64,81XXDB2YYDB?DATAENDSTAB+00+11+24+981+A2+B4
CODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,0MOVAL,XXMOVBX,OFFSETTABADDBX,AXMOVAL,[BX]MOVYY,ALMOVAH,4CHINT21HCODEENDSENDSTART}XLAT(二)、分支程序条件转移:JX目标用于程序需要进行分别处理的情况。主要使用转移指令。转移指令分为无条件转移指令和条件转移指令。无条件转移指令:JMP目标在进行分支程序设计时,通常用比较、测试,或算术运算、逻辑运算影响标志位,然后选择转移指令。分支程序结构开始条件?A块存结果结束成立不成立初始化开始条件?A块B块存结果结束成立不成立初始化例:分支程序设计
y=1x>00x=0-1x<0设:x为8位有符号数开始预置段RALXAL>0AL>0AL-1AL0AL1NYNYYAL结束DATASEGMENTXDBxYDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAL,X
CMPAL,0
;x-0建标志位
JGEBIGD
;x0转移
MOVAL,-1;x<0
JMPJUS2BIGD:JGJUS1
;x>0转移
MOVAL,0;x=0
JMPJUS2JUS1:MOVAL,1;x>0
JUS2:MOVY,AL
MOVAH,4CHINT21HCODEENDSENDSTART入口初始化部分循环体修改部分结束?出口YN(A).循环的基本结构先执行,后判断结构设:循环次数为N正计数法:倒计数法:MOVCX,NMOVCX,0L:L:
DECCXINCCXJNZLCMPCX,NJNZL…………三、循环程序结构入口初始化部分循环结束?循环体修改部分出口YN用于当计数次数无法确定,但循环次数与某些条件有关,并且条件可检测时,可采用条件控制。
先判断,后执行结构
循环控制指令LOOPLOOP标号;(CX)-1CX,(CX)=0时转标号LOOPE/LOOPZ标号;(CX)-1CX(CX)=0且ZF=1(相同)时转标号LOOPNZ/LOOPNE标号;(CX)-1CX(CX)=0且ZF=0(不同)时转标号例如:MOVCX,10MOVCX,10
L1:……….L1:………
CMPAX,X
LOOPL1
LOOPEL1
}相同不同或全比较完ZF=0(CX)=0例1:
计算Y=
程序如下:DATASEGMENTTABLDWa1,a2,······,a20
YYDW?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATA;
MOVDS,AXMOVAX,0LEABX,TABLMOVCX,20L0:ADDAX,[BX];循环体
INCBX;修改部分
INCBXLOOPL0;控制部分
MOVYY,AX
MOVAH,4CHINT21HCODEENDSENDSTART设a1,a2,···a20是一组无符号十六位二进制数,并设其和不大于2个字节。定义数组名TABL存放a1~a20;和存放于单元YY中。中间结果存于寄存器AX中。BX寄存器为地址指针,CX寄存器作计数器。例2.编程统计数据块中正数的个数,并将其送RS单元中。解:数据块定义为D1,RS单元存放正数的个数,数据块长度用COUNT表示。BX作地址指针,CX作计数器,DX记录正数的个数,程序流程图如下所示:START预置段RBXD1DX0CXCOUNT[BX]>0?DXDX+1BXBX+1CXCX-1CX=0?RS(DX)ENDNYNYDATASEGMENTD1DB-1,-3,5,7,-9,···,-6RSDW?COUNTEQU$-D1DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVBX,OFFSETD1MOVCX,COUNTMOVDX,0MOVRS,DXMOVAH,4CHINT21HCODEENDSENDSTARTLOOPLOP1LOP1:MOVAL,[BX]CMPAL,0JLEJUSTIJUSTI:INCBXDECCXJNZLOP1INCDX例3:AX寄存器中有一个16位的二进制数,编程统计其中值为1的位的个数,并将结果存于CX中。STARTCX0AX=0?AX左移CF=0?CXCX+1ENDYNYN程序段如下:
MOVCX,0LOP:ANDAX,AX
;建标志位
JZSTOP
;AX=0停机
SALAX,1JNCNODINCCXNOD:JMPLOPSTOP:MOVAH,4CHINT21H由于AX有可能为0,若AX=0则不必再往下作统计工作,因此可采用先判断,后执行结构。流程图如右:(B).循环控制方式1.计数控制用于计数次数已知的情况,可采用正计数或倒计数法。如例12.条件控制当计数次数无法确定,但循环次数与某些条件有关,并且条件可检测时,可采用条件控制,例如检测,比较或判断等形式。例4.在一串字符串中查找某一关键字‘#’,若查到,记下存放该关键字单元的偏移地址,若找不到用-1作标记。解:设串变量名STRING,关键字单元CHAR,关键字单元的偏移地址放FLAG单元。寄存器SI为字符串的地址指针,CX为字符串长度,AL用于放关键字‘#’。STARTSISTRING的EACX串长度
AL‘#’[SI]=AL?SI=SI+1CX-1=0?FLAG-1ENDFLAGSIYNYN还可用字符串指令实现(C)多重循环结构
外层初始化内层初始化循环体内层循环参数修改控制内层循环外层循环参数修改控制外层循环外层循环体序号数8516328412345例:A数组中有N个数,将它们按从大到小的顺序排列。冒泡排序法
从第一个数开始依次对相邻的两个数进行比较若顺序正序,不交换两数位置;若顺序不正序,交换两数位置。816328451632848532841685843216851234比较次序流程图:STARTCXN—1DICXBX0AXA[BX]A[BX+2]A[BX]BXBX+2DIDI-1ENDAX>A[BX+2]?DI=0?CX-1=0?NYNYNY交换标志=0NY交换标志=1?交换标志=1DATASEGMENTADW50DUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVCX,50DECCXLP1:MOVDI,CX;外循环
MOVBX,0LP2:MOVAX,A[BX];内循环
CMPAX,A[BX+2]JGCONT
XCHGAX,A[BX+2]MOV[BX],AXCONT:ADDBX,2
DECDIJNZLP2
LOOPLP1MOVAH,4CHINT21HCODEENDSENDSTARTDATASEGMENTADWnDUP(?)DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AX
MOVCX,NDECCXLP1:MOVDI,CX;外循环
MOVBX,0
MOVDX,0;未交换标志0LP2:MOVAX,A[BX];内循环
CMPAX,A[BX+2]JGCONT
XCHGAX,A[BX+2]MOV[BX],AX
MOVDX,1;交换标志1CONT:ADDBX,2
DECDIJNZLP2
CMPDX,0
JZL1LOOPLP1L1:MOVAH,4CHINT21HCODEENDSENDSTART
子程序设计中的问题:
子程序的调用和返回
子程序调用时参数的传递方法四、子程序结构子程序名PROC[NEAR/FAR]
RET[n]子程序名ENDP……子程序的调用和返回CALL
子程序名
RET[n]断点入口……….CALL
;断点入栈、取子程序入口RET[n];断点出栈,若带有n,继续弹出断点以下的n个字节的数据。SPSPSP断点CS断点IP栈底CALL断点IP断点CSIPCSRET
子程序调用时参数的传递方法
调用程序被调用程序
参数传递:
(1)寄存器传递:参数较少(2)存储单元传递:参数较多(3)堆栈传递:子程序嵌套或递归调用
数据结果子程序设计举例:求十进制数的和
1.用寄存器
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 标准劳务分包合同示范合同
- 暗股合作协议书暗股协议书模板二零二五年
- 污泥厌氧消化产沼技术企业制定与实施新质生产力战略研究报告
- 中国儿童影视产业的机遇与挑战
- 企业如何应对数字时代的挑战
- 中医的脏腑与经络解析
- 探讨预算管理一体化背景下高校国库集中支付的有效性
- 2025春季在线教育班主任工作计划
- 产教融合下的高校工艺美术与非物质文化遗产创新人才培育研究
- 智能制造先锋:工业机器人应用设计与创新研究
- 受限空间作业施工方案
- 黄金卷(江苏苏州专用)-【赢在中考·黄金预测卷】2025年中考数学模拟卷
- (一模)2025年广州市普通高中毕业班综合测试(一)政治试卷(含答案)
- 视力防控健康教育
- 太乙课堂游戏最终版
- 大数据分析和可视化平台使用手册
- 2025年杭州医学院考研试题及答案
- 2025年骨科入科考试题及答案
- 2025年山西工程职业学院单招职业倾向性测试题库含答案
- 术前预防感染
- 生产设备设施-射线探伤-安全检查表
评论
0/150
提交评论