汇编语言设计.ppt
文本预览下载声明
流程图画法规定 (2)判断框 顺序程序设计 下面举例说明顺序程序的设计。 【例】试编写一程序计算以下表达式的值。 w=(v-(x*y+z-540))/x 式中x、y、z、v均为有符号字数据。 设x、y、z、v的值存放在字变量X、Y、Z、V中, 结果存放在双字变量W之中,程序的流程图如图所示。 源程序如下: DATA SEGMENT X DW 200 Y DW 100 Z DW 3000 V DW 8000 W DW 2 DUP(?) DATA ENDS STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE,SS:STACK START:MOV AX,DATA MOV DS,AX ;DATA→AX MOV AX,X IMUL Y ;(X)*(Y)→DX:AX MOV CX,AX MOV BX,DX ;(DX:AX)→(BX:CX) MOV AX,Z CWD ;(Z)符号扩展 ADD CX,AX ADC BX,DX ;(BX:CX)+(DX:AX)→(BX:CX) SUB CX,540 SBB BX,0 ;(BX:CX)-540→(BX:CX) MOV AX,V CWD ;(V)符号扩展 SUB AX,CX SBB DX,BX;(DX:AX)-(BX:CX)→(DX:AX) IDIV X ;(DX:AX)/X MOV W,AX ;商→W MOV W+2,DX ;余数DX→W+2 MOV AH,4CH INT 21H CODE ENDS ;退出DOS 状态 END START 【例】已知某班学生的英语成绩按学号(从1开始)从小到大的顺序排列在TAB表中,要查的学生的学号放在变量NO中,查表结果放在变量ENGLISH中。编写程序如下: STACK SEGMENT STACK DB 200 DUP(0) STACK ENDS DATA SEGMENT TAB DB 80,85,86,71,79,96 DB 83,56,32,66,78。84 NO DB 10 ENGLISH DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,SS:STACK,CS:CODE BEGIN: MOV AX,DATA MOV DS ,AX LEA BX,TAB MOV AL,NO DEC AL XLAT TAB MOV ENGLISH,AL MOV AH,4CH INT 21H CODE ENDS END BEGIN 分支程序的结构形式 分支程序的结构可以有两种形式:双分支结构和多分支结构。 分支结构程序设计 1.简单的双分支程序设计 【例】已知在内存中有一个字节单元NUM,存有带符号数据,要求计算出它的绝对值后,放入RESULT单元中。 题目分析:根据数学中绝对值的概念知道,一个正数的绝对值是它本身,而一个负数的绝对值是它的相反数;要计算一个数的相反数,8086/8088指令系统中有专门的求相反数的指令NEG。 流程图如下: 程序如下: DATA SEGMENT X DB -25 RESULT DB ? DATA ENDS CODE SEGMENT ASSUME DS:DATA,CS:CODE START: MOV AX,DATA MOV DS,AX ;初始化 MOV AL,X ;X取到AL中 TEST AL,80H ;测试AL正负 JZ NEXT ;为正,转NEXT NEG AL ;否则AL求补 NEXT: MOV RESULT,AL ;送结果 MOV AH,4CH INT 21H ;返回DOS CODE ENDS END START ;汇编结束 2.多分支程序设计 多分支结构实现的方法有:条件选择法、转移表 法和地址表法。 ??????? 条件选择法 一个条件选择指令可实现两路分支,多个条件选择指令就可以实现多路分支。这种方法适用于分支数较少的情况。 用条件转移指令实现程序分支 【例】编写计算下面函数值的程序:
显示全部