對于 x86-64 Linux 系統的 NASM 上的匯編代碼,我還是新手,我正在嘗試撰寫一個程式,將存盤在 rdi 中的數字轉換為十進制以便可以列印。我不確定如何撰寫一個正確的函式,該函式將在使用余數作為數字的回圈中除以 10,例如:存盤在 rdi 中的數字 165 將重復除以 165/10,余數為 5,等等。數字輸出看起來像 0000000165。任何反饋將不勝感激!這是我的嘗試:
section .data
BUFLEN: equ 25
buf: times BUFLEN db 0
section .text
global _start
_start:
mov rsi, 1
mov rdi, 453265682
call printnum
mov rax, 60
mov rdi, 0
syscall
printnum:
mov r10, 10
convert:
mov rdx, 0
mov rax, rdi
div r10
add r15, rdx
cmp rax, 1
jnle convert
mov rax, 1 ; = 1
mov rdi, 1 ; = 1
mov rsi, buf ; add of buffer to print
mov rdx, BUFLEN ; num of bytes to write
syscall
ret
uj5u.com熱心網友回復:
您的代碼中有很多部分我想更改,但這里有一個最小的修復,只是讓您的代碼作業。
以下
mov r10, 10
添加
mov r15, 9
擦除
add r15, rdx
cmp rax, 1
jnle convert
并將其更改為
mov rdi, rax
add rdx, '0'
mov [r15 buf], dl
dec r15
jns convert
這是printnum修復的完整功能。
printnum:
mov r10, 10
mov r15, 9
convert:
mov rdx, 0
mov rax, rdi
div r10
mov rdi, rax
add rdx, '0'
mov [r15 buf], dl
dec r15
jns convert
mov rax, 1
mov rdi, 1
mov rsi, buf
mov rdx, BUFLEN
syscall
ret
由你來思考為什么這行得通而你的行不通。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/443214.html
上一篇:裝配中的畫線演算法
