哪位大侠帮忙调试一段代码.
原代码是<professional assembly language>第4.4节"Using C Library Functions in Assembly"中的示例.
我的开发环境是64位, 不能直接用.
做了一些修改, 能够编译连接通过, 但是没有输出内容..
环境如下:
操作系统: Linux linux.centos 2.6.32-279.5.2.el6.x86_64 #1 SMP Fri Aug 24 01:07:11 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux
汇编器: GNU assembler version 2.20.51.0.2 (x86_64-redhat-linux) using BFD version version 2.20.51.0.2-5.34.el6 20100205
连接器: GNU ld version 2.20.51.0.2-5.34.el6 20100205
汇编及连接使用的命令:
as ex.004.003.cpuid.s -gstabs -o cpuid.o && ld -dynamic-linker /lib64/ld-linux-x86-64.so.2 -lc cpuid.o -o cpuid
下面是我的修改后的代码:
#.asciz定义的字符串会自动追加末尾的\0字节
.section .data
output:
.asciz "The processor Vendor ID is '%s'\n"
.section .bss
#定义未经初始化的缓冲区
.lcomm buffer, 18
.section .text
.globl _start
_start:
#设置cpuid指令的标志, 读取厂商信息
movl $0, %edi
#执行cpuid指令
cpuid
#将cpuid的输出(ebx, edx, ecx)中读取到$buffer中
movl $buffer, %edi
movl %ebx, (%edi)
movl %edx, 4(%edi)
movl %ecx, 8(%edi)
#将$buffer放入到调用栈
pushq $buffer
#将$output放入到调用栈
pushq $output
#调用系统库函数printf
call printf
#清空为printf函数放入堆栈的参数
addq $16, %rsp
pushq $0
call exit
Thanks in advance!
------解决方案--------------------
我只会intel格式的汇编,看不懂
不过关于输出的问题就看看自己有没在字符串后面加,NULL
有没用UNICODE
------解决方案--------------------
x64位不只是改语法那么简单,还有构架。