2011-12-10 10 views
0

パラメータを持つ関数を使用するアセンブリ言語で例を投稿してください。 2つの要素の合計を返す関数のような単純なもの。TASMのパラメータを持つ関数

Googleでは簡単な例はありませんでした。

を追加しました:

.model small 
.data 

.stack 320h 
.code 
    extrn writer:near 

    add_numbers PROC 
     ARG number1:WORD 
     ARG number2:WORD 

     MOV ax, number1 
     MOV bx, number2 
     ADD ax, bx 
     CALL writer ; this procedure prints the contents of ax 

     RET 
    add_numbers ENDP 

    .startup 
    PUSH 1 
    PUSH 2 
    CALL add_numbers ; instead of 3 it prints -11602 
    call writer ; instead of 3 it prints 0 
.EXIT 
    END 
+0

'writer'のコードを投稿できますか?たぶん問題はそこから来ます。 –

答えて

2

、使用しているTASMのバージョンに依存するであろう。現代のものでは、次のようなものを書くことができます:

add_numbers PROC 
    ARG number1:DWORD 
    ARG number2:DWORD 

    MOV eax, [number1] 
    MOV ebx, [number2] 
    ADD eax, ebx 
    RET 
add_numbers ENDP 
+0

私はTurbo Assembler 4.1を使用しています。 例は、レジスタ名のためにコンパイルされませんでした。 eaxをax、ebxをbxに置き換えました。私はまだ "MOV eax、[number1]"という行についてエラーを受け取ります。オペランドの種類が一致しません。 – Sergey

+1

DWORDをWORDに変更しました。しかし、今私はどのようにこの手順を呼び出すことができますか? – Sergey

+1

'CALL'命令を使用してください:' PUSH <第一引数>、PUSH <第二の引数>、CALL add_numbers'。戻り値は 'ax'になります。 –

関連する問題