私はアセンブリ言語を学び始めています。私がする必要があるプログラムは非常に簡単です。 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コードに算術演算をやっているよう
これは問題です...どうすればASCII値を整数値に変換できますか? – Triwis
@Triwis:0のASCIIコード(0x30または48)を引いてください。しかし、まだ10進数の個々の数字があるので、算術命令を使用する場合は、まだキャリーと借用について心配する必要があります。または、バイナリ(コンピュータフレンドリー)番号に変換し、算術演算を行い、元に戻すことができます。 –
ありがとう – Triwis