汇编语言学习-数据处理的两个基本问题


数据处理的两个基本问题

思维导图

还是画这样的图,感觉思路清晰一些。新的东西并不多,大多感觉还是对以往问题的一个总结。
思维导图

综合实验

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

思路

具体的思路就是,利用内外循环,大循环循环00-10H-20H这样每一行的数据,小循环循环每个数据项

代码

中具体的字节\字。同时利用idata和si

assume cs:codesg,ds:data

data segment
    ;0
    db '1975','1976','1977','1978','1979','1980','1981','1982','1983'
    db '1984','1985','1986','1987','1988','1989','1990','1991','1992'
    db '1993','1994','1995'

    ;54H
    dd 16,22,382,1356,2390,8000,160000,24486,50065,97479,140417,197514
    dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5973000
    
    ;A8H
    dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
    dw 11542,14430,15257,17800
data ends

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

codesg segment
;正好印证了两个重点的地方 1.数据在什么地方 2.数据的大小
;算人均收入的那个还没有写--------------------------------------------------------
start:
    mov ax,data
    mov ds,ax
    
    mov ax,table
    mov es,ax;这里经常把ax写成table了

    mov bx,0;bx定位data段,bx year和收入都是四个字节可以公用,但是雇员数是两个字节的没办法公用
    mov bp,0;bp定位es段
    mov di,0;di用来在循环中服务于雇员数,因为它是两个字节,没办法跟year和outcome公用一个递增寄存器
    mov cx,21

    overall:
        push cx

        mov cx,2
        mov si,0
        year:
            ;年份的4字节---两个字
            mov ax,ds:[bx+si]
            mov es:[bp+si],ax
            add si,2
            loop year

        mov cx,2
        mov si,0
        outcome:
            ;收入的4字节---两个字
            mov ax,ds:[bx+54H+si]
            mov es:[bp+5H+si],ax
            add si,2
            loop outcome

        ;雇员数---一个字
        mov ax,ds:[di+0A8H]
        mov es:[bp+0AH],ax

        ;计算人均收入
        mov ax,es:[bp+5H];计算人均收入的,要用es的定位,那偏移量就得按照es的来。最开始写成ds的定位了[bx+54H]了
        mov dx,es:[bp+5H+2]
        div word ptr es:[bp+0AH]
        mov es:[bp+0DH],ax

        ;所有的空格
        ;第一次没有考虑到空格是一个字节,这里不应该用16位的,应该用8位的
        mov al,' '
        mov es:[bp+4H],al
        mov es:[bp+9H],al
        mov es:[bp+0FH],al

        pop cx
        add di,2
        add bx,4
        add bp,16
        loop overall

    ;计算收入

    mov ax,4c00h
    int 21h
codesg ends
end start

文章作者: 美食家李老叭
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 美食家李老叭 !
评论
  目录