2012-02-14 7 views
0

私はアセンブリ言語を学び始めています。私がする必要があるプログラムは非常に簡単です。 1 - 数入力数 3出力 - - 計算/出力入力された番号 4の半 - 計算/出力入力された番号アセンブリ言語の問題...新しい行をどのように作成しますか?

の二重4桁の番号(負の数であってもよい) 2を読みます

そう...これは...、コード・セグメント、第...データ部

section .data ; Data segment 
    msgPrompt  db 'Please enter a number ' ; Ask the user to enter a number 
    lenMsgPrompt equ $-msgPrompt   ; The length of the message 
    msgNumber  db 'The entered number is ' 
    lenMsgNumber equ $-msgNumber     
    msgHalf   db 'The half of the entered number is ' 
    lenMsgHalf  equ $-msgHalf 
    msgDouble  db 'The double of the entered numbered is ' 
    lenMsgDouble equ $-msgDouble 

コードである(ユーザ入力のために)そして初期化されていないデータ

section .bss  ; Uninitialized data 
    userNumber resb 5 
    halfNumber resb 5 
    doubleNumber resb 5 

。 ..

section .text  ; Code Segment 

     global _start 
     _start: 

     ;Prompt the user 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, msgPrompt 
     mov edx, lenMsgPrompt 
     int 80h 

     ; Read and store the user input 
     mov eax, 3 
     mov ebx, 2 
     mov ecx, userNumber 
     mov edx, 5  ; 5 bytes (numeric, 1 for sign) of that information 
     int 80h 

     ; Output the message 'The entered number is ' 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, msgNumber 
     mov edx, lenMsgNumber 
     int 80h 

     ; Output the number entered 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, userNumber 
     mov edx, 5 
     int 80h 

     ; Output the message 'The half of the entered number is ' 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, msgHalf 
     mov edx, lenMsgHalf 
     int 80h 

     ; Calculate the half of the number entered 
     mov eax, [userNumber] 
     shr eax, 1  ; Shift to the right by one bit 
     mov [halfNumber], eax 

     ; Output half of the number entered 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, halfNumber 
     mov edx, 5 
     int 80h 

     ; Output the message 'The double of the entered numbered is ' 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, msgDouble 
     mov edx, lenMsgDouble 
     int 80h 

     ; Calculate the double of the number entered 
     mov ebx, [userNumber] 
     shl ebx, 1  ; Shift the the left by one bit 
     mov [doubleNumber], ebx 

     ; Output double of the number entered 
     mov eax, 4 
     mov ebx, 1 
     mov ecx, doubleNumber 
     mov edx, 5 
     int 80h 

     ; Leave program 
     mov eax, 1 
     mov ebx, 0 
     int 0x80 

これが最終的な結果である... Here(私は...画像を投稿するにはまだ十分な評判を持っていない)

あなたが見ることができるように、問題がある...また、私は、 '数字の半分はxxxxxです。'の後に新しい行を追加したいと思います。

は、あなたの代わりに数値を、数字のためにASCIIコードに算術演算をやっているよう

答えて

1

が見えるありがとうございます。

+0

これは問題です...どうすればASCII値を整数値に変換できますか? – Triwis

+0

@Triwis:0のASCIIコード(0x30または48)を引いてください。しかし、まだ10進数の個々の数字があるので、算術命令を使用する場合は、まだキャリーと借用について心配する必要があります。または、バイナリ(コンピュータフレンドリー)番号に変換し、算術演算を行い、元に戻すことができます。 –

+0

ありがとう – Triwis

0

EOLコード(13,10)がありません。

msgHalf   db 'The half of the entered number is ', 13, 10