내 출력은 사양에 따라 다음과 같이 가정한다 : 등등두 번째 숫자를 출력하는 방법은 무엇입니까?
00:00
00:01
00:12
01:23
12:34
23:45
34:56
45:67
56:78
67:89
78:9A
89:AB
9A:BC
AB:CD
BC:DE
CD:EF
DE:F0
EF:01
F0:12
01:23
12:34
하고 있습니다. 필자는 16 진수 변환 2 개와 테스트 프로그램에서 인쇄 할 숫자를 얻는 어셈블리 서브 루틴 2 개를 작성했습니다.이 출력은 다음과 같이 보이기 시작합니다.
0:
1:
2:
3:
4:
5:
6:
7:
8:
9:
A:
B:
C:
D:
E:
F:
0:
1:
2:
3:
4:
5:
그래서 가장 오른쪽 숫자를 얻고있는 것처럼 보이지만 나머지 숫자는 어떻게 얻어야합니까? 그것은 assignment
그 예에서 말한다 0x0047114 바이너리 값을 포함하는 메모리 위치 0101 0011 (16 진수의 경우에는 0x53) 메모리 위치 0x0047115 이진 값 0001 0110 (16 진수에서 0 * 16)의 메모리 위치 0x0047116가 이진 값을 포함 포함 0000 0000 (16 진수 0x00) 메모리 위치 0x0047117에는 이진 값 0000 0000 (16 진수 0x00)이 포함됩니다. 호출자는 레지스터 r4를 0x0047114로 설정하고 puttime을 호출합니다. puttime은 새 줄에 을 16:53 출력합니다.
더 많은 배경 같은 과제 만의 다른 부분에 초점을 맞추고있다 나는 최근에 게시 된 다른 질문에서 사용할 수 있습니다 :
https://stackoverflow.com/questions/12105322/how-to-proceed-coding-for-this-assignment
Difference between load word and move?
https://stackoverflow.com/questions/12152323/why-is-load-word-not-working
내 프로그램이 변환은 다음과 같습니다.
17,451,515,나는 위의 정확하고 작업이라고 생각하지만 난 변수를 가져 와서 내 서브 루틴에 전달합니다 중간 부분 프로그래밍하는 방법을 잘 모르겠어요 : 어떤 도움을 주시면 더 좋구요
.macro PUSH reg
subi sp, sp, 4
stw \reg, 0(sp)
.endm
.macro POP reg
ldw \reg, 0(sp)
addi sp, sp, 4
.endm
.global puttime
.text
.align 2
puttime:
PUSH r31
ldw r8,0(r4) # put the variable in register 8
PUSH r8
nop
movi r4, 0x0A # put newline char in register 4
movia r9,putchar # copy subroutine address to a register
callr r9 # call subroutine via register
POP r8
mov r4, r8
call hexasc
mov r4, r2
movia r9,putchar # copy subroutine address to a register
callr r9
movi r4, 0x3A
movia r9, putchar
callr r9
POP r31
ret
을 .
당신 말이 맞아요. 효과가 있습니다. 답변 감사합니다. –