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

;实验七  寻址方式在结构化数据访问中的应用;编程  将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整)
;结果也按照下面的格式保存在table段中
assume cs:code,ds:data,ss:stack
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';以上是表示21年的21个字符串  year   21*4=84dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司总收入的21个数据   21*4=84dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11452,14430,15257,17800;以上是表示21年公司的员工数量
data endstable segment; '0123456789ABCDEF'db 21 dup('year sumn ne ?? ')
table endsstack segment stackdb 128 dup (0)
stack ends

先用debug查看这些数据在内存中的分布

;实验七  寻址方式在结构化数据访问中的应用;编程  将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整)
;结果也按照下面的格式保存在table段中
assume cs:code,ds:data,ss:stack
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';以上是表示21年的21个字符串  yeardd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司总收入的21个数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11452,14430,15257,17800;以上是表示21年公司的员工数量
data endstable segment; '0123456789ABCDEF'db 21 dup('year sumn ne ?? ')
table endsstack segment stackdb 128 dup (0)
stack endscode segmentstart:mov ax,stackmov ss,axmov sp,128mov ax,datamov ds,ax ;数据从哪里来mov ax,tablemov es,ax  ;数据到哪里去mov si,0  ;年份在data中'1975'中的1偏移地址为0                       ;ds:[si]mov di,84 ;公司总收入的第一个数据16,它的偏移地址在data段中是84(54H)    ;ds:[di]mov bx,168;公司的员工数量,第一个数据3,在data段中的偏移地址是168(A8H)  ;ds:[bx]mov bp,0  ;'year sumn ne ?? '的第一个字母y,在table段中的偏移地址是0      ;es:[bp];bp寄存器默认的段寄存器是ss,bp为偏移地址->ss:[bp]mov cx,21;处理21行;处理年份
inputtable: push ds:[si]pop es:[bp]push ds:[si+2]pop es:[bp+2];处理总收入——低16位放在AX,高16位放在DXmov ax,ds:[di]mov dx,ds:[di+2]mov es:[bp+5],axmov es:[bp+7],dx;  '0123456789ABCDEF';db 21 dup('year sumn ne ?? ') ;低位放到5,高位放到7;处理员工数量push ds:[bx]pop es:[bp+0AH];这里用div 内存 ;因为寄存器不够用了div word ptr ds:[bx]mov es:[bp+0DH],axadd si,4add di,4add bx,2loop inputtablemov ax,4c00hint 21hcode ends
end start

代码改进:增加了代码可读性,已经减少寄存器的使用

;实验七  寻址方式在结构化数据访问中的应用;编程  将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整)
;结果也按照下面的格式保存在table段中
assume cs:code,ds:data,ss:stack
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';以上是表示21年的21个字符串  yeardd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;以上是表示21年公司总收入的21个数据dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11452,14430,15257,17800;以上是表示21年公司的员工数量
data endstable segment; '0123456789ABCDEF'db 21 dup('year sumn ne ?? ')
table endsstack segment stackdb 128 dup (0)
stack endscode segmentstart:mov ax,stackmov ss,axmov sp,128mov ax,datamov ds,axmov ax,tablemov es,axmov si,0  ;年份在data中'1975'中的1偏移地址为0                    ;ds:[si]mov di,21*4 ;公司总收入的第一个数据16,它的偏移地址在data段中是84(54H)    ;ds:[di]mov bx,21*4+21*4;公司的员工数量,第一个数据3,在data段中的偏移地址是168(A8H)  ;ds:[bx]mov bp,0  ;'year sumn ne ?? '的第一个字母y,在table段中的偏移地址是0      ;es:[bp];bp寄存器默认的段寄存器是ss,bp为偏移地址->ss:[bp]mov cx,21;处理21行;处理年份
inputtable: push ds:[si+0]pop es:[bp+0]push ds:[si+2]pop es:[bp+2];处理总收入——低16位放在AX,高16位放在DXmov ax,ds:[si+21*4]mov dx,ds:[si+21*4+2]mov es:[bp+5],axmov es:[bp+7],dx;  '0123456789ABCDEF';db 21 dup('year sumn ne ?? ') ;低位放到5,高位放到7;处理员工数量push ds:[bx]pop es:[bp+0AH];这里用div 内存 ;因为寄存器不够用了div word ptr ds:[bx]mov es:[bp+0DH],axadd si,4;   add di,4add bx,2loop inputtablemov ax,4c00hint 21hcode ends
end start

具体代码:

assume cs:codesg,ds:data,ss:table
data 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';定义字节数据,存放年dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000;定义双字数据,存放收入(被除数)。dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226dw 11452,14430,15257,17800;定义字形数据,存雇员人数(除数)。
data ends
table segmentdb 21 dup ('year summ ne ?? ')
table ends
;定义字形数据,21个年平均值
codesg segment
start:  mov ax,data mov ds,ax ;初始数据段mov ax,table mov ss,ax ;将表格定位给栈段(用栈段存放平均值)mov bx,0 mov si,0    ;数据段中年份中的数据mov bp,0    ;表格第一行mov cx,21   ;21行所以21次循环
s0:mov ax,[bx+si]   ;读取数据段中的年份数据的前2个字节,交给AXmov [bp+0],ax    ;年份数据的前2个字节放入到表格(因为表格前面定义给了SS栈段)add si,2         ;指向年份后2个字节mov ax,[bx+si]   ;读取数据段中年份数据的后2个字节,交给AXmov [bp+2],ax    ;年份数据的后2个字节放入到表格add si,2         ;指向数据段中下一个年份add bp,10h       ;转到下一行loop s0
;S0循环是将数据段中(0-53H)的年份读取出来,放到表格的年份(0-3)列中mov cx,21        ;21次循环处理收入mov bp,0         ;收入的行mov si,0         ;数据段中收入数据指针
s1:mov ax,[bx+si+84] ;因为数据段中年份数据是21行4个字节,共占了数据段84个字节。;所以收入第一个数据是从数据段第84个字节处开始的,读取后给AX。mov [bp+5],ax     ;收入数据放入到表格,因为年份占了前4列,加上空格,所以放到第5列add si,2          ;处理数据的后2个字节mov ax,[bx+si+84] ;读取数据的后2个字节,放入AXmov [bp+7],ax     ;收入数据的后2个字节放入到表格add si,2          ;指向下一个数据add bp,10h        ;指向下一行loop s1
;S1循环是将数据段中(54H-0A7H)的收入读取出来,放到表格的收入(5-8)列中mov cx,21          ;21次循环mov bp,0           ;定位表格的行mov si,0           ;数据段中雇员数据指针
s2:mov ax,[bx+si+168] ;因为数据段中年份与收入数据共占了168个字节。;所以雇员第一个数据是从数据段第168个字节处开始的,读出给AXmov [bp+10],ax     ;将雇员数据放入到表格add si,2           ;指向数据段下一个雇员数据add bp,10h         ;指向下一行loop s2
;S2循环是将数据段中(0A8H-0D1H)的雇员读取出来,放到表格的收入(A-B)列中mov cx,21          ;21次循环,计算平均收入值mov bp,0
s3:mov ax,[bp+5]      mov dx,[bp+7]      ;放入被除数(收入),高位给DX,低位给AXdiv word ptr [bp+10] ;放入除数(雇员)mov [bp+13],ax       ;商(平均值)放入表格add bp,10h           ;指向下一行loop s3
;S2循环是计算平均值,放到表格的人均收入(D-E)列中mov ax,4c00hint 21h
codesg ends
end start

实验七 寻址方式在结构化数据访问中的应用相关推荐

  1. 重做实验七 寻址方式在结构化数据访问中的应用

    先处理第一行所有数据: ;实验七 寻址方式在结构化数据访问中的应用;编程 将data段中的数据 按照如下格式写到table段中,并计算21年中的人均收入(取整) ;结果也按照下面的格式保存在table ...

  2. 解决 王爽写的汇编语言的第七个验七- 寻址方式在结构化数据访问中的应用

    原文: 汇编语言-(第三版) 王爽-著 (实验七) 寻址方式在结构化数据访问中的应用 https://www.52pojie.cn/thread-1241289-1-1.html (出处: 吾爱破解论 ...

  3. 汇编语言:实验7寻址方式在结构化数据访问中的应用

    实验介绍 下面程序中,已经定义好了这些数据: assume cs:codesg,ds:tabledata segment db '1975','1976','1977','1978','1979',' ...

  4. 王爽版汇编语言实验7 寻址方式在结构化数据访问中的应用

    实验在P172 代码如下 assume cs:codesg,ds:datadata segmentdb'1975','1976','1977','1978','1979','1980','1981', ...

  5. 实验7 寻址方式在结构化数据访问总的应用

    做本实验时明显感觉寄存器不够用,所以要对bx,si,di,bp的使用仔细阅读,本题比较琐碎,做本题更需要的是耐心,耐心,耐心. assume cs:codedata segment db '1975' ...

  6. Python爬虫(七)_非结构化数据与结构化数据

    页面解析与数据提取 实际上爬虫一共就四个主要步骤: 定(要知道你准备在哪个范围或者网站去搜索) 爬(将所有的网站的内容全部爬下来) 取(分析数据,去掉对我们没用处的数据) 存(按照我们想要的方式存储和 ...

  7. 非结构化数据定义、处理方法及重要性

    一.非结构化数据定义 不方便用数据库二维逻辑表来表现的数据即称为非结构化数据,包括所有格式的办公文档. 文本.图片. 标准通用标记语言下的子集 XML. HTML.各类报表.图像和音频/视频信息等等. ...

  8. 浅述非结构化数据与非结构化处理

    文章目录 一.非结构化数据的定义 二.非结构化处理的重要性 1. 有大量的非结构化数据需要处理 2. 非结构化数据蕴藏着大量的价值 3. 非结构化处理不需要依靠数据科学家团队 4. 终端用户授权 三. ...

  9. neo4j图数据库:结构化数据流水线、非结构化数据流水线

    日萌社 人工智能AI:Keras PyTorch MXNet TensorFlow PaddlePaddle 深度学习实战(不定时更新) 智能对话系统:Unit对话API 在线聊天的总体架构与工具介绍 ...

最新文章

  1. LLDB命令查看内存的分配历史
  2. uvc摄像头代码解析7
  3. ORACLE常用性能监控SQL【一】
  4. vim技巧之删除引号之间的的快捷键
  5. 移动互联网开始降温:“人才热”退烧
  6. ubuntu7.10下的vi用的怪怪的
  7. 程序员除了上班,还可以怎么赚钱?
  8. 多媒体计算机是多媒体教室的核心部件,浅析多媒体教室的设备配置
  9. 图解Http读完有感
  10. “偷师腾讯”,苹果要分游戏这杯羹!| 畅言
  11. 在线Excel文件解析转换成JSON格式
  12. renren-fast-vue:关闭ESLint检测
  13. Unix与Linux、Minx、Minix
  14. Python从入门到实践-第三章习题
  15. 4种常见的鉴权方式及说明
  16. 51--可调频率和占空比的PWM波
  17. 如何写好一份产品需求文档
  18. 关于数据库事务隔离级别的介绍
  19. 【交往智慧】004.己所不欲,勿施于人
  20. 《计算机网络》期末试卷2020

热门文章

  1. error: goland --build constraints exclude all Go files
  2. Golang中调用“方法”的简单理解
  3. MAVEN构建的各个环节及常用maven命令
  4. idea删除module
  5. 前端入门11-JavaScript语法之数组
  6. j2ee之存储过程调用
  7. BZOJ 4259 FFT
  8. EMVTag系列9《卡片管理数据》
  9. 读《程序设计实践》之一 风格
  10. Cognos 云最佳实践: 调整架构提供性能和可伸缩性