정수로 입력하고 그 정수의 정수 값 6.985를 반환하는 ARM 어셈블리 언어로 프로그램을 작성해야합니다. 예를 들어 36을 입력 값으로 입력하면 결과는 251이됩니다.부동 소수점의 곱셈을 수행하는 ARM 어셈블리 언어 프로그램 작성
mul (두 개의 정수를 더함), mul (두 개의 정수를 곱함), divide (두 개의 정수를 나눕니다.), getnum (사용자로부터 입력으로 정수를 얻음) 및 printnum (출력을 화면에 출력 함).
bl getnum
mov r1, #1000
bl divide
mov r4, r0
mov r5, r1
bl printnum
mov r0, r5
bl printnum
내 질문 :
bl getnum
mul r0, r0, #6985
bl printnum
여기 분할 기능에 대한 내 코드입니다 : 내 접근 방식은 처음 6,985을 곱과 1000
가 여기에 MUL 기능에 대한 내 코드입니다에 의해 다음 분할하는 것입니다 한 번에 곱셈과 나눗셈을 수행 할 수 있도록 어떻게 두 가지 방법을 결합 할 수 있습니까? 나는이 언어에 대해 아직 익숙하지 않기 때문에 나누기 함수에서 getnum을 제거하고 mul 함수와 결합하는 방법을 모른다.
어떤 ARM 명령어 세트 및 프로세서 제품군을 사용하고 있습니까? Cortex-M4 용 ARMv7 등? 일반적으로 곱셈과 나눗셈을 동시에 수행하는 단일 명령은 없으며 일부 ARM 프로세서에는 나누기 명령이 없습니다. – InfinitelyManic
정확한 정확도 요구 사항이없는 경우 * 57221을 수행 한 다음 8192 = * 6.9849853515625로 값을 나눌 수 있습니다. 요점은 8192가 2^13이므로 나누기가 13으로 단순 시프트입니다. 비트. (더 나은 정확도를 얻으려면 원래의 6.985 값에 2를 곱해서 자르면 소수점 이하 자릿수가 충분 해지고 곱해진 횟수를 셉니다.) 그렇지 않으면 당신의 접근 방식이 유효하고, 당신이 무엇을 요구하고 있는지 확신 할 수 없다. 단지'mul'의 결과를 나누기 부분에 사용하면된다. (그리고 만약 2의 거듭 제곱을 가졌다면 최대 넘버가 오버플로되기 전에 곱해질 수 있습니다.) – Ped7g
2의 거듭 제곱에 의한 나누기는 물론 shift-right이고, 왼쪽으로의 쉬프트는 2의 거듭 제곱입니다. – Ped7g