80X86程序设计.docx

  1. 1、本文档共73页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
80X86程序设计

图5 .5 一维数组求和的程序流程图DATA SEGMENT ; 数据段开始COUNT DW 64 ; 数组的长度ARRAY DB 01H , 02H , 03H , 04H , ? , 64H; 数组元素SUM DW ? ; 定义结果存放单元DATA ENDS ; 数据段结束;定义代码段CODE SEGMENT ‘CODE’ ; 代码段开始ASSUME CS: CODE , DS:DATA; 段地址约定BEGIN PROC FAR ; 主过程开始;保存返回到DOS 的地址PUSH DS ; *第5 章循环与分支程序设计119MOV AX, 0 ; *PUSH AX ; *;建立数据段MOV AX, DATA ; *MOV DS, AX ; *;设置数组元素首地址指针MOV SI , OFFSET ARRAY ; *;和单元清零MOV AX, 0 ; *;设置字节计数值MOV CX ,COUNT ; *;循环执行如下代码, 将源块数据传送到目标块去NEXT : ADD AL , [SI] ; * 求和ADC AH , 0 ; *INC SI ; * 修改源数据块指针DEC CX ; * 字节计数值- 1JNZ NEXT ; * 计数器不为0 则循环;存结果MOV [SUM] , AX ; *;返回DOSRET ; * 弹出返回地址→CS: IP ,;执行INT 20H 指令, 返回DOSBEGIN ENDP ;过程结束CSEG ENDS ;代码段结束END BEGIN ;源程序结束例5 .2 顺序程序设计。设x , y , u , v 均为无符号字节数据, 编程计算z =(x + y) u/ v。解由题设条件知x , y , u , v 均为无符号字节数据, 那么x + y 则在无符号字数据范围内; ( x + y) u 的结果在双字范围内; 最后求出( x + y) u/ v 的结果。汇编语言源程序清单如下:DSEG SEGMENT第5 章循环与分支程序设计121DISPN DB 20 , 32 , 10 , 12DISPZ DW 2 DUP( ?)DSEG ENDS;CSEG SEGMENTASSUME CS :CSEG , DS:DSEGMAIN PROC FARMOV AX, DSEGMOV DS, AX ; 建立数据段MOV DI OFFSET DISPN; 设置指针MOV AX, 0MOV BX, AX ;AX、BX 清零MOV AL , [DI] ; 取数据xMOV BL , [DI + 1 ] ; 取数据yADD AX, BX ; 求x + yMOV BL , [DI + 2 ] ; 取数据uMUL BX ; 和╳ u→DX:AXMOV BL , [DI + 3 ]DIV BX ; ( x + y)× u/ v , 商→AX, 余→DXMOV DI , OFFSET DISPZ; 置结果指针MOV [DI] , AX ; 存商MOV [DI + 2] , DX ; 存余MOV AX, 4C00 HINT 21H ; 返回DOSMAIN ENDPCSEG ENDSEND MAIN例5 .3 编制一个数据块移动程序。( 1) 给内存数据段(DATA)中偏移地址为n1 开始的连续32 个字节单元,置入数据00H , 01H , 02H , ? , 1FH。 ( 2) 将内存数据段(DATA)中偏移地址为n1 的数据传送到偏移地址为n2开始的连续的内存单元中去。;定义数据段DSEG SEGMENTn1 DB 20H DUP( ?)第5 章循环与分支程序设计123DSEG ENDS;定义代码段CSEG SEGMENTASSUME CS :CSEG , DS:DSEGSTART PROC FARMOV AX, DSEGMOV DS, AX ; 数据段地址→DSMOV SI , OFFSET n1 ; n1 的偏移地址→SIMOV AL , 0 ; 初值→ALMOV CX , 32 ; 计数值→CXLP : MOV [SI] , ALINC ALINC SILOOP LP ; 给32 个单元中置数MOV AH , 4CHINT 21H ; 返回DOSSTART ENDPCSEG ENDSEND START例5 .4 编写一个汇编语言程序。要求把一个长度不大于100 的字节数据数组分成正数数组和负数数组, 并分别计算两个数组中数据的个数, 该数组以“$”结束( 已知结束条件) 。汇编语言程序清单如下:SSEG SEGMENT STACKDW 200 DUP( ?)TOP LABEL WORDSSEG ENDS;DSEG SEGMENTARRAY DB 12H , 89 H , 78H , 45H , 0 , 90H , 32H

文档评论(0)

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

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

1亿VIP精品文档

相关文档