王爽汇编语言第三版实验7

实验7 寻址方式在结构化数据访问中的应用,即寻址方式与div指令的综合运用

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
       ;结构体table段在debug中一行的格式
       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   ;定位结构体table段中的数组元素
            mov di, 0   ;定位data中的4字节数据
            mov si, 0   ;定位data中的2字节数据
            mov cx, 15H
    		
          s:;转移年份到结构体table段中
            mov ax, ds:[di];
            mov es:[bx], ax
            mov ax, ds:[di+2]
            mov es:[bx+2], ax
            ;添加空格20,这里不用00因为收入的4字节数据最后的00容易混淆;为了统一,下面统一用20作为空格
            mov byte ptr es:[bx+4], 20H
    
            ;转移收入到结构体table段中
            ;作为被除数
            mov ax, ds:[di+84];
            mov es:[bx+5], ax
            mov ax, ds:[di+86]
            mov es:[bx+7], ax
            ;添加空格 
            mov byte ptr es:[bx+9], 20H
    
            ;转移雇员数量到结构体table段中
            ;作为除数
            mov ax, ds:[si+168]
            mov es:[bx+10], ax
            ;添加空格 
            mov byte ptr es:[bx+12], 20H
    
            ;计算人均收入,并转移人均收入到结构体table段中
            mov ax, es:[bx+5]   ;低16位
            mov dx, es:[bx+7]   ;高16位
            div word ptr es:[bx+10]
            mov es:[bx+13], ax  ;因为题目中要求人均收入取整,所以用ax存储除法操作的商,不需要余数 
            ;添加空格 
            mov byte ptr es:[bx+15], 20H
    
            ;一个循环操作完成,bx加16(在debug中一行刚好16字节),di加2
            add bx, 16  
            add di, 4
            add si, 2
            loop s
    
            mov ax, 4c00h
            int 21h
    codesg ends
    end start

效果如下:
在这里插入图片描述
绿色方框圈起来的部分,依次为:收入、雇员数量、人均收入、年份。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值