我試圖將一個值移動到資料會話中的一個變數,但是當我在資料會話中這樣做時,mov [valor], rax我得到了無效字符而不是一個應該是變數當前值減去 1 的數字。
section .text
global main,_start
main:
mov ebp, esp
_start:
;read int value
mov edx,4
mov ecx,valor
mov ebx,1
mov eax,3
int 0x80
;write int value
mov edx,4
mov ecx,valor
mov ebx,1
mov eax,4
int 0x80
;load variable in stack
mov rax,valor
push rax
;load number 1 in stack
mov rax,1
push rax
;subtraction (valor - 1)
pop rbx
pop rax
sub rax,rbx
mov [valor], rax
;write again int value
mov edx,4
mov ecx,valor
mov ebx,1
mov eax,4
int 0x80
;exit
mov ebx,0
mov eax,1
int 0x80
section .data
valor: dd "%d", 4
當我輸入數字 2 時的輸出:
2 ;first print
?@ ;second print
我感謝任何幫助
uj5u.com熱心網友回復:
在 NASM 中,類似的指令mov rax,valor將加載valor變數的地址。你需要它的價值,所以寫。
通常在對輸入的數字進行減法運算之前,您需要將輸入的字符轉換為等效的二進制字符,但是您輸入的“2”可以像現在這樣減去 1:mov rax, [valor]
; input "2"
mov eax, [valor]
sub eax, 1
mov [valor], eax
; output "1"
如果出于學習目的,您當然可以像以前一樣使用堆疊......
section .data valor: dd "%d", 4
這個“%d”毫無用處!寫作valor: dd 0更有意義。將 valor放在.bss部分最有意義。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/534298.html
標籤:Linux部件64位鼻炎
下一篇:如何將這段代碼轉換成匯編語言
