【发布时间】:2015-01-11 20:08:41
【问题描述】:
我有这个代码 (having a string of length n, build another of length n-2 as it follows: sir2[i]=(sir[i]+sir[i+1]+sir[1+2])/3),但我不知道它为什么会冻结。没有错误,我已经调试了一段时间,但我无法确定问题是否出在算法上。
prints macro number
local decompose, pops
mov bx,10
mov al, number
mov cx,0
decompose: ;pushing digits to the stack
inc cx
mov ah,0
div bl
mov dl,ah ; remainder - last digit
add dx,48 ; to transform it in its char version
push dx
cmp al,0
jnz decompose
pops: ; pop digits off the stack
pop dx
mov ah,2h
int 21h
loop pops
; pretty spacing
mov dl,' '
mov ah,2h
int 21h
endm
data segment para public 'data'
sir db 5, 10, 12, 4, 3
n equ $-sir
sir2 db n-2 dup(0)
data ends
code segment para public 'code'
start proc far
assume cs:code,ds:data
push ds
xor ax,ax
push ax
mov ax,data
mov ds,ax
mov si,0
mov dx,3
mov cx,n
sub cx,2
l1:
mov ah,0
mov al,sir[si]
add al,sir[si+1]
add al,sir[si+2] ;sum of 3 numbers
div dx ;sir2[i]=(sir[i]+sir[i+1]+sir[1+2])/3
mov sir2[si],al
inc si
cmp si,cx
jbe l1
mov si,0
l2:
prints sir2[si]
inc si
loop l2
ret
start endp
code ends
end start
谁能帮忙?
【问题讨论】:
-
你做了哪些努力来发现它为什么会冻结以及你被困在哪里?换句话说,您是否调试过您的代码?该站点不是免费的调试服务,因此就您的问题而言,它很可能会因为离题而关闭。
-
是的,我做到了 + 我以为我陷入了循环,所以我将其更改为 jmp。
-
你在 decompose 例程中清除了 CX !!!将
mov cx,0更改为mov ah,0 -
我不小心写了 CX 而不是 AH。谢谢。
-
如果它现在有效,那么请给所有帮助过你的人投票。