最近在看王爽老师的汇编语言,写的确实很好,简单易懂,引人入胜!相比较我们学校一些老师的书籍,那简直是··· 惨绝人寰

先说一下思路:

题目的简单表述就是:将一个段的内容复制到另一个段,不过要排列成固定的形式,然后还要做一个计算,并且将结果也保存在后面的段中。

数据的读取:

汇编源程序中定义的同一个段中的数据是连续排放的(不同的段中的数据则会另起一个地址),所以我们可以将data段中的数据看成三个连续排放的数组:

  1. 它们各自的起始地址不一样。
  2. 因为数组成员的长度不一样,所以需要两个变量控制各个数组内成员的访问,si、di。
数据的存入:
table段是一个具有21个同一个结构的布局,所以可以用C语言中的结构体数组来看待它:
  1. 用一个变量来控制各个数组成员的访问,bx
  2. 在结构体内部直接加上相对偏移地址即可。
除法操作:
按顺序存入年份、收入之后,先不慌存入雇员数,因为此时ax、dx寄存器中正好存储的是收入,所以随之将人均收入计算出来并存入,随后再存入雇员数。
assume cs:code
data segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983'db '1984','1985','1986','1987','1988','1989','1990','1991','1992'db '1993','1994','1995'dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11542,14430,15257,17800
data endstable segmentdb 21 dup ('year summ ne ?? ')
table endscode segment
start:  mov ax,datamov ds,axmov ax,tablemov es,axmov ax,0mov bx,0mov dx,0;存储四字节数据的高两字节mov si,0mov di,0mov cx,21s:mov ax,[si];年份mov es:[bx],axmov dx,[si+2]mov es:[bx+2],dxmov ax,[84+si];收入。84 = 4字节*21mov es:[bx+5],axmov dx,[84+si+2]mov es:[bx+7],dxdiv word ptr [168+di];平均工资。先计算人均收入。168 = 84+ 4字节*21mov es:[bx+13],axmov ax,[168+di];雇员mov es:[bx+10],axadd bx,16;bx控制结构体数组成员的存入add si,4;si控制年份、收入的读取add di,2;di控制雇员数的读取loop smov ax,4c00hint 21h
code ends
end start

程序完成之后,我也搜了一些其他人的程序,各式各样,有多个loop的、有用到栈的,反观我自己写的程序,我觉得没必要那么复杂,简单的思路足矣。

补充:将loop那段程序改写得更加结构化如下:

      s:mov ax,[si]mov es:[bx],axmov dx,[si+2]mov es:[bx].2,dx;结构体mov ax,84[si];数组mov es:[bx].5,axmov dx,84[si+2]mov es:[bx].7,dxdiv word ptr 168[di]mov es:[bx].13,axmov ax,168[di]mov es:[bx].10,axadd bx,16add si,4add di,2loop s

王爽 汇编语言 实验七相关推荐

  1. 8086汇编学习小记-王爽汇编语言实验12

    8086汇编学习小记-王爽汇编语言实验12 0号中断处理程序,开始安装在0000:0200处的程序最后用死循环导致显示不出'divided error',改成直接退出就正常显示了.注意修改ss,sp之 ...

  2. 王爽 汇编语言 实验全部答案

    实验一 实验二 实验三 实验四 实验五 实验六 实验七 实验八 实验九 实验十 实验十一 实验十二 实验十三 实验十四 实验十五 (未完持续,正在写ing)

  3. 王爽汇编语言 实验11

    第十章的实验11出的有点不同.一是相对简单一些,还有似乎没有用到太多本章的内容.比如MOVSB 就没用到.下面是我的代码  1 assume ds:datasg, cs:code    2 datas ...

  4. 王爽汇编语言 实验5

    (1).1   当debug未执行我们的代码段指令时,从075A:0000开始的256字节是PSP段(之前的实验中已经进行过相关解释),而此时我们定义的数据是从075A:0100开始存放的.这个时候D ...

  5. 菜鸡记录-王爽-汇编语言-实验十(编写子程序-解决除法溢出)

    题目: 代码: assume cs:code,ss:stackstack segmentdw 8 dup(0) stack endscode segment start:mov ax,stackmov ...

  6. 菜鸡记录-王爽-汇编语言-实验十(编写子程序-显示字符串)

    题目: 代码: assume cs:codedata segmentdb 'Welcome to masm!',0data endscode segmentstart: mov dh,8mov dl, ...

  7. 王爽汇编语言实验7一个很好的解法(转)

    assume cs:codesg,ds:datadata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982','1983 ...

  8. 王爽汇编语言 实验14

    assume cs:codecode segment start:;年份 mov al,9out 70h,alin al,71hmov ah,almov cl,4shr ah,cland al,000 ...

  9. 王爽汇编语言 实验15

    解: assume cs:codestack segmentdb 128 dup(0) stack endscode segment start:mov ax,stackmov ss,axmov sp ...

最新文章

  1. iOS和android运存机制,为什么苹果4GB运存却比安卓8GB更丝滑流畅?看完立马涨知识了...
  2. 7.4 程序示例--PCA for 加速学习-机器学习笔记-斯坦福吴恩达教授
  3. Python 绘图问题:Matplotlib中plt.rcParams[]使用方法 rcsetup.py matplotlibrc
  4. 实现strstr库函数功能
  5. ubuntu上使用sqlite3
  6. 「零门槛多语言 Python/C/C# 通用思想学习系列」第一篇:经典HelloWorld
  7. [js] 获取浏览器当前页面的滚动条高度的兼容写法
  8. Spring Boot引起的“堆外内存泄漏”排查及经验总结
  9. 使用Jenkins+Sonarqueb进行自动化测试和代码质量检测
  10. 关系型数据库与NoSQL数据库简述
  11. Maven实战---两个war包的调用
  12. 听说下雨天,子序列和孤单的你更配哦~
  13. 目标检测(Object Detection)综述--R-CNN/Fast R-CNN/Faster R-CNN/YOLO/SSD
  14. Redis 服务器安装
  15. spring boot / cloud (二十) 相同服务,发布不同版本,支撑并行的业务需求
  16. github下载的代码、怎么使用 python_Python学习20-补充内容之GitHub安装使用
  17. VBScript基础
  18. windows下 C++ openCV配置及x86编译(傻瓜式教程)
  19. python文档字符串和注释的区别,加载模块时,Python文档字符串和注释是否存储在内存中?...
  20. JITSI开源视频直播

热门文章

  1. keil中更改stm32芯片类型需要修改的配置
  2. 决策树——(一)决策树的思想
  3. 开发一套CRM系统要花多少钱?收费标准又是怎么样?
  4. exit abort return 区别
  5. 以matlab为基础数学分析,matlab与数学分析.docx
  6. 开发Enterprise JavaBeans
  7. 什么叫SSH?原理详解,看这一篇就够了!
  8. faststone capture注册码
  9. 定时开机-开机自动运行程序-定时关机(windows 下)
  10. android去掉开机锁屏,android 去掉锁屏