汇编网首页登录博客注册
chinatree的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
学习动态
友情链接

[2011-09-01 00:06] 课程设计1

课程设计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

终于完成它了,又耗了三天。
评论次数(4)  |  浏览次数(516)  |  类型(汇编作业) |  收藏此文  | 

[  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

 
 请输入验证码  (提示:点击验证码输入框,以获取验证码