博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
王爽《汇编语言》实验7
阅读量:6009 次
发布时间:2019-06-20

本文共 3013 字,大约阅读时间需要 10 分钟。

hot3.png

入门学习汇编,个人感觉是一件很枯燥的事情,因为汇编的基础学习很难有像其他高级语言那样,有花巧的技术来吸引你,即使像C语言那样printf()输出到控制台的功能都要到后面深入学习才会有,运行结果只能使用debug命令。为了调动自己的积极性,下面将自己完成王爽老师的《汇编语言》一书中的实验7的答案粘贴出来,秀一秀,自娱自乐一下^_^:

题目:Power idea公司从1975年成立一直到1995年基本情况如下:

年份 收入(千美元) 雇员(人) 人均收入(千美元)
1975 16 3 ?
1976 22 7 ?
1977 382 9 ?
1978 1356 13 ?
1979 2390 28 ?
1980 8000 38 ?
:      
:      
:      
1995 5937000 17800 ?

 下面的程序中,已经定义好了这些数据:

assume cs:codesgdata segment   db '1975','1976','1977','1978','1979','1980','1981','1982','1983'   db '1984','1985','1986','1987','1988','1989','1990','1991','1992'   db '1993','1994','1995'   ; 以上是表示21年的21个字符串   dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514   dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000   ; 以上是表示21年公司总收入的21个dword型数据   dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226   dw 11542,11430,15257,17800   ; 以上是表示21年公司雇员人数的21个word型数据data endstable segment   db 21 dup ('year summ ne ?? ')table ends

编程:将data段中的数据按如下格式写入到table段中,并计算21年中的人均收入(取整),结果也按照如下所示格式存在table段中:

  年份(4字节) 空格 收入(4字节) 空格 雇员数(2字节) 空格 人均收入(2字节) 空格
行内地址
1年占1行
每行的
起始地址
0  1  2  3 4 5  6  7  8 9 A  B C D  E F
Table:0 '1975'   16   3   ?  
Table:10H '1976'   22   7   ?  
Table:20H '1977'   382   9   ?  
Table:30H '1978'   1356   13   ?  
Table:40H '1979'   1390   28   ?  
Table:50H '1980'   8000   38   ?  
:                
Table:140H '1995'   5937000   17800   ?  

提示:可将data段中的数据看成是多个数组,而将table中的数据看成一个结构型数据的数组,每个结构型数据中包含多个数据项。可用bx定位每个结构型数据,用idata定位数据项,用si定位数组项中每个元素,对于table中的数据的访问可采用[bx].idata和[bx].idata[si]的寻址方式。

个人的解答:

assume cs:codesg,ds:data,ss:tabledata segment   db '1975','1976','1977','1978','1979','1980','1981','1982','1983'   db '1984','1985','1986','1987','1988','1989','1990','1991','1992'   db '1993','1994','1995'   ; 以上是表示21年的21个字符串   dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514   dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000   ; 以上是表示21年公司总收入的21个dword型数据   dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226   dw 11542,11430,15257,17800   ; 以上是表示21年公司雇员人数的21个word型数据data endstable segment   db 21 dup ('year summ ne ?? ')table endscodesg segmentstart: mov ax,data       mov ds,ax       mov bx,0              ; 设置date段的地址       mov dx, table       mov ss,dx       mov bp,0              ; 设置table段的地址       mov di,54h            ; 公司总收入的起始偏移地址       mov si,0A8h           ; 公司雇员的起始偏移地址       mov cx,21    s: mov ax,[bx]       mov dx,[bx+2]       mov [bp],ax       mov [bp+2],dx         ; 将date段中的年份数据存放到table段的前四个字节单元处       mov ax,[bx+di]       mov dx,[bx+di+2]       mov [bp+5], ax       mov [bp+7], dx        ; 将date段中的总收入存放到table段的第6个位置的双字单元处       div word ptr [si]     ; 得到除数:公司雇员数       mov [bp+13], ax       ; 将得到的取整后的结果存放到table段的第13个位置的字单元处       mov ax,[si]       mov [bp+10], ax       ; 将date段中的公司雇员人数存放到table段的第10个位置的字单元处       add bx,4       add si,2       add bp,10H       loop s       mov ax,4c00h        int 21hcodesg endsend start

上面的代码没有按照题目的提示来做,按提示还真不知道怎么做,如果你有好的解法,欢迎来拍板,写这篇博客的另外一个目地就是希望能结交一些对汇编感兴趣的朋友。

下面是我的运行结果:

个人感觉解本题,找准数据的地址很重要!

转载于:https://my.oschina.net/websoft/blog/76630

你可能感兴趣的文章
Linux环境Cloudera CDH安装配置完全解决方案
查看>>
Linux 4.x MTD源码分析-cfi-flash设备probe过程分析
查看>>
程序员因一张嵌套7层的循环代码截图被开除!
查看>>
满足用户的即时需求,金融云的效率优先与生态开放
查看>>
命令行基础
查看>>
三栏布局(两边固定,中间自适应) 常用方案及演变过程
查看>>
Vue嵌套组件的生命周期
查看>>
PHP 加密
查看>>
10月前端面试题目汇总
查看>>
【JAVA】Srping和传统JDBC实现数据库操作
查看>>
Redux-状态管理器
查看>>
mui扩展插件mui.showLoading加载框
查看>>
leetcode 122 买卖股票的最佳时机 II
查看>>
阿里云ons队列监控api深度使用
查看>>
Vue 基础篇(三):Vue生命周期理解
查看>>
区块链技术开发:场外交易为什么必不可少?
查看>>
Maven使用之道(1)----本地Maven配置
查看>>
霍金警告人工智能危险性 称其若失控很难被阻止
查看>>
NodeJS简单爬虫
查看>>
小猿圈分享-主流浏览器图片反防盗链方法总结
查看>>