0
.386
.MODEL FLAT
ExitProcess PROTO NEAR32 stdcall, dwExitCode:DWORD
Include io.h
cr equ 0DH
Lf equ 0AH
.STACK 4096
.DATA
string byte 40 Dup (?)
number dword ?
runningSum dword 0
rejected byte " , Rejected", 0
positive byte cr, Lf, "Positive",0
negative byte cr, Lf, "Negative",0
numaschar byte 11 dup(?),0
newline byte cr,Lf,0
.code
_start:
forever: input string, 40
atod string
mov number, eax
cmp number,0
jne processing
je finish
processing:
cmp number,10
jg message
cmp number,-10
jl message
cmp number,10
jle not_rejected1
cmp number,-10
jge not_rejected2
jmp jumpToTop
message: dtoa numaschar,number
output numaschar
output rejected
output newline
not_Rejected1: cmp number, -10
jge processing2
not_Rejected2: cmp number,10
jle processing2
processing2: cmp number, 0
jg addInstruct
jl subInstruct
addInstruct: add ebx, 1
add edx,number
jmp message2
subInstruct: add ecx, 1
jmp message3
message2: dtoa numaschar, number
output positive
output newline
message3: dtoa numaschar, number
output negative
output newline
jumpToTop: jmp forever
finish:
INVOKE ExitProcess, 0
PUBLIC _start
END
이 프로그램은 '긍정적'과 '부정적'모두 메시지를 인쇄하는 방법을 제공 양수에 읽어하지만 난 그게 "긍정적"MASM 어셈블리 점프 명령 인쇄 문제
에만 메시지를 인쇄해야 어떤 도움을 주셔서 감사합니다. 감사 !
.............................................. .................................................. .....
여러 위치에서 점프하는 대신 하나의 위치에 배치해야하므로 어디에서 상위 문으로 점프 할 수 있습니까? 가능한가? –
호출 명령어를 사용하면 jmp를 여러 번 사용하지 않아도됩니다. 백 점프는 ret 명령으로 만 수행 할 수 있습니다. –
@AmberBexley - 코드를 자세히 살펴보면'messagemp3 '레이블 앞에'jmp jumpToTop'을 코드 행으로 추가 할 것입니다. 물론 점프가 필요한 위치로 점프를하고있는 중입니다. 코드가 단순히 영원히 뛰어 올랐다면 코드가 훨씬 더 효율적 이겠지 만 jmp와 jumpToTop 만 읽으면 더 쉽게 읽을 수 있습니다 (imho). 앞뒤로 뛰어든간에 위트콘 (van Witkon)의 의견을 참조하십시오. ** _message2'_ 레이블에 뒤 따르는 코드를 실행 한 후 필요합니다 ** 그리고 **는 ' message3' 라벨 _. – enhzflep