2014-09-28 2 views
0

나는 MIPS 어셈블리 프로그래밍에 초보자를이고 나는 그것을 읽은 후 나는 숫자의 첫 번째 숫자를 인쇄 할 궁금 해서요. 예를 들어MIPS 어셈블리 프로그래밍에서 숫자의 첫 번째 숫자를 인쇄하는 방법?

.data 
number_1: .word 


.text 
#read in first number 
li $v0, 5 
syscall 
sw $v0, number_1 

#print first digit 
li $v0, 1 
lw $a0, number_1 
syscall 

#end program 
li $v0, 10 
syscall 

, 내가 590를 입력 한 경우, 나는 단지 것 '5'를 인쇄하고 싶습니다. 또한 다음 두 숫자를 어떻게 별도로 인쇄합니까?

위의 코드를 사용하면 입력 한 전체 숫자 만 인쇄됩니다. 590 lw 대신 lb를 시도했지만 '78'이 인쇄되고 해당 숫자가 16 진수 또는 다른 기준으로 추측됩니다.

미리 감사드립니다.

+0

일부에서 그것을 할 것입니다 방법은 다른 언어 또는 가상 코드? – Jester

답변

0

숫자는 16 진수로 메모리에 저장됩니다. 원하는 것은 10 진수의 첫 번째 숫자입니다. 계산해야합니다. 3 자리 숫자의 경우 100으로 나누면 결과가 나옵니다. 일반 솔루션은 here입니다.

+0

정수는 2 진수로 메모리에 저장됩니다. 16 진수는 4 비트 덩어리의 바이너리를 영숫자로 그룹화하는 인간이 읽을 수있는 편리한 방법이며 변환은 디버거 내부에서만 발생합니다. –

0

이 번호의 경우 두 번째 및 세 번째 숫자에 대해 각각 숫자 10 또는 100을 얻어야합니다. 모듈러스는 다음 숫자이며, 나누기 결과가 0이 될 때까지 이것을 반복 할 수 있습니다. 부동 소수점 숫자로 작업하지 않는다고 가정 할 때 이것을 반복 할 수 있습니다.

MIPS 어셈블리에 대한 나의 권고는 여기에, C와 같은 높은 수준의 언어의 일반적인 솔루션을 가지고 항상 제가 위에서 설명 된 것과 유사한 솔루션입니다 :

int n = 590 ; 
while(n >= 10) 
{ 
    printf("%d\n", n % 10) ; 
    n = n/10 ; 
} 
printf("%d\n", n) ;