上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
汇编语言程序设计-顺序结构程序设计
作者:未知 申领版权
2010年12月12日 共有 2179 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    汇编语言程序设计
    4.1 顺序结构程序设计
    顺序程序又称作简单程序。它一般是根据算法编出的完全顺序执行的程序,关于它的流程的设计已经在前面的课程中讲解过了,这里重点讲解编写汇编语言程序时候应该注意的问题。虽然,顺序结构的流程很简单,但是,很多学生在编写程序时会出现一些问题,主要有:
    1) 数据类型不匹配;
    2) 计算机资源的使用有冲突;
    3) 忽视汇编语言指令的一些缺省的条件。
    下面介绍一个简单的顺序程序设计实例:
    例4.1:
    将变量X的值加上变量Y的值,结果保存在变量Z中。
    分析:这个题目的流程很简单,但是要注意汇编语言的特点。
    程序如下:
    ;…………数据段…………
    DATA   SEGMENT
    X  DB  6                ;X是一个字节类型的变量 
    Y  DB  9                ;Y是一个字节类型的变量
    Z  DB  ?               ;Z是一个字节类型的变量
    DATA   ENDS
    ;…………代码段…………
    CODE   SEGMENT
    ASSUME   CS:CODE,DS:DATA
    START:MOV  AX,DATA ;DATA不能直接赋值给DS
    MOV  DS,AX    ;对DS赋值
    MOV  AL,X     ;存储器寻址方式不能确定数据类型
    MOV  BL,Y     ;X、Y先分别送到不同的字节(8位)寄存器中
    ADD  AL,BL
    MOV  Z,AL
    HLT
    CODE   ENDS
    END  START
    下面再介绍一个程序实例。
    例4.2:
    变量A乘以变量B再除以C,结果保存在D中。
    分析:这个例题的流程仍然比较简单,但是要注意乘法指令与除法指令的使用以及寄存器的使用。
    程序如下:
    ;…………数据段…………
    DATA    SEGMENT
    A  DB  5
    B  DB  12
    C  DB  6
    D  DB  ?
    DATA   ENDS
    ;…………代码段…………
    CODE    SEGMENT
    ASSUME  CS:CODE,DS:DATA
    START:MOV  AX,DATA
    MOV  DS,AX
    MOV  AL,A
    MOV  BL,B
    MUL  BL
    MOV  BL,C
    DIV  BL
    MOV  D,AL
    HLT
    CODE   ENDS
    END START
    这里应该特别注意寄存器的使用不要冲突。
    虽然实际应用的程序比顺序结构复杂的多,但它是构成程序的基础,它的质量直接影响整个程序的质量,因此如何充分利用硬件资源,合理地选择指令是编制简单程序,提高整个汇编语言程序质量的关键。
    例4.3:
    设在X单中存放一个0-9之间的整数,用查表法求出其平方值,并将结果存入Y单元。
    分析:根据题意,首先将0-9所对应的平方值存入连续的八个单元中,构成一张平方值表,其首地址为SQTAB。
    由表的存放规律可知:表首址SQTAB与X单元中的数i之和,正是i2所在单元的的地址。
    程序如下:
    ;…………数据段…………
    DATA      SEGMENT
    SQTAB     DB  0,1,4,9,16,25,36,49,64,81;平方值表
    X            DB  5
    Y            DB  ?
    DATA      ENDS
    ;…………堆栈段…………
    STACK     SEGMENT  PARA  STACK  ‘STACK’
    TAPN      DB  100  DUP (?)
    TOP        EQU  LENGTH  TAPN
    STACK     ENDS
    ;…………代码段…………
    CODE      SEGMENT
    ASSUME  CS:CODE,DS:DATA,SS:STACK
    START:MOV  AX,DATA
    MOV  DS,AX             ;对DS段寄存器赋值
    MOV  AX,STACK
    MOV  SS,AX             ;对SS段寄存器赋值
    MOV  AL,X              ;取数I
    MOV  AH,0              ;注意这一行的作用
    MOV  BX,OFFSET  SQTAB;BX<-表首址
    ADD  BX,AX
    MOV  AL,[BX]            ;取i2并保存
    MOV  Y,AL
    HLT
    CODE      ENDS
    END  START
    对这个问题还可以用另外一种方式来解决:
    例4.3_b:
    …
    …;前面的同例4.3 
    START:MOV  AX,DATA
    MOV  DS,AX
    MOV  AX,STACK
    MOV  SS,AX
    MOV  AL,X
    MOV  BX,OFFSET  SQTAB;
    XLAT
    ADD  BX,AX
    MOV  Y,AL
    HLT
    CODE      ENDS
    END  START
    显然,上面两个代码段用到了不同的指令,致使程序的长短、效率自然也不相同。
    下面再举两个综合的题目。
    例4.4:
    计算公式F= X3  Y2  Z-1000,假设X、Y均在0~9之间,|Z|≤100
    分析:将前面几个例题中讲解的知识合在一起考虑。
    程序如下:
    :…………数据段…………
    DATA   SEGMENT
    XYZF  DW  7,6,97,?     ;分别对应为变量X、Y、Z和结果的值
    X3     DW  0,1,8,27,64,125,216,343,512,729;立方值表
    Y3     DW  0,1,4,9,16,25,36,49,64,81      ;平方值表
    DATA   ENDS
    ;…………代码段…………
    CODE   SEGMENT
    ASSUME  CS:CODE,DS:DATA
    START:;
    MOV  AX,DATA
    MOV  DS,AX
    ;
    MOV  BX,OFFSET  X3
    MOV  AX,[XYZF]
    ADD  AX,AX
    ADD  BX,AX
    MOV  DX,[BX]
    ;
    MOV  BX,OFFSET  Y2
    MOV  AX,[XYZF 2]
    ADD  AX,AX
    ADD  BX,AX
    MOV  AX,[BX]
    ;
    ADD  DX,AX
    ADD  DX,[XYZF 4]
    SUB  DX,1000
    MOV  [XYZF 6],DX
    HLT
    CODE   ENDS
    END  START
    例4.5:
    试编写一程序计算表达式W=(V-(X*Y Z-100))/X的值。式中X、Y、Z、V均为有符号字数据变量,
    结果存放在双字变量W之中,
    程序如下:
    ;…………数据段…………
    DATA   SEGMENT
    X   DW   200
    Y   DW   100
    Z   DW   3000
    V   DW   10000
    W   DW   2  DUP (?)
    DATA   ENDS
    ;…………代码段…………
    CODE   SEGMENT
    ASSUME  CS:CODE,DS:DATA
    START:MOV  AX,DATA
    MOV  DS,AX
    ;
    MOV  AX,X
    MOV  BX,Y
    IMUL  BX
    MOV  CX,AX
    MOV  BX,DX
    MOV  AX,Z
    CWD
    ADD,CX,AX
    ADC,BX,DX
    SUB  CX,100
    SBB  BX,0
    MOV  AX,V
    CWD
    SUB  AX,CX
    SBB  DX,BX
    MOV  BX,X
    IDIV  BX
    ;
    MOV  W,AX
    MOV  W 2,DX
    HLT 
    CODE   ENDS
    END   START

    

 

相关新闻

成为运营大牛(数据二):数据使用的三测
成为运营大牛(数据一):运营中的那些数据
成为运营大牛(结构四):一图览运营
成为运营大牛(结构三):一张图看清活动运营
成为运营大牛(结构二):一张图看清内容运营
成为运营大牛(结构一): 运营的基础结构
肢体语言塑造你自己
明天我会遇见你
三个月之后,我会变成什么样子?
不自虐的人生是不完整的,高手只不过是一些自虐的傻子罢了

您可能对这些感兴趣  

干货分享|10本最受国外孩子喜爱的英文词典——上
从孩子的表现看父母的缺点!请家长对号入座,看看你是哪一类?
20条制作PPT的视觉原则
培训简史:培训者必知的历史轨迹
广田丰管理培训生人才培养调查报告
第4讲 作为上司的职业经理
第3讲 作为同事的职业经理
第2讲 作为下属的职业经理
第1讲 培养经理人的管理素养
酒店前台新员工上岗培训计划

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》