- [kanwangxue] 感觉楼主很乖的。有点孩子气。呵呵。 01/27 08:58
- [kanwangxue] it界,进去干嘛啊,到时候自己牛比了,首先写一个自己的语言,自己用。进入IT界不就是随波做流吗/?他 01/27 08:57
- [kanwangxue] 哥们,不要为了赚钱而学计算机。 计算机是年轻时候干的, 30岁后可以开始想赚钱,年轻嘛,不要这么悲 01/27 08:50
- [游客] 怎么说? 01/26 16:22
- [游客] 你这不行啊,差远了! 01/10 22:29
- [chinatree] 谢谢你。相信你也会成功的。 01/09 14:22
- [landyking] 哥们儿,好久不见。相信你会成功的。 12/02 23:34
- [chinatree] 哇哇,被挖坟了。莫生气,只是感觉谦虚些好,就算你的程序真的是史上最强的,也别说出来嘛,自己偷着乐就行 11/20 00:41
- [xiaoyao2012] 你的程序和我的程序比较也不见得你的程序又节约空间,在某种意义上说你的程序用了没学的指令,所以不见得你 11/19 15:39
- [heliang6291] 一起加油啊 07/02 02:45
- [游客] 急需一个汇编程序大作业。。。。。。。。。。。。。。。。。。。??? 12/28 16:50
- [游客] 这么多人喜欢你,我嫉妒了。但你不可以喜欢那么多,允许你在我不需要你的时候帮别人。如果我需要立叫立到。 11/13 13:11
- [tily] 兄弟 我来看你啦 呵呵 最近可好呀 09/26 22:17
- [stqcw] 能加我qq吗?1270911891 我在做课程设计2的时候 遇到点问题 09/24 09:16
- [stqcw] 能加我qq吗?1270911891 我的环境还是有点问题。按下A的时候不能显示满屏的A 09/20 09:36
- [stqcw] 牛人 我在xp里面运行王爽 汇编第二版 p280的例子 按下esc键没反应 呀 怎样在虚拟机里配置一 09/17 15:18
- [landyking] 呵呵,交个朋友,共同学习. 09/08 00:03
- [luyingdzx] 能知道你的QQ吗?或者请加一下我的QQ271190440,可以吗 虽然在论坛能获得解答,但是有的问 08/07 21:32
[2011-09-01 00:06] 课程设计1
在整个课程中,我们一共有两个课程设计,编写两个比较综合的程序,这是第一个。
任务:将实验7中的Power idea公司的数据按照图10.2所示的格式在屏幕上显示
出来。
在这个程序中,要用到我们前面学到的几乎所有的知识,注意选择适当的寻址方式和
相关子程序的设计和应用。
另外,要注意,因为程序要显示的数据有些已经大于65535,应该编写一个新的数据
到字符串转化的子程序,完成dword型数据到字符串的转化,说明如下。
名称:dtoc
功能:将dword型数转变为表示十进制数的字符串,字符串以0为结尾符。
参数:(ax)=dword型数据的低16位
(dx)=dword型数据的高16位
ds:si指向字符串的首地址
返回:无
在这个子程序中要注意除法溢出的问题,可以用我们在实验10中设计的子程序
divdw来解决。
assume cs:code,ds:data,ss:stack
data segment
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993'
db '1994','1995'
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514,345980
dd 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
dw 11542,14430,15257,17800
pa dw 0
pq dw 0
data ends
stack segment stack
db 128 dup (0)
stack ends
code segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,128
mov ax,0b800h
mov es,ax
xor si,si
mov di,si
mov cx,21
s:push cx; nian
mov cx,2
s1:mov ax,[si]
mov es:[di],al
mov al,4
mov es:[di+1],al
mov es:[di+2],ah
mov es:[di+3],al
add di,4
add si,2
loop s1
add di,152
pop cx
loop s
mov cx,21; shouru
xor bx,bx
mov di,30
s_1:push cx
mov ax,[si]
mov dx,[si+2]
s_2:mov cx,10
call divdw
add cx,430h
push cx
inc bl
cmp ax,0
jnz s_2
mov cx,bx
xor bx,bx
s_q:pop es:[bx+di]
add bx,2
loop s_q
add di,160
add si,4
xor bx,bx
pop cx
loop s_1
mov di,60; guyuan
mov cx,21
xor bx,bx
a_1:push cx
mov ax,[si]
xor dx,dx
a_2:mov cx,10
call divdw
add cx,430h
push cx
inc bl
cmp ax,0
jnz a_2
mov cx,bx
xor bx,bx
a_3:pop es:[bx+di]
add bx,2
loop a_3
add di,160
add si,2
pop cx
xor bx,bx
loop a_1
mov di,90; pingjun
mov cx,21
mov si,84
mov bp,168
d_1:push cx
mov ax,[si]
mov dx,[si+2]
mov cx,ds:[bp]
call divdw
mov pq,0
d_2:mov cx,10
call divdw
add cx,430h
push cx
inc pq
cmp ax,0
jnz d_2
mov cx,pq
xor bx,bx
d_3:pop es:[bx+di]
add bx,2
loop d_3
pop cx
add di,160
add si,4
add bp,2
loop d_1
mov ax,700h
int 21h
mov ax,4c00h
int 21h
divdw:mov pa,ax
mov ax,dx
xor dx,dx
div cx
push ax
mov ax,pa
div cx
mov cx,dx
pop dx
ret
code ends
end start
1975 16 3 5
1976 22 7 3
1977 382 9 42
1978 1356 13 104
1979 2390 28 85
1980 8000 38 210
1981 16000 130 123
1982 24486 220 111
1983 50065 476 105
1984 97479 778 125
1985 140417 1001 140
1986 197514 1442 136
1987 345980 2258 153
1988 590827 2793 211
1989 803530 4037 199
1990 1183000 5635 209
1991 1843000 8226 224
1992 2759000 11542 239
1993 3753000 14430 260
1994 4649000 15257 304
1995 5937000 17800 333
终于完成它了,又耗了三天。
[ tomato 发表于 2011-09-01 09:07 ]
不错,是不是有必要做个总结?
[ rotapple 发表于 2011-09-01 11:48 ]
mov ax,700h
int 21h
这是什么?
[ chinatree 发表于 2011-09-01 12:12 ]
等待用户按一次键,相当于按任意键退出,不然运行时在屏幕一闪就没了。
[ chinatree 发表于 2011-09-01 16:36 ]
dtoc:push ax
mov bp,sp
push bx
xor bx,bx
mov cx,10
mox ax,dx
s:xor dx,dx
div cx
add dx,230h
push dx
inc bx
cmp ax,0
jnz s
sub dx,230h
mov ax,[bp]
s1:div cx
add dx,230h
push dx
inc bx
cmp ax,0
jnz s1
mov cx,bx
s2:pop es:[di]
add di,2
loop s2
pop bx
ret 2
这是我一开始写的一个双字转字符串的子程序,发现转换的字符串不对,原因就是对高位的余数处理的方式不对,必须把这个双字当成一个整体,在这个上面纠结了两天。
这是一个四字除法程序
data segment
dq 0135790abcdef2468h
dq 0
data ends
code segment
assume cs:code
start:mov ax,data
mov ds,ax
mov ax,ds:[6]
mov cx,10
div cx
mov ds:[14],ax
mov ax,ds:[4]
div cx
mov ds:[12],ax
mov ax,ds:[2]
div cx
mov ds:[10],ax
mov ax,ds:[0]
div cx
mov ds:[8],ax
code ends
end start