|
主题 : : 实验2 DEBUG无错 直接运行有错 暂未将字符串逆序 [已解决] |
回复[ 6次 ]
点击[ 518次 ] | |
|
|
|
|
[帖 主]
[ 发表时间:2009-12-28 22:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17 |
assume cs:code
data segment
db 10 dup (0)
data ends
code segment
start: mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dtoc
mov dh,8
mov dl,3
mov cl,2
mov si,0
mov bx,0
call show_str
mov ax,4c00h
int 21h
dtoc: push dx
push cx
push bx
push ax
call divdw
pop ax
pop bx
pop cx
pop dx
ret
divdw: push ax
mov ax,dx
mov dx,0
mov cx,0ah
div cx ;ax放高位的商,dx放高位的余数
mov bx,ax
pop ax
div cx
mov cx,dx
mov dx,bx
add cl,30h
mov [si],cl
inc si
mov cx,ax
jcxz ok1
jmp short divdw
ok1: mov byte ptr [si],0
ret
show_str:
push ax
push bx
push cx
push dx
mov ax,0b800h
mov es,ax
mov al,dh
mov ah,0
mov bl,160
mul bl
add dl,dl
mov bl,dl
mov bh,0
add ax,bx
mov bx,ax
mov al,cl
s: mov cl,[si]
mov ch,0
jcxz over
mov es:[bx],cl
mov es:[bx+1],al
inc si
add bx,2
jmp short s
over: pop dx
pop cx
pop bx
pop ax
ret
code ends
end start | | |
|
|
|
|
[第1楼]
[ 回复时间:2009-12-29 14:42 ]
[引用]
[回复]
[ top ] | |
荣誉值:3
信誉值:0
注册日期:2009-10-27 16:12 |
我看了一会楼主的程序,你在调用dtoc之后,得到的余数本来就是逆向的,
调用dtoc之后,data段中的数据应该是这样的
ds:0 36h,36h,36h,32h,31h,0,0,0,0,0,0,0,0,0,0,0
要得到正确结果,楼主应该在dtoc子程序中,把余数逆向 | | |
|
|
|
|
[第2楼]
[ 回复时间:2009-12-29 19:43 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17 |
回复:[第1楼]
------------------
没做注释 呵呵
那个逆序输出的子函数我写出来了
原来遇到的问题有过COMMAND无错而DEBUG 有错
我现在这个程序的问题是
用COMMAND加载运行有错误
而DEBUG 加载运行无错
不知道问题出在哪里
运行一下试试 | | |
|
|
|
|
[第3楼]
[ 回复时间:2009-12-29 19:49 ]
[引用]
[回复]
[ top ] | |
荣誉值:9
信誉值:0
注册日期:2009-10-18 04:41 |
天啊,老兄,你这也在复杂了,想问题不用那么复杂,你这没有逆序的就搞得这么多,要是逆一下怎么办?
\你即然是用DX,来保存的余数,其实不用把他分成DL来做的,因为你直接在DX加上30h后相当于DL加上了30h,(当然dl是8位他的范围是255要是加上30超过这个值这样做就不行了,)给你个思路
除法还是那样做,做出来后dx保存,然后dx加上30h入栈/或是存到一段数据段里面
如果栈 除完后直接跳出去出栈就反过来了, | | |
|
|
|
|
[第4楼]
[ 回复时间:2009-12-29 20:07 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17 |
回复:[第3楼]
------------------
受教了
余下的问题和2楼的问题一样 | | |
|
|
|
|
[第5楼]
[ 回复时间:2009-12-30 09:53 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17 |
谢谢大家关注
问题找到了
调用dtoc之前,只给ax赋了值
而没有给DX赋值为0 | | |
|
|
|
|
[第6楼]
[ 回复时间:2009-12-30 09:55 ]
[引用]
[回复]
[ top ] | |
荣誉值:0
信誉值:4
注册日期:2009-12-18 19:17 |
此贴由 贴主 于 [ 2009-12-30 09:55 ] 结贴。 结贴原因:问题已解决 | | |
|