8086汇编语言课程设计一
来源:互联网 发布:exp数据库表结构导出 编辑:程序博客网 时间:2024/06/08 14:53
最近自学了王爽的《汇编语言》,全书共有两次课程设计,这是第一个:
给定数据如下
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
将其格式化显示至屏幕,并计算收入和雇员人数相除的商然后后显示到屏幕上。
格式如下:
1975 163 16/3······1995 5937000178005937000/17800
问题很简单,但是实现过程中有一些细节需要注意
首先,需要单独实现三个功能,分别为:数据转换dtoc,dword不会产生溢出的除法运算divdw,显示字符串show_str
实现这些子功能时要注意将冲突的寄存器内的值记录在栈里,
然后将这些子功能组合,实现整个程序,代码如下:
assume ds:data,cs:code,ss:stackdata segmentdb '1975','1976','1977','1978','1979','1980','1981','1982'db '1983','1984','1985','1986','1987','1988','1989','1990'db '1991','1992','1993','1994','1995' dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000 dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226,11542,14430,15257,17800 db 16 dup(0)data endsstack segmentdb 48 dup(0)stack endscode segmentstart:mov ax,datamov ds,axmov ax,stackmov ss,axmov sp,30hmov si,0 ;data段偏移地址mov bp,168 ;人数第一个数据地址mov dh,1 ;显示行号mov dl,20 ;显示列号mov cx,21 show1:push cxmov cx,4 ;循环4次显示年份 s:push cxmov cl,00001010bmov al,[si]call DispALinc siinc dlpop cxloop sadd dl,5mov di,dxmov ax,ds:[si].80 ;转换收入数据mov dx,ds:[si].82push simov si,21*10call dtocmov dx,dimov cl,00001010b ;显示收入数据call show_stradd dl,9mov di,dxmov ax,ds:[bp] ;转换人数数据mov dx,0call dtocmov dx,dimov cl,00001010b ;显示收入数据call show_stradd dl,9mov di,dxpop simov ax,ds:[si].80mov dx,ds:[si].82 ;计算平均收入mov cx,ds:[bp]push sicall divdwmov si,21*10 ;转换call dtocmov dx,dimov cl,00001010bcall show_str ;显示inc dhmov dl,20add bp,2pop sipop cxloop show1mov ax,4c00hint 21h;显示al中的字符;al:字符ASCLL码,cl:字符颜色,dh:行号,dl:列号;返回值:无DispAL:push sipush dxpush cxpush axpush bxmov bx,0B800hmov es,bx mov si,axmov al,160 mul dh ;计算行地址mov bx,axmov al,2mul dladd bx,axmov ax,simov es:[bx],almov es:[bx].1,clpop bxpop axpop cxpop dxpop siret;显示ds:[si]中的字符串;ds:[si]:字符串首地址,cl:字符颜色,dh:行号,dl:列号;返回值:无show_str:push sipush dxpush cxpush axpush bxpush simov ax,0B800hmov es,ax mov al,160 mul dh ;计算行地址mov bx,axmov al,2mul dladd bx,axmov dl,clshow:mov cl,ds:[si]mov ch,0jcxz okmov es:[bx],clinc bxmov es:[bx],dlinc bxinc sijmp short showok:pop sipop bxpop axpop cxpop dxpop siret ;将dword数据转换为字符串;ds:[si]:字符串首地址,dx,ax:数字的高位和低位;返回值:无dtoc:push dipush bxpush sipush dxpush axpush cxmov di,0push dimov di,1mov cx,10 a:call divdwadd cx,30hpush cxinc dimov cx,dxadd cx,axjcxz writemov cx,10jmp a write:mov cx,di b:pop bxmov [si],blinc siloop bpop cxpop axpop dxpop sipop bxpop diret;进行不会产生溢出的除法运算;dx,ax:数字的高位和低位,cx:除数;返回值:结果的高位和低位,cx:余数divdw:push sipush dimov si,axmov ax,dxmov dx,0div cxmov di,axmov ax,sidiv cxmov cx,dxmov dx,dipop dipop siretcode endsend start
1 0
- 8086汇编语言课程设计一
- 汇编语言 王爽(第三版)课程设计一
- 汇编语言课程设计(原程序)
- 急求解:汇编语言课程设计
- 王爽 《汇编语言》课程设计2
- 王爽 <<汇编语言>> 课程设计1
- 王爽版《汇编语言》课程设计1
- 王爽 <<汇编语言>> 课程设计2
- 《汇编语言》课程设计1答案
- 课程设计1 -------------- 王爽 汇编语言
- 王爽《汇编语言》课程设计1
- 王爽《汇编语言》课程设计1
- 汇编语言 王爽 课程设计二
- 《汇编语言》王爽 课程设计1
- 王爽《汇编语言》课程设计1
- 王爽《汇编语言》课程设计2
- 汇编语言:课程设计1
- 王爽 汇编语言 课程设计2 修正
- spring源码解读
- QT-如何添加资源文件
- 字符串的反转
- Git与Repo入门
- Android并发编程之白话文详解Future,FutureTask和Callable
- 8086汇编语言课程设计一
- 【caffe配置】在vs2013用已经训练好的Alexnet网络提取fc6特征
- 1094. The Largest Generation (25)【二叉树】——PAT (Advanced Level) Practise
- Ubuntu下IntelliJ IDEA新建Java Web项目
- iOS开发 - 第02篇 - UI进阶 - 03 - TableView Cell
- 【数据库】where 1=1 和 where 1=0
- Mysql——锁问题
- C++数组在函数中的传递与返回
- Python:no encoding declared 错误