- [kanwangxue] 如果是文字的,不是特别好啊,体力活,如果文字还加点动画,那就必须顶了。 01/15 01:10
- [kanwangxue] 必须顶啊。 01/15 00:54
- [ltoiii] 既然是实现loop功能,是否要考虑s和se标号? mov bx,offset s - offset 12/09 12:09
- [xiaoyao2012] 正确 11/01 15:33
- [xuer2016] 又找到2条被我忽视的地方: 1.PUSH 和 POP 针对字单元 2.POP 不能是CS 10/26 10:57
- [xuer2016] 学习了 我书写不规范,16进制字母前不加0,后面不加H,以后要注意了。。。 10/26 10:51
- [xuer2016] 来老师这学习下 10/26 10:31
- [youthangel] 不妙,CPU的利用率一下子就上去了。还好我的处理器不是太弱,35%左右的利用率。建议博主在修改一下 10/20 08:23
- [fpamc] 在我心里她就是我的女神。 10/02 08:58
- [newpeople] 你女朋友用得了简直就是一个女神…… 10/01 08:10
- [99998888] 请您指点一下如何找到会ASSEMBLER 语言的翻译,翻译成中文或英文。我的QQ ; 9097815 07/25 09:56
- [jeremy] 我觉得你学习的挺好,可以加你扣扣吗?我的469614823 08/07 14:46
- [zhangbo0805] 哈哈, 你好呀!很希望认识你呀!我发现你学习的积极性很高!正想向您学习呢! 07/31 23:31
- [tomato] 知道了,排得还挺满。 05/29 16:35
- [tomato] 现在学习情况怎么样?在做课设二还是什么? 05/29 10:41
- [tomato] 你的留言收到了。 05/05 23:51
- [fpamc] 开始学习c咯! 05/03 21:40
- [fpamc] 居然不能发博客了……! 04/22 21:03
- [tomato] 你相册中的游戏界面我看过了,非常好,界面很漂亮,很有创造力。博主,很有潜力。加油,一定能把这个游戏做 04/20 23:46
- [fpamc] 忙了半个月,不在家,没时间学习汇编。 但是在途中想到了一个有史以来最难的程序。对于刚学完9章的我。 04/13 20:56
[2012-05-02 19:36] 课程设计1
assume cs:code,ds:data,es:table
table 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 345980,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型数据
table ends
data segment
db 32 dup (0) ;设置数据暂存库
data ends
code segment
start: mov ax,table
mov es,ax
mov ax,data
mov ds,ax
mov si,0
mov di,0
mov bx,0
mov cx,21
;以上为初始化各寄存器数据
mov dh,3 ;设置行数
mov dl,25 ;设置列数
a: push cx ;将行循环次数入栈
push dx ;将行列设置压栈,这两个寄存器下面将用到
mov ax,es:[bx]
mov [si],ax
add si,2
mov ax,es:[bx].2
mov [si],ax ;将年份送入data段中
add si,6
mov ax,es:[bx].84
mov dx,es:[bx].86
call dtoc ;将公司收入转换成10进制形式,同时存放到data段中
add si,10
mov dx,0 ;高位清零
mov ax,es:[di].168
call dtoc ;将公司人数转换成10进制形式,同时存放在data段中
add si,6
mov ax,es:[bx].84
mov dx,es:[bx].86
div word ptr es:[di].168 ;将人均收入计算出来
mov dx,0 ;高位清零
call dtoc ;将人均收入转换成10进制形式,同时放在data段中
mov si,0 ;设置字符首地址指向ds:si
mov cx,29 ;设置字符检测次数
replace:push cx ;存储次数,为检测字符提供寄存器
mov cl,[si] ;将字符放到cl中
jcxz a0 ;当检测到0时,跳转到a0处
;设立检测字符替换功能是为了给show_str子程序的检测零,结束功能正常使用
scrn: inc si ;指向下一个字符
pop cx ;恢复检测次数
loop replace ;转移到replace处,循环检测替换
mov byte ptr [si],0 ;设置结尾符
mov si,0 ;ds:si指向字符首地址
pop dx ;将行列设置出栈
mov cl,2 ;设置字符属性
call show_str ;调用show_str子程序,将data段字符放到显存
add di,2 ;设置word型数据指向下一个字符串
add bx,4 ;设置dword型数据指向下一个字符串
add dh,1 ;进入下一行
pop cx ;还原行循环次数
loop a ;当cx不为零时转移到a处,进行下一行的处理。反之向下结束
mov ah,7
int 21h
mov ax,4c00h
int 21h
a0: mov al,20h ;将空格对应的数据放到al中
mov [si],al ;将al中的数据放到(ds:si)中
jmp scrn ;继续回到检测
table 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 345980,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型数据
table ends
data segment
db 32 dup (0) ;设置数据暂存库
data ends
code segment
start: mov ax,table
mov es,ax
mov ax,data
mov ds,ax
mov si,0
mov di,0
mov bx,0
mov cx,21
;以上为初始化各寄存器数据
mov dh,3 ;设置行数
mov dl,25 ;设置列数
a: push cx ;将行循环次数入栈
push dx ;将行列设置压栈,这两个寄存器下面将用到
mov ax,es:[bx]
mov [si],ax
add si,2
mov ax,es:[bx].2
mov [si],ax ;将年份送入data段中
add si,6
mov ax,es:[bx].84
mov dx,es:[bx].86
call dtoc ;将公司收入转换成10进制形式,同时存放到data段中
add si,10
mov dx,0 ;高位清零
mov ax,es:[di].168
call dtoc ;将公司人数转换成10进制形式,同时存放在data段中
add si,6
mov ax,es:[bx].84
mov dx,es:[bx].86
div word ptr es:[di].168 ;将人均收入计算出来
mov dx,0 ;高位清零
call dtoc ;将人均收入转换成10进制形式,同时放在data段中
mov si,0 ;设置字符首地址指向ds:si
mov cx,29 ;设置字符检测次数
replace:push cx ;存储次数,为检测字符提供寄存器
mov cl,[si] ;将字符放到cl中
jcxz a0 ;当检测到0时,跳转到a0处
;设立检测字符替换功能是为了给show_str子程序的检测零,结束功能正常使用
scrn: inc si ;指向下一个字符
pop cx ;恢复检测次数
loop replace ;转移到replace处,循环检测替换
mov byte ptr [si],0 ;设置结尾符
mov si,0 ;ds:si指向字符首地址
pop dx ;将行列设置出栈
mov cl,2 ;设置字符属性
call show_str ;调用show_str子程序,将data段字符放到显存
add di,2 ;设置word型数据指向下一个字符串
add bx,4 ;设置dword型数据指向下一个字符串
add dh,1 ;进入下一行
pop cx ;还原行循环次数
loop a ;当cx不为零时转移到a处,进行下一行的处理。反之向下结束
mov ah,7
int 21h
mov ax,4c00h
int 21h
a0: mov al,20h ;将空格对应的数据放到al中
mov [si],al ;将al中的数据放到(ds:si)中
jmp scrn ;继续回到检测
评论次数(3) |
浏览次数(213) |
类型(汇编作业) |
收藏此文 |