zoukankan      html  css  js  c++  java
  • 汇编语言(王爽) 实验十 【课程设计一】

    实验要求:

    将实验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一下。举步维艰。

    幸好写完了。

  • 相关阅读:
    优化 Markdown 在 Notepad++ 中的使用体验
    error C1128: 节数超过对象文件格式限制: 请使用 /bigobj 进行编译
    Git: 代码冲突常见解决方法
    fatal error c1001 编译器中发生内部错误 OpenMesh6.3
    error C2448 函数样式初始值设定项类似函数定义
    VS Code 配置Python
    15分钟掌握 Git
    notepad++快捷键
    【Python笔记】第4章 操作列表
    【MySQL】MySQL按中文排序
  • 原文地址:https://www.cnblogs.com/zhenzhenhuang/p/6911520.html
Copyright © 2011-2022 走看看