王爽汇编语言课程设计1
来源:互联网 发布:星际之门 知乎 编辑:程序博客网 时间:2024/05/08 15:11
一、实验要求
在屏幕输出实验七中的数据
二、设计思路
1、将实验七的程序编写成一个子过程finishing,在主程序中调用,可以获得实验七种指定格式的table段数据,设置es:bx指向table段中第一行
2、创建一个数据缓存区buffer,设置ds:si指向buffer
3、对于字符串,从table中读取后写入buffer,末尾写入0;对于数值,直接调用实验10中写好的dtoc转换到buffer中
4、每次更新buffer中数据后调用实验10中的show_str来显示字符串
三、详细设计
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 mov bx,0 call finishing mov ax,stack mov ss,ax mov sp,64 mov ax,buffer ;定义一个数据缓冲区,用于接收转换后的每个字符串,用ds:si指向缓冲区 mov ds,ax mov si,0 mov ax,table ;定义指向填充后table的指针,用es:bx指向table mov es,ax mov bx,0 mov dh,5 ;控制第一条数据在哪一行 mov cx,21 ;总数据有21行,循环21次 s: push cx mov ax,es:[bx] ;向buffer中写入一条年信息 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将数值转换成字符串到buffer中 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 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 mul dh mov dh,0 add ax,dx add ax,dx mov bp,ax mov al,cl mov cx,0 mov cl,ds:[si] inc si show_str_s: mov es:[bp],cl inc bp mov es:[bp],al inc bp mov cl,ds:[si] ;每次将一个字节的数据读入cl中,如果这个字节为0,循环结束 inc si inc cx loop show_str_s pop si ;恢复调用前寄存器环境 pop bp pop es pop dx pop cx pop bx pop ax ret 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 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 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 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 四、实验结果
- 王爽汇编语言课程设计1
- 王爽汇编语言课程设计1
- 王爽汇编语言课程设计1
- 王爽汇编语言课程设计1
- 汇编语言 王爽第二版 课程设计1
- 王爽汇编语言课程设计2
- 汇编语言王爽课程设计二
- 王爽汇编语言课程设计2
- 王爽 <<汇编语言>> 课程设计1
- 王爽版《汇编语言》课程设计1
- 《汇编语言》课程设计1答案
- 课程设计1 -------------- 王爽 汇编语言
- 王爽《汇编语言》课程设计1
- 王爽《汇编语言》课程设计1
- 《汇编语言》王爽 课程设计1
- 王爽《汇编语言》课程设计1
- 汇编语言:课程设计1
- 汇编语言(王爽) 课程设计1
- openSSL学习笔记 信息摘要
- SOA
- SyncML学习笔记
- 程序员需要具备的基本技能
- U盘的热拔插/自动挂载跟linux2.6 kernel、 udev、 hal、 dbus 、gnome-mount 、thunar的关系
- 王爽汇编语言课程设计1
- 更换 2003密钥
- C++ 面向过程与面向对象的区别
- 为Oracle数据库创建用户
- C++ 常用排序法研究
- sql group by 与 having的用法
- Iframe用法精析
- 精简板XP的IIS配置
- C++ 常用排序法