汇编语言 第三版 王爽 实验七 独立完成

转载请注明出处

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型数据
    ;可以看成 3 个数组
            ; ds:[0]   0
            ; ds:[54h] 84
            ; ds:[a8h] 168
data ends

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

; stack segment
;   db 16 dup ('0')
; stack ends

codesg segment
    start:  mov ax, data
            mov ds, ax      ;初始化 ds 段

            mov ax, table
            mov es, ax      ;初始化 es 段

            ; mov ax, stack
            ; mov ss, ax        
            ; mov sp, 10h       ;初始化 ss 栈

            mov bp, 0       ;控制数组索引
            mov di, 0

            mov bx, 0       ;控制table的每一行
            mov cx, 21      ;循环次数21次,21个结构体
        s:  
            mov si, 0;
            mov ax, ds:[0 + bp]
            mov es:[bx].0[si], ax
            add si, 2
            mov ax, ds:[0 + bp + 2]
            mov es:[bx].0[si], ax
            ;----------------年份复制完成

            mov byte ptr es:[bx + 4], ' '   ;空格

            mov si, 0;
            mov ax, ds:[54h + bp]
            mov es:[bx].5[si], ax
            add si, 2
            mov ax, ds:[54h + bp + 2]
            mov es:[bx].5[si], ax
            ;----------------收入复制完成

            mov byte ptr es:[bx + 9], ' '   ;空格

            mov si, 0;
            mov ax, ds:[168 + di]
            mov es:[bx].10[si], ax
            ;----------------雇员数复制完成

            mov byte ptr es:[bx + 12], ' '  ;空格

            mov si, 0
            ; push bx           ;把bx存起来,因为除法要用
            mov ax, ds:[168 + di];用内存也可以存除法的除数
            mov ds:[0], ax
            ; mov bx, ds:[168 + di] ;mov bx, ax ;因为ax值暂没被覆盖,除数为16位
            mov ax, ds:[54h + bp]   ;除数为16位,被除数32位,低16位放入ax
            mov dx, ds:[54h + bp + 2];高16位放入dx
            div word ptr ds:[0]
            ; pop  bx           ;除法算完之后再复原
            mov es:[bx].13[si], ax
            ;----------------平均收入计算完成

            mov byte ptr es:[bx + 15], ' '  ;空格

            add bp, 4       ;每次复制两个字节
            add di, 2       ;每次复制一个字节
            add bx, 16      ;每次移动一个结构体的数据
        loop s 

            mov ax, 4c00h
            int 21h

codesg ends
    end start
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值