汇编课程设计

assume cs:codesg,ss:stack

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 245980,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
       db 21 dup (‘year summ ne ?? ‘)
table ends

stack segment
       dw 32 dup (0)
stack ends

buffer segment
       db 32 dup (0)
buffer ends

codesg segment
start:
    mov ax,data
    mov ds,ax
    mov di,0
    mov si,4*21+4*21    ;指向员工

    mov ax,table
    mov es,ax           ;es存表
    mov bx,0
    call finishing      ;将data段格式化到es段了

    mov ax,stack
    mov ss,ax
    mov sp,64

    mov ax,buffer   ;数据缓冲区,接受转换后的每一个字符
    mov ds,ax
    mov si,0        ;ds:si指向缓冲区
    mov ax,table
    mov es,ax
    mov bx,0        ;ex:bx指向table
    mov dh,5        ;第一行
    mov cx,21

    s:
        push cx

        mov ax,es:[bx]
        mov ds:[si],ax
        mov ax,es:[bx+2]
        mov ds:[si+2],ax          ;向缓冲区中写入一条年信息
        mov byte ptr ds:[si+4],0
        mov dl,20                 ;显示年份
        mov cl,2
        call show_str

        push dx
        mov ax,es:[bx+5]          ;读取一条总收入信息
        mov dx,es:[bx+7]
        call dtoc                 ;调用dtoc将数值转换成字符串到缓冲区中
        pop dx
        mov dl,30                 ;显示员工
        call show_str

        push dx
        mov ax,es:[bx+0ah]        ;读取一条总人数信息
        mov dx,0
        call dtoc                 ;调用dtoc将数值转换成字符串到buffer中
        pop dx
        mov dl,40       ;显示字符串
        call show_str

        push dx
        mov ax,es:[bx+0dh]       ;读取一条人均收入信息
        mov dx,0
        call dtoc         ;调用dtoc将数值转换成字符串到buffer中
        pop dx
        mov dl,50       ;显示字符串
        call show_str

        add dh,2         ;每隔一行打印一条数据
        add bx,10h     ;让es:bx指向table的下一行数据

        pop cx
        loop s

    mov ax,4c00h
    int 21h

dtoc:
       push ax
       push bx
       push cx
       push dx
       push bp
       push si

       mov bp,0
  dtoc_s0:
       mov cx,10d
       call divdw
       push cx
       inc bp
       mov cx,ax        ;除到商为0为止
       inc cx
       loop dtoc_s0

       mov cx,bp
  dtoc_s:
       pop bx
       add bl,30h
       mov ds:[si],bl
       inc si
       loop dtoc_s

       mov byte ptr ds:[si],0

       pop si
       pop bp
       pop dx
       pop cx
       pop bx
       pop ax
       ret

divdw:  ;子程序定义开始
       push bx

       push ax
       mov ax,dx
       mov dx,0
       div cx
       mov bx,ax
       pop ax
       div cx
       mov cx,dx
       mov dx,bx

       pop bx
       ret

show_str:
    push ax
    push bx
    push cx
    push dx
    push es
    push bp
    push si

    mov ax,0b800H
    mov es,ax
    mov al,80*2     ;一行160个字节
    mul dh          ;刚开始是第五行;高位是行,低位是列

    mov dh,0
    add ax,dx       ;列数*2
    add ax,dx

    mov bp,ax
    mov al,cl       ;颜色
    mov cx,0
    mov cl,ds:[si]  ;ds:[si]为缓冲区指针
    inc si

    show_str_s:
        mov es:[bp],cl  ;低位ascii
        inc bp
        mov es:[bp],al  ;高位属性
        inc bp
        mov cl,ds:[si]  ;如果这个字节是0,退出循环
        inc si
        inc cx
    loop show_str_s

    pop si
    pop bp
    pop es
    pop dx
    pop cx
    pop bx
    pop ax
    ret

finishing:
    push ax
    push bx
    push cx
    push di
    push si
    push bp

    mov cx,21

    finishing_s:
    ;填充时间
    mov ax,ds:[di]
    mov es:[bx],ax
    mov ax,ds:[di+2]
    mov es:[bx+2],ax

    ;填充收入,收入是双字节的
    mov ax,ds:[di+4*21]
    mov dx,ds:[di+4*21+2]   ;高位
    mov es:[bx+5],ax
    mov es:[bx+5+2],dx

    ;填充人数
    mov bp,ds:[si]
    mov es:[bx+0aH],bp

    ;填充人均收入
    div bp
    mov es:[bx+0dH],ax

    add bx,16   ;table换一行
    add di,4    ;年份换一个
    add si,2    ;员工修改两个字节
    loop finishing_s

    pop bp
    pop si
    pop di
    pop cx
    pop bx
    pop ax
    ret

codesg ends
end start

时间: 2024-10-08 12:07:44

汇编课程设计的相关文章

汇编课程设计1

要求:把试验七的数据显示在屏幕上 assume cs:code stack segment dw 0,0,0,0,0,0,0,0 stack ends ;******************************数据段****************************** data segment db '1975','1976','1977','1978','1979','1980','1981','1982','1983' db '1984','1985','1986','1987'

汇编实验课程设计1之设置时间半成品

;    感觉双休就想睡觉,这鬼天气,一直下雨.设置时间未完成,只是加了一个所谓的主界面;   display system time. press f1 to change the color displayed, press esc to return main list. f3 exit;    clear_screen 清空屏幕assume cs:codesgstacksg segment    dw 128 dup(0)stacksg endscodesg segment      

20155211课程设计个人结题报告

20155211课程设计个人结题报告 个人贡献 参与课设题目讨论及完成全过程 辅助调试代码 资料收集 撰写小组结题报告 实践过程中的问题及解决: 编译之后出现如下错误:..\OBJ\HZ.axf: error: L6050U: The code size of this image (47788 bytes) exceeds the maximum allowed for this version of the linker. 出现错误的原因是:没有完全破解. 解决办法是:按照D:\实验箱资料2

南京邮电大学课程设计——加速度检测应用

2周的课程设计花了3天(其实真相是花了2个小时就写好了,只是老师一会让我改这一会让我改那而已)..这个时间可能有点长了,况且读者们看以下的的题目或许就要开始嘲笑我了,"这么简单的一个东西居然还要用那么久"...哈哈,不喜勿吐槽.... 题目3.压力监测应用 (1) 检测压力是否超过阈值 (2) 若超过压力阈值,则通过一条短信通知联系人,短信内容需包含当前压力. (3) 可设置联系人名称和联系手机号码 (4) 可设置压力阈值 (5) 记录告警信息到数据库,方便查询 以下开始直接贴代码:

Android课程设计第六天欢迎界面(跳转)

注意:课程设计只为完成任务,不做细节描述~ package com.example.myapplication; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.view.View; import android.widget.TextView; /** * Created by 樱花落舞

软件工程课程设计指导随笔

本学期带14信息01班的<软件工程课程设计>,已经进入了尾声. 两周的课程设计,要求学生完成一个多角色的智能菜单系统,课程设计的任务是要求根据不同角色控制访问每个菜单项的权限,用户允许有多个角色:角色和用户都可以增加修改,另外只有管理员角色具有添加角色和用户的权限:而除开管理员之外的所有用户都不能调整角色和角色菜单:用户只能由管理员添加,而用户的个人信息又只能由个人修改:为了增加工作量,添加了一个日志功能,要求记住每次用户的登陆.退出时间和前端计算机的IP地址. 既然是软件工程的课程设计,当然

Android课程设计第二天界面排版

注意:课程设计只为完成任务,不做细节描述~ 老师叫我们做一个这个样子,然后.. 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 xmlns:tools="http://schemas.android.com/tools"

java课程设计

程序设计实训报告 题目:计算数学表达式程序 1.课设目的 (1)复习巩固java语言的基础知识,进一步加深对java语言的理解和掌握 (2)课设为大家提供一个即动手又动脑,独立实践的机会.提高我们适应实际,编程的能力 (3)培养我们在项目开发中创新意识及能力,通过亲身实践,利用所学编写简单的面向对象程序,提高对面向对象及java语言的解释 2.设计题目分析 (1)由用户输入一个简单的四则运算表达式,求出其计算结果后显示 (2)允许在表达式中出现常用的数学函数,如取整.三角函数.倒数.平方根.平方

51单片机课程设计:基于DS18B20的温度报警器

51单片机课程设计:基于DS18B20的温度报警器 本程序用于读取DS18B20温度,同时具备报警功能,工程分为3个文件,main.c.temp.c.temp.h,经本人修改部分代码,适用于吉林农业大学51开发板,其他朋友亦可移植到其他型号开发板.工程文件在文章最下方. 1.main.c文件 /*********************************说明****************************************** 本程序用于读取温度检测模块DS18B20数值,并