안녕하세요 저는 새 어셈블리입니다. 두 부분으로 구성된 프로그램을 사용하는 데 어려움을 겪고 있습니다. 이 x86 어셈블리에 Visual Studio를 사용하고 있습니다.x86 어셈블리 초보자 : 기본 추가 및 저장 문제
파트 I) 첫 번째 목표는 최대 13 개까지 계산하여 거기에서 각 값을 추가하는 것입니다. Ex, 0 + 1 + 2 + 3 ... + 13 = 91이다. 총계를 토탈에 저장하고 싶습니다.
파트 2) 두 번째로, 나는 2^0에서 2^6까지의 2의 제곱으로 계산하고 싶습니다. 예, 0,1,2,4,8,32,64 나는 생각한다 * 나는 그것을하고 있지만 나는가는대로 각 가치를 저장하지 않는다. 나는 이것을 연속적인 메모리 위치에 저장하고 싶다.
지금까지,
.586
.MODEL FLAT
.STACK 4096
.DATA
num1 BYTE 13 ;Initialize number to count to
totall BYTE 0 ;Total of all counted numbers
temp BYTE 0 ;Temp for loop adding
shiftme BYTE 1 ;Start of counting 2^0 so I can reach 2^6
.CODE
main PROC
;code here
increment: ;Increment label
inc temp ;Increment temp by 1
mov eax, temp
add totall, eax ;Add temp+totall and store in totall
cmp eax, num1 ;Compare for jump
jne increment ;Jump if not equal
;this part should store each value 1,2,4,8,32.. in consecutive memory locat
shiftallthethings: ;Shift label
shl shiftme, 1 ;Shifting bits to the left one
cmp shiftme, 64 ;Comparing for the jump
jne shiftallthethings ;Jump if not equal to
ret
main ENDP
END
질문이 나를 이해하는 데 도움이 있습니다.
- 어떻게 연속 된 메모리 위치에 값을 저장하나요?
- 점프 및 라벨 지침을 올바르게 사용하고 있습니까?
- 이러한 문제를 해결하기 위해 eax와 같은 특정 레지스터를 사용해야합니까? 왜?
어떤 도움을 주셔서 감사합니다. 질문에 대한
대답 모든
연속적인 메모리 위치의 저장 값은 무엇을 의미합니까? 우리가 해결할 구체적인 문제를 제기 할 수 있습니까? 또한 MASM32로 태그가 지정되었습니다. –
@MikeKwan 우리가 그 점을 무시하면 매번 label에 점프하는 동안 매번 shiftme를 어떻게 저장합니까? 또한이 코드는 게시 한 문제를 해결하는 데 의미가 있습니까? – KRB
'add totall, temp','cmp temp, num1'은'add '와'cmp'가 양쪽 피연산자를 메모리에 가질 수 없기 때문에 잘못되었습니다. 유효한 조합 : 레지스터 + 메모리 또는 메모리 + 레지스터, 레지스터 + 즉치 상수, 메모리 + 상수. 여기에 등록부를 사용해야합니다. –