我在這裏找到了一些關於將值轉換爲ascii的主題。但我有點卡在這裏。 這裏是我的代碼:彙編 - 將值轉換爲ASCII
;GetPID
SECTION .data
msg: db "Your PID is:" ;pidmsg
msgl: equ $-msg ;pidlen
lookup: db ""
SECTION .bss
pid: resb 8 ;test is a variable im testing to
;receive the eax from sys_getpid
SECTION .text
global _start
_start:
call getpid ;get pid number into eax
mov ebx,0xa
lea ebp, [pid+6]
call ASCIIC
jmp exit ;exit
exit:
mov eax,1
mov ebx,0
int 0x80
getpid:
mov eax,20 ;getpid function (sys_getpid)
int 0x80
ret
;ASCIIC was taken from http://theropfather.github.io/asm/getpid_tutorial.html
ASCIIC:
div ebx ;Divide the PID
mov byte cl, [lookup+edx] ;Copy ASCII value to CL
mov [ebp], cl ;Copy ASCII value to buffer
dec ebp ;Next byte into buffer
xor edx, edx ;Clear the remainder
inc eax ;Dec eax tricking jnz
dec eax ;Push back to original value
jnz ASCIIC ;Keep looping until eax is zero
call .printPID ;Print out the buffer
ret
.printPID:
mov ecx, msg ;message
mov edx, msgl ;msg len
mov ebx,0x1 ;FD stdout
mov eax, 0x4 ;sys_write call
int 0x80 ;Call
mov [pid+7], byte 0xA ;Push a newline to PID string
mov edx,0x8 ;Max length of 8 bytes
mov ecx,pid ;Push PID value
mov ebx,0x1 ;FD stdout
mov eax, 0x4 ;sys_write call
ret
所以這裏的關鍵是獲取當前程序(本)中的PID號,並打印出來。 該程序調用sys_getpid(eax = 20)並返回pidnumber。但是,sys_write參數是:ssize_t sys_write(unsigned int fd, const char * buf, size_t count)
第二個參數是一個字符,所以我需要將每個數字轉換爲char。
輸出只是:「您的PID是:」
任何人? :)
如果不使用C標準庫,你必須這樣做嗎?如果沒有,使用帶格式說明符的'printf'會比使用fd 1的'sys_write'更容易。 – us2012
我不想使用C lib。只是中斷和系統調用。 ;) – int3