이 코드 (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
)가 있는데 왜 멈추는 지 알 수 없습니다. 오류가없고 잠시 동안 디버깅을 해왔지만 알고리즘에 문제가 있는지 파악할 수 없습니다.x86 프로그램 고정 [tasm]
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로 바꿨을 때 루프에 달라 붙었다 고 생각했습니다. –
* 분해 * 루틴 내에서 CX를 삭제했습니다. 'mov cx, 0'을'mov ah, 0'으로 변경하십시오. –