汇编语言7资料.ppt

  1. 1、本文档共20页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
汇编语言程序设计 史新奕 第5章 循环与分支程序设计 编写汇编语言程序的步骤 ? 分析题意 ? 根据算法,画出程序框图 ? 根据框图编写程序 ? 上机调试程序 5.1 循环程序设计 5.1.1 循环程序的结构形式 循环程序的结构形式 循环控制条件:可以利用条件转移指令和循环指令。 5.1.2 循环程序设计方法 例5.1试编写一个程序把BX寄存器内的二进制数用十六进制数的形式在屏幕上显示出来。 四位二进制数对应一位十六进制数。(给出BX值示例,二进制十六进制比较) 十六进制数0~9,A~F;ASCII码30H~39H(X+30H),41H~46H(X+37H)。 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 例5.2 在ADDR单元中存放着数Y的地址,试编制一程序把Y中的1的个数存入COUNT单元中。 关于数据段的定义 DATAREA SEGMENT ADDR DW NUMBER ;NUMBER为变量名,在此变为该变量的EA NUMBER DW Y ;Y是一个具体的数,比如1010110001010011B COUNT DW ? DATAREA ENDS 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 例5.3 在附加段中,有一个首地址为LIST和未经排序的字数组。在数组的第一个字中,存放着该数组的长度,数组的首地址已存放在DI寄存器中,AX寄存器中存放着一个数。要求编制一程序:在数组中查找该数,如果找到此数,则把它从数组中删除。 5.1.2 循环程序设计方法 另外说明: 本例给出的代码是子程序设计,为使程序指令精简,代码的逻辑顺序经过调整。 PUSH DI 查找AX JE DELETE POP DI JMP SHORT EXIT DELETE: 删除 POP DI DEC WORD PTR ES:[DI] EXIT: RET 例5.4 将正数N插入一个以整序的字数组的正确位置。该数组的首地址和末地址分别为ARRAY_HEAD和ARRAY_END,其中所有数均为正数且以按递增的次序排列。 关于数据段的说明 DATAREA SEGMENT X DW ? ARRAY_HEAD DW … ARRAY_END DW 105 N DW 32 DATAREA ENDS 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 5.1.2 循环程序设计方法 例5.5 设有数组X和Y。X数组中有X1,…,X10;Y数组中有Y1,…,Y10。试编制程序计算…结果存入Z数组中。 由于每次的运算不同,并且没有固定规律,所以用逻辑尺来记录其运算规律,假设用0表示加法,用1表示减法。所以本例中的逻辑尺为0000000011011100,从右到左排列。 JMP SHORT RESULT I=0 测试逻辑尺第I位的值 Xi+Yi Xi-Yi Zi←结果 I=I+1 循环计数值=0? 结束 MOV BX,0 对三个数组的访问均用寄存器相对寻址方式,主要考虑到只需要一个寄存器就可以。如果使用寄存器间接,则三个数组需要三个寄存器。 (SHR LOGIC_RULE,1考虑到效率问题,将LOGIC_RULE存入寄存器DX再移位) MOV DX,LOGIC_RULE SHR DX,1 JC SUBTRACT =1 RESULT NEXT SUBTRACT =0 N Y MOV AX,X[BX] ADD AX,Y[BX] MOV AX,X[BX] SUB AX,Y[BX] MOV Z[BX],AX ADD BX,2 LOOP NEXT 循环计数器用CX,在循环体前需要赋值。 初始化循环计数器 MOV CX,10 5.1.2 循环程序设计方法 例5.6 试编制一程序:从键盘输入一行字符,要求第一个键入的字符必须是空格符,如不是,则退出;如是,则开始接受键入的字符并顺序存放在首地址为BUFFER的缓冲区中(空格符不存入),直到接受到第二个空格符时退出程序。 本例中需要定义BUFFER缓冲区。 由于需要判断输入的空格符是否是第一个,还需要一个标志来标识。这个标志可以用寄存器也可以用变量,本例中用的是变量FLAG。 DATAREA SEGMENT BUFFER DB 80 DUP(?) FLAG DB ? DATAREA ENDS 初始化首地址 置FLAG为0 接收一个字符 是第一个字符吗? 是空格符吗? 置FLAG为1 是空格符吗? 存入缓冲区 修改地址 结束 LEA BX,BUFFER MOV FLAG,0 MOV

文档评论(0)

三哥 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档