0

メインの ASM ファイル外のプロシージャにパラメータを渡すのに問題があります。これが私のコードです。これは、別のソース ファイル (sub.asm) 内のサブプロシージャ _sub を呼び出すメイン プロシージャ _main (main.asm 内) を示しています。サブプロシージャは、メイン プロシージャで指定された文字列を出力します。

main.asm:

;subprocedure test- main.asm
org 100h
include 'sub.asm' ;file of sub-procedure
_main: ;main method
    mov dx, string ;move string to dx register
    push dx ;push dx onto the stack
    call _sub;calls sub-procedure
    pop dx ;restores value of dx
    int 20h;exit program
ret ;end of main method
string db 'Some text $' ;string to be printed  

サブ.asm:

;//subprocedure test- sub.asm
_sub: ;//subprocedure
    push bp ;push bp onto the stack
    mov bp, sp ;move sp into bp
    mov dx, [bp+04h] ;move string into dx register
    mov ah, 09h ;prepare for print string
    int 21h ;print string
    mov sp, bp ;mov bp into sp
    pop bp ;restore value of bp
ret ;end of sub-procedure   

コードを実行すると、まったく意味のない奇妙な出力が得られます。

サブプロシージャがメインプロシージャと同じファイルにある場合にサブプロシージャが機能することを知っています(つまり、期待どおりに文字列を出力します)。 '79h' が '[bp+04h]' の代わりに dx レジスタに移動され、文字 'y' が出力されます。Oが間違っていることを誰かに教えてもらえますか?

ありがとうございました。

4

1 に答える 1

0

コメントを回答にしました:

;subprocedure test- main.asm
org 100h
_main: ;main method
    mov dx, string ;move string to dx register
    push dx ;push dx onto the stack
    call _sub;calls sub-procedure
    pop dx ;restores value of dx
    int 20h;exit program
ret ;end of main method
include 'sub.asm' ;file of sub-procedure
string db 'Some text $' ;string to be printed  
于 2015-01-26T14:47:18.310 に答える