2017-03-09 10 views
0

メッセージを逆順で1文字ずつ出力します。 HELLO4.ASMプログラムに名前を付けます。 (使用「プッシュ」と 「ポップ」アセンブリX86言語の質問

区「プッシュ」と「ポップ」functions.Then印刷 機能9または関数40Hのいずれかを使用して、このメッセージを使用して 逆の順序でメッセージを保持する別の変数。名前このプログラムHELLO5.ASM。

これは、アセンブリ言語についての私の割り当てがあり、これは私はそれが逆転しないのですfar.But取り組んでいる。

; (Hello4) 

.386 
.model flat,stdcall 
.stack 4096 

.data 
aName BYTE "Hello, DOS Here!$" 
nameSize = ($ - aName) - 1 

.code 
main PROC 
    mov ecx,nameSize 
    esi,0 
L1: movzx eax,aName[esi] 
    push eax 
    inc esi 
    loop L1 

    mov ecx,nameSize 
    esi,0 
L2: pop eax 
    mov aName[esi],al 
    inc esi 
    loop L2 
    mov ah,9 
    int 21h 


main ENDP 
end main 

答えて

0

は、あなたのコード内のいくつかのおっとを固定し、intializing試してみてください手動でデータセグメント:

; (Hello4) 

.386 
.model flat,stdcall 
.stack 4096 

.data 
aName BYTE "Hello, DOS Here!$" 
nameSize = ($ - aName) - 1 

.code 
main PROC 
    mov ax,@data   ;◄■■ INITIALIZE DATA 
    mov ds,ax    ;◄■■ SEGMENT MANUALLY. 
    mov ecx,nameSize 
    esi,0     ;◄■■ MOV ESI,0 
L1: movzx eax,aName[esi] 
    push eax 
    inc esi 
    loop L1 

    mov ecx,nameSize 
    esi,0     ;◄■■ MOV ESI,0 
L2: pop eax 
    mov aName[esi],al 
    inc esi 
    loop L2 
    mov ah,9 
    int 21h 


main ENDP 
end main 

以前の変更の後、それは私のために働き、文字列を後方に表示しました。

+0

お返事ありがとうございます。回答が良かった場合は –

+0

@WenxuanLiです。チェックマークをクリックすると、それを受け入れることができます。 –

+1

私に思い出させてくれてありがとう。ここで質問をするのは初めてのことです。 –