汇编语言(王爽) 实验十 【课程设计一】

实验要求:

将实验7中的power idea公司的数据在屏幕上输出。

实验结果:

实验思路:

①在实验七的基础上,先把数据放入table段。

②外层循环此数位21次,即显示这21行数据。

③问题即简化为如何显示一行数据。

④难点在于大于65535的数据显示,必须分高位和低位。以及每次处理数据时,因寄存器有限,不得不将寄存器的值入栈,借用,然后出栈恢复。

⑤在处理除法时,务必要将dx的值置为0。避免被误认为高位存储在dx,低位存储在ax的除法运算,结果与期望值不一致。

把数据放入table段

trans:
        mov bp,0
        mov bx,0
        mov si,0
        mov di,0

        mov cx,21
        s:
        mov ax,ds:[bx]
        mov ss:[bp],ax
        mov dx,ds:[bx+2]
        mov ss:[bp+2],dx
        mov byte ptr ss:[bp+4],' '

        mov ax,ds:[si+84]
        mov ss:[bp+5],ax
        mov dx,ds:[si+86]
        mov ss:[bp+7],dx
        mov byte ptr ss:[bp+9],' '

        div word ptr ds:[di+168]
        mov ss:[bp+13],ax

        mov ax,ds:[di+168]
        mov ss:[bp+10],ax

        mov byte ptr ss:[bp+12],' '
        mov byte ptr ss:[bp+15],' '

        add bp,16
        add si,4
        add di,2
        add bx,4
        loop s
        ret

显示年份

mov cx,5
    s2:
        mov al,ss:[si]
        mov ah,2
        mov es:[di],ax
        add si,1
        add di,2
        loop s2

显示总收入

divw:
        push ax
        push dx

        pop ax
        mov cx,ax
        mov si,0
        mov bx,10

        mov dx,0


    s3:
        div bx
        add dx,30H
        mov ds:[si],dx
        inc si
        mov cx,ax
        mov dx,0
        inc cx
        loop s3

        pop ax

        dec si
        mov dx,ds:[si]
        sub dx,30H
        add ax,dx
        mov cx,ax
    s4:
        div bx
        add dx,30H
        mov ds:[si],dx
        inc si
        mov cx,ax
        mov dx,0
        inc cx
        loop s4

        mov cx,si
        dec si
    s5:
        mov al,ds:[si]
        mov es:[di],al
        mov ah,2
        mov es:[di+1],ah
        dec si
        add di,2
        loop s5



        ret

显示总人数和平均收入

show:
        push ax
        pop ax
        mov dx,0
        mov bx,10
        mov cx,ax
        mov si,0
    s6:
        div bx
        add dx,30H
        mov ds:[si],dx
        inc si
        mov cx,ax
        mov dx,0
        inc cx
        loop s6

        mov cx,si
        dec si
    s7:
        mov al,ds:[si]
        mov es:[di],al
        mov ah,2
        mov es:[di+1],ah
        dec si
        add di,2
        loop s7

        ret

主函数

start:
        mov ax,data
        mov ds,ax

        mov ax,table
        mov ss,ax

        mov ax,0b800h
        mov es,ax
        call trans
        call dtoc

        mov ax,4c00h
        int 21h

显示table段子程序

dtoc:

        mov bp,0
        mov cx,21

    s1:
        push cx
        mov si,0
        mov di,160*2

        mov ax,bp
        mov dx,160
        mul dx
        add di,ax

        mov ax,bp
        mov dx,16
        mul dx
        add si,ax

        mov cx,5
    s2:
        mov al,ss:[si]
        mov ah,2
        mov es:[di],ax
        add si,1
        add di,2
        loop s2




        mov ax,temp
        mov ds,ax
        mov ax,ss:[si] ;low
        mov dx,ss:[si+2]  ;high
        push si

        call divw


        pop si
        add si,4


        ;empty
        mov al,ss:[si]
        mov ah,2
        mov es:[di],ax
        add si,1
        add di,2


        mov ax,ss:[si]
        push si

        call show


        pop si
        add si,2

        ;empty
        mov al,ss:[si]
        mov ah,2
        mov es:[di],ax
        add si,1
        add di,2

        mov ax,ss:[si]
        push si
        call show
        pop si
        pop cx
        inc bp
        loop s1
        ret

每次出错都要debug一下。举步维艰。

幸好写完了。

原文地址:https://www.cnblogs.com/zhenzhenhuang/p/6911520.html