[英]Assembly - Convert value to ascii
我在这里找到了一些关于将值转换为ascii的主题。 但我有点卡在这里。 这是我的代码:
;GetPID
SECTION .data
msg: db "Your PID is:" ;pidmsg
msgl: equ $-msg ;pidlen
lookup: db "0123456789"
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,所以我需要为每个数字转换为char。
输出只是:“你的PID是:”
任何人 ? :)
int 0x80
来实际打印数字。 div ebx
,计算的是eax = edx:eax / ebx
,因此在你的情况下你必须确保edx
为零。 所以xor edx,edx
在你的div ebx
之前。 ebp
来保持指向当前缓冲区位置的指针。 虽然它在这里工作,基本指针是一个特殊目的寄存器,我认为没有理由在这里滥用它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.