我正在嘗試用 NASM 做一個非常簡單的組裝練習,但是我所學到的一切都表明這應該有效,但事實并非如此。
它應該遍歷字串“Burning The Midnight Oil”,并將字符反向放入dest,以便將“liO thgindiM ehT gninruB”列印到輸出。它不是。它只是列印 x 的字串,無論我做什么來改變它。
我在這里錯過了什么?創建后如何編輯dest的內容?我很累。
global _start
section .text
_start: mov rax, 1
mov rdi, 1
mov rsi, dest
mov rdx, len
syscall
mov rax, 60
xor rdi, rdi
syscall
section .data
src: db 'Burning The Midnight Oil', 10
dest: db 'xxxxxxxxxxxxxxxxxxxxxxxx', 10
len: equ $ - dest
xor rcx,rcx
mov rcx,len
mov rsi,len
loopstart:
sub rsi,rcx
mov al,[src rcx]
mov [dest rsi],al
dec rcx
jnz loopstart
uj5u.com熱心網友回復:
程式在_start標簽處開始執行。您甚至在處理字串之前立即顯示并退出!移動_start:處的回圈代碼。
您len: equ $ - dest包括換行代碼 (10)。那是錯誤的!您必須將該位元組留在原處。
len: equ ($ - dest) - 1 ; Iteration count
寫入字串的最后位置需要使用“長度 - 1”,因此寫入 mov [dest rsi-1], al
復制字串只需要使用兩個偏移量:一個遞增,另一個遞減直到零:
_start:
mov rdi, len
xor esi, esi
loopstart:
mov al, [src rsi]
mov [dest rdi - 1], al
dec rdi
jnz loopstart
mov rax, 1
mov rdi, 1
mov rsi, dest
mov rdx, len
syscall
mov rax, 60
xor edi, edi
syscall
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/381524.html
