王爽 的汇编课程设计1怎么显示有点不正确

vistalong 2007-06-02 05:33:22
王爽 的汇编课程设计1怎么显示有点不正确

下面是我的代码
assume cs:codesg

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'

dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 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,8826
dw 11542,14430,15257,17800
data ends

str0 segment
db 28 dup (0)
str0 ends


codesg segment
start: mov ax,data
mov es,ax ; es全局变量下同
mov ax,str0
mov ds,ax;ds
mov dx,0;dx
mov cx,21 ;cx循环21次,每次显示一行
mov si,0;si
mov di,0;di
mov bp,16
s: push cx
push dx

mov ax,es:[si]
mov dx,es:2[si] ;dx!o(o为全局变量已保护,下同)
mov [di],ax
mov 2[di],dx


push si
mov ax,es:168[bp]
mov dx,0 ;dx!o
mov si,16 ;si!o
call dtoc
pop si


mov ax,es:84[si]
mov dx,es:86[si] ;dx!o
push si
mov si,5 ;si!o
call dtoc
mov bx,es:168[bp]
div bx ;使用上方AX,DX
mov dx,0
mov si,22;si!o
call dtoc
pop si

pop dx

push si
mov dl,0
mov cl,2 ;cx!o
mov si,0 ;si!o
call show_str
mov dl,9
mov si,5 ;si!o
call show_str
mov dl,23
mov si,16 ;si!o
call show_str
mov dl,38
mov si,22 ;si!o
call show_str
pop si

pop cx

inc dh
add si,4
add bp,2
loop s

mov ax,4c00h
int 21h

dtoc: push ax ;将数据转换为字符串,dd型数据
push bx
push cx
push dx
push di
push si

mov di,0

step1: mov cx,dx
jcxz lowbyte
mov bx,10
call divdw
push bx
inc di
jmp short step1
lowbyte:
mov bx,10
call divdw
push bx
inc di
mov cx,ax
jcxz di2cx
jmp short lowbyte
di2cx: mov cx,di

step2: pop bx
add bx,30h
mov [si],bx
inc si
loop step2

finish: pop si
pop di
pop dx
pop cx
pop bx
pop ax
ret

divdw: ;除法子程序,防溢出
push cx
push ax
mov ax,dx
mov dx,0
div bx
mov cx,ax
pop ax
div bx
mov bx,dx
mov dx,cx

pop cx
ret

show_str: push ax ;显示字符串,字符串后以数据0结尾
push bx
push cx
push dx
push es
push si
push di

mov al,0a0h
mul dh
mov dh,0
add dl,dl
add ax,dx
mov di,ax
mov ax,0b800h
mov es,ax
mov bl,cl

display:mov cl,[si]
mov ch,0
jcxz fin
mov es:[di],cl
mov es:1[di],bl
add di,2
inc si
jmp short display

fin: pop di
pop si
pop es
pop dx
pop cx
pop bx
pop ax
ret
codesg ends
end start
那位大虾帮我修改一下 我不胜感激 有什么错误给我指正一下


...全文
411 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
vistalong 2007-06-16
  • 打赏
  • 举报
回复
谢谢各位了 我已经编成功了 参考了你的程序
hkbyest 2007-06-05
  • 打赏
  • 举报
回复
先不要看答案,实在想不明白再参考。
我写代码只用了10分钟,调试错误花了3个小时,但这3个小时可以让我弄明白许多东西。
代码链接:http://blog.csdn.net/hkbyest/archive/2007/06/02/1635654.aspx
beijingbeerman 2007-06-04
  • 打赏
  • 举报
回复
www.rnst.com.cn/upfiles/DownSoft/AssemblyResult.rar 看看这个
hkbyest 2007-06-02
  • 打赏
  • 举报
回复
debug一下,还是有许多错误。

我说一下我的思路吧,先算好data段中最长的一行需要多少ascii字符来定义转换后str每行的空间,我贪图方便用的是1f个空格。

然后转换格式到str中,最后循环输出。

你需要注意的是相关地址的变化,以及慢慢调试完善子程序的功能。
hkbyest 2007-06-02
  • 打赏
  • 举报
回复
show_str: push ax ;显示字符串,字符串后以数据0结尾
push bx
push cx
push dx
push es
push si
push di

mov al,0a0h
mul dh
mov dh,0
add dl,dl ;这个....

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧