[解決済み] アセンブリ言語 新規ライン
2022-02-17 20:35:09
質問内容
私はアセンブリ言語プログラミングの初心者で、出力を読みやすいように行分けしたいのですが、コードを書いて動作させたところ、実際にはIrvineプロシージャを使って改行することはできないとの報告を受けました。私の教科書ではIrvineの"Crlf"しか使っておらず、このサイトで同様の質問をされた他の方々のコードは私のプログラムを完全に壊してしまい、今迷っています。
私が試したものは
mov ah, 0Eh ;print new line sequence
mov al, 0Dh
int 10h
mov al, 0Ah
int 10h
とにかく、これが私の完全なコードで、Irvine関数はまだ残っています。どなたか、"call Crlf"を使用せずに私が求めている出力を得るのを助けていただけませんか?または、なぜ上記のコードが私のプログラムを壊しているのか教えてください。きっと何か見落としているものがあるのだと思います。
INCLUDE Irvine32.inc
.data
prompt BYTE 'Enter a positive integer: ', 0
report1 BYTE 'The sum is: ', 0
report2 BYTE 'The product is: ', 0
report3 BYTE 'The power result is: ', 0
temp DWORD ? ;
.code
main PROC
; Main program control procedure.
; Calls: GetInteger, AddNumbers, MultiplyNumbers,
; WriteInt, CalculatePower
call GetInteger ;Get the first user entered integer
mov ebx, eax ;Store the value into the EBX register
call GetInteger ;Get the second user entered integer
mov temp,eax ;Copy the value into temp for holding
call AddNumbers ;Find the sum of the two integers
mov edx,OFFSET report1 ;Display sum result
call WriteString
call WriteInt
mov eax, temp ;Replace the EAX value with the second user entered integer
call MultiplyNumbers ;Find the product of the two integers
call Crlf ;New line
mov edx,OFFSET report2 ;Display the product result
call WriteString
call WriteInt
mov eax, temp ;Replace the EAX value with the second user entered integer
call CalculatePower ;Find the power result of the two integers
call Crlf ;New line
mov edx,OFFSET report3 ;Display the power result
call WriteString
call WriteInt
exit ;exit to operating system
main ENDP
;-------------------------------------------------------------
GetInteger PROC
;
; Prompts the user for two integers and stores
; them into EAX and EBX registers
; Receives: Doubleword integers
; Returns: The two integer values in the EAX and EBX registers
; Calls: WriteString, ReadInt
;----------------------------------------------------------------
mov edx,OFFSET prompt ;Prompt user for integer entry
call WriteString
call ReadInt
ret
GetInteger ENDP
;-----------------------------------------------------------------
AddNumbers PROC
;
; Calculates the sum of two 32-bit integers
; Receives: The integer values in the registers EAX and EBX
; Returns: The sum in the EAX register
; Calls: none
;------------------------------------------------------------------
add eax,ebx ;Find the sum
ret
AddNumbers ENDP
;--------------------------------------------------------------------
MultiplyNumbers PROC
;
; Calculates the product of two 32-bit integers
; Receives: The integer values in the registers EAX and EBX
; Returns: The product in the EAX register
; Calls: none
;---------------------------------------------------------------------
mul ebx ;Find the product
ret
MultiplyNumbers ENDP
;--------------------------------------------------------------------
CalculatePower PROC
;
; Calculates the result of the first 32 bit integer to the power
; of the second by using MultiplyNumbers
; Receives: The result of MultiplyNumbers
; Returns: The power result in EAX register
; Calls: MultiplyNumbers
;---------------------------------------------------------------------
mov ecx,eax ;Set the counter with the value of the second integer
sub ecx, 1 ;Subtract one so the counter calls MultiplyNumbers the correct amount
mov eax,ebx ;Copy EBX into EAX so that MultiplyNumbers finds the power result
FindPower:
call MultiplyNumbers;Find the power result
loop FindPower ;Repeat the loop till the count is 0
ret
CalculatePower ENDP
END main
解決方法は?
CRLFは、出力に2バイトのシーケンス、値13と10が追加されただけです。
この2つの値で文字列を作ったら、おそらく
prompt BYTE 'Hello!', 13, 10, 0
またはcr/lf 13,10,0のコンボだけで構成されているので、特別な手続きなしで出力することができます。
関連
-
[解決済み] callq命令とは何ですか?
-
[解決済み] CPUのParity Flagは何のためにあるのですか?
-
[解決済み] error: invalid effective address エラー:有効なアドレスがありません。
-
[解決済み] アセンブリ言語 新規ライン
-
[解決済み] アセンブリMIPS .ALIGNとメモリアドレスの理解
-
[解決済み] ベースレジスタを持たないqword ptr [hexvalue]の意味するところ
-
[解決済み] 未解決のシンボルが残る コードコンポーザースタジオ
-
[解決済み] アセンブリ言語 jeジャンプ機能
-
[解決済み] ワードptrとは何ですか?
-
[解決済み] ST(0)をEAXに移動させる方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン