I'v는 출력으로 아래 작성하는 프로그램 작성 AA 작업을 가지고 이하 :어셈블러 MASM, JNZ 루프에서 인쇄 값이 0이거나
ABCD******
ABCD***
ABCD
내 코드는 다음과 같습니다
kod segment
org 100h
assume cs:kod
start:
mov cx,3
mov bx,3
mov ax,6
mov ah, 02h
PETLA_ZEW:
push cx
mov cx,4
mov dl, 'A'
PETLA_CIAG:
int 21h
inc dl
dec cx
jnz PETLA_CIAG
push ax
mov cx, ax
mov dl, '*'
PETLA_GWIAZD:
int 21h
dec cx
jnz PETLA_GWIAZD
sub ax, 3
mov dl, 0ah
int 21h
mov dl, 0dh
int 21h
push bx
mov cx, bx
mov dl, ' '
PETLA_SPACJE:
int 21h
dec bx
jnz PETLA_SPACJE
pop bx
add bx, 3
pop cx
dec cx
jnz PETLA_ZEW
koniec:
mov ah, 4ch
int 21h
kod ends
end start
을
하지만 문제는 PETLA_GWIAZD라는 루프에서 ax 두 번째 시간을 뺄 때 값이 0이기 때문에 무한 루프가 발생합니다. 빼는 데 사용할 다른 루프가 있습니까? 아마도 루프 바로 전에 유효성 검사를 할 것인가? 방금 어셈블리 작업을 시작했지만 여전히 많은 것을 알지 못합니다 ...
Thanks! AX
및 CX
인터럽트 및 루프에 사용되는, 다른 레지스터를 사용할 수 있도록, 예를 들어, SI
대신 CX
의 및 DI
대신 AX
을 :
무엇 'ax'가 0 일 때 0 별을 출력하는 것이 좋습니다. 따라서 "루프 바로 전에 유효성 검사"에 대한 아이디어는 나에게 잘 들립니다. 그리고 합리적으로 간단한 방법이 있습니다. 'mov cx, ax' 이후에'jcxz SKIP_GWIAZD'를 추가하고'print'코드 부분 앞에'sub ax, 3 '뒤에 새로운 레이블'SKIP_GWIAZD :'를 추가 할 수 있습니다. 다음은 다른 조건부 점프에 대한 설명입니다. http://stackoverflow.com/documentation/x86/5808/control-flow/20470/conditional-jumps#t=201612021937306141986 –
Ped7g
아, 실제로 'jcxz'는 여기에 설명되어 있지 않습니다. 죄송합니다. [Here] (http://x86.renejeschke.de/html/file_module_x86_id_146.html)은'jcxz'를 포함한 몇몇 문서입니다. – Ped7g
그래, 방금 다른 점프에 대해 더 읽기 시작했고 여러 가지 변형 + 아이디어를 시도했지만 여전히 효과가없는 것 같습니다. 나는 프로그램 {koniec :}이 끝나기 직전에 {mov cx, ax}와 실제 {SKIP_GWIAZD :} 다음에 {jcxz} {SKIP_GWIAZD}를 추가했지만 여전히 작동하지 않습니다. 나는 마지막 줄에서 마지막 글자가 글자 일 뿐이므로이 방법을 사용했다. 그래서 우리는 그 다음 줄 (빈 줄이나 빈 줄)을 가지고 싶지 않다. – sakcaj