找回密码
 register

QQ登录

只需一步,快速开始

查看: 12|回复: 1

[汇编语言] [零基础入门学习]·42·实验七·寻址方式在结构化数据访问中的应用

[复制链接]

[汇编语言] [零基础入门学习]·42·实验七·寻址方式在结构化数据访问中的应用

[复制链接]
  • 打卡等级:热心大叔
  • 打卡总天数:94
  • 打卡月天数:17
  • 打卡总奖励:94
  • 最近打卡:2025-01-18 01:28:20
Waylee

主题

0

回帖

1万

积分

仙帝

积分
11929
Waylee 2025-1-17 13:15 | 显示全部楼层 |阅读模式 | Google Chrome | Windows 10

马上注册,查看网站隐藏内容!!

您需要 登录 才可以下载或查看,没有账号?register

×


实验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:codesg

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'
    ; 以上是表示 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,14430,15257,17800
    ; 以上是表示 21 年公司雇员人数的 21 个 word 型数据

data ends

table segment
    db 21 dup ('year summ ne ?? ')
table ends

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

003.webp

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

注意,这个程序是目前为止最复杂的程序,它几乎用到了我们以前学过的所有知识和编程技巧。所以,这个程序是对我们从前学习的最好的实践总结。请认真完成。

  • 打卡等级:热心大叔
  • 打卡总天数:94
  • 打卡月天数:17
  • 打卡总奖励:94
  • 最近打卡:2025-01-18 01:28:20
楼主
Waylee 楼主

主题

0

回帖

1万

积分

仙帝

积分
11929
Waylee 2025-1-17 17:45 | 显示全部楼层 | Google Chrome | Windows 10

雪舞回答:(可能存在更优方案,仅供参考)

assume cs:codesg,ds: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'
    ; 以上是表示 21 年的 21 个字符串   (0~53H)

    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 型数据 (54H~0A7H)

    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,15257,17800
    ; 以上是表示 21 年公司雇员人数的 21 个 word 型数据   (0A8H~0D1H)      

data ends

table segment
    db 21 dup ('year summ ne ?? ')
table ends

codesg segment
    start:
            mov ax,data             ;数组数据
            mov ds,ax
            mov ax,table            ;结构化数据
            mov es,ax

            mov bx,0
            mov bp,0
            mov di,0

            mov cx,21
    s0:     
            mov ax,ds:0h[bp]        ;存放年份数据(4字节)
            mov es:0h[bx],ax
            mov ax,ds:2h[bp]
            mov es:2h[bx],ax

            mov ax,ds:54h[bp]       ;存放公司收入(4字节)
            mov es:5h[bx],ax
            mov ax,ds:56h[bp]
            mov es:7h[bx],ax

            mov ax,ds:[di].0a8h     ;存放雇员人数(2字节)
            mov es:[bx].0ah,ax
                                    ;计算人均收入(取整,2字节)
            mov ax,ds:[bp].54h[0]   ;存放被除数(32位)
            mov dx,ds:[bp].54h[2]
            div word ptr es:[bx].0ah;除法运算,除以人数
            mov es:[bx].0dh,ax      ;将商结果储存

            add di,2h               ;确定人数
            add bp,4h               ;确定年份和收入
            add bx,10h              ;确定每行的列数
            loop s0

            mov ax,4c00h
            int 21h
codesg ends

end start
您需要登录后才可以回帖 登录 | register

本版积分规则

雪舞知识库 | 浙ICP备15015590号-1 | 萌ICP备20232229号|浙公网安备33048102000118号 |天天打卡

GMT+8, 2025-1-18 10:00 , Processed in 0.133376 second(s), 7 queries , Redis On.

Powered by XueWu Licensed

Copyright © Tencent Cloud.

快速回复 返回顶部 返回列表