0
UNIX/LINUXコマンドの対応するアセンブリコードを書きたいwc
このコードはテスト用です。アセンブリ内の文字列から文字と行を数えるには?
global main
extern printf
section .data
fmt:
db "%ld %ld",10,0
msg:
db 'CSE DU',10,'Dhaka',10,'Bangladesh',0
;db 'CSE DU',10,0
section .text
main:
push rbp
mov rcx , 0 ; rcx = number of charecter
mov rbx , 0 ; rbx = number of line
lp:
mov rax , [msg+rcx]
inc rcx
cmp rax , 0
je exit ; jump if rax = 0 means EOF ; break
cmp rax , 10
jne lp ; jump if rax != 10 means not new line
inc rbx ; increment rbx if new line found
jmp lp ; continue
exit:
dec rcx
mov rdi , fmt
mov rsi , rbx
mov rdx ,rcx
call printf
pop rbp
ret
このコードの結果は、0 23
あるが、正しい結果が2 23
あります。
私は(コードでコメントアウトある)msg: db 'CSE DU',10,0
を使用する場合、結果が正確であるとの結果が、私はグーグルで検索しましたが、私のプラットフォームのすべてのソリューションを取得できませんでした1 7
です。 私はUbuntu(Linux)を使用しています。私のマシンは64ビットです。アセンブラはNASMで、printf functinを使用しています。
多くの時間を費やしましたが、問題は検出されませんでした。もし誰かが私を助けてください検出します。
値の読み取りと比較します値を64ビット値にゼロ拡張するために 'movzx'を使用してください。 'mov rax、[msg + rcx]は1バイトではなく8バイトを読み込んでいます。 – doug65536