我之前其實學過一些些,2004的時候...

但是我那時候是用模擬器來simulate的
可是現在老師是要我們用visual studio.net來寫
就完全不知道要怎麼去用了
而且是要寫while loop 跟 if
我有寫出c的版本
int gcd(int m, int n)
/* precondition: m>0 and n>0. Let g=gcd(m,n). */
{ while( m > 0 )
{ /* invariant: gcd(m,n)=g */
if( n > m )
{ int t = m; m = n; n = t; } /* swap */
/* m >= n > 0 */
m -= n;
}
return n;
}
可是不知道是現在太晚還是怎樣
完全想不出應該要怎樣用assembly 的add and 等東西來寫...
不知道有沒有大大可以給一些小小的暗示\頭緒
老師給的
int GCD (int number1, int number2)<<<是要把這2個當input嗎?
{
int output_number;
__asm
{
// START CODING HERE
// you're supposed to check the sign of given integer numbers
// if one of them is negative or zero, you must return -1
// don't forget to move result to output_number
// END CODING HERE
}
return output_number;
}
這是我以前用notepad寫的一部份
;;; Code to call subsub with inputs in x3100, x3101
.ORIG x3000
LD R6, STACK ; INITIALIZE THE STACK POINTER
LDI R0, INPUT1 ; AND LOAD THE ARGUMENTS
LDI R1, INPUT2
;; Now call the subsub routine
;; PUSH ARGS ONTO STACK, R1 THEN R0
ADD R6, R6, #-1
STR R1, R6, #0
ADD R6, R6, #-1
STR R0, R6, #0
;; THEN CALL THE SUBROUTINE
JSR RDNUM
LDR R2, R6, #0 ; GET THE RETURN VALUE
ADD R6, R6, #3 ; 2 PARAMS + RETURN VALUE
;; Finally, halt the program
HALT
INPUT1 .FILL x3100
INPUT2 .FILL x3101
STACK .FILL x4000 ; put the stack at 4000
這裡面有Input的部份
那我是要把input1
input2 改成number1, number2 來接收input嗎?
我要不要initialize勒?
要specify 用的register嗎? 不是R0~7
是x3000.........
拜託各位大大了
我真的是一點頭绪都沒有