linux下的一个很简单的汇编程序 百思不得其解阿,请各位大哥帮帮小弟

时间:2022-09-30 01:09:37
.section .data
output1:
.ascii "ebx:    %d\n"
output2:
.ascii "eax: %d\n"

.section .text
.globl main
main:

movl $18,%eax
movl $11,%ebx

pushl %ebx
pushl $output1
call printf

# addl $8,%esp

pushl %eax
pushl $output2
call printf

pushl $0
call exit

#怎么也得不出正确答案
 我想应该输出
      ebx:  11
      eax:  18

但总是输出
ebx:    11
eax:    3323728
eax:    24

请各位帮忙阿

7 个解决方案

#1


把 # addl $8,%esp 这句前面的#号去掉试试.
把.ascii改为.asciz试试.

#2


这个问题我已经知道了.谢谢各位!!

但是现在想问另一个问题,就是能不能在在汇编代码中嵌入"指令码",或者专门用指令码写一个程序,怎么编译


例如:#
.section .data
output:
.ascii "output: %d\n"
.section .text
.globl main
main:
movl $5,%ebx
B8 00 00 00 00
BF 00 00 00 00
89 C3

pushl %ebx
pushl $output
call printf

pushl $0
call exit

#3


怎么写啊 ,各位大哥帮帮忙啊

#4


你的第1个程序有2处错误:
1、你想打印eax的值,但你在打印ebx值之后,调用了一个printf函数。这时eax值 已经被改变了。
2、你打印ebx之后,因为这个printf函数是不负责平衡堆栈的,所以后面有个add esp的操作。而你打印eax之后没有进行堆栈调整。这样幸亏你调用 了exit。否则会引起程序崩溃。

定义机器码,即指令码,可以用.byte伪命令,相当于.ascii伪指令。我也是现学现卖。

#5


B8 00 00 00 00
BF 00 00 00 00
89 C3
能用纯指令码些吗,  怎么写 ,给我举个例子,谢谢

#6


试一下 .byte 0xb8,0x0,0x0,...
or .byte $0xb8,$0x0,...
我没有用过这个,是看的教程。。

#7


hao  thank you!

#1


把 # addl $8,%esp 这句前面的#号去掉试试.
把.ascii改为.asciz试试.

#2


这个问题我已经知道了.谢谢各位!!

但是现在想问另一个问题,就是能不能在在汇编代码中嵌入"指令码",或者专门用指令码写一个程序,怎么编译


例如:#
.section .data
output:
.ascii "output: %d\n"
.section .text
.globl main
main:
movl $5,%ebx
B8 00 00 00 00
BF 00 00 00 00
89 C3

pushl %ebx
pushl $output
call printf

pushl $0
call exit

#3


怎么写啊 ,各位大哥帮帮忙啊

#4


你的第1个程序有2处错误:
1、你想打印eax的值,但你在打印ebx值之后,调用了一个printf函数。这时eax值 已经被改变了。
2、你打印ebx之后,因为这个printf函数是不负责平衡堆栈的,所以后面有个add esp的操作。而你打印eax之后没有进行堆栈调整。这样幸亏你调用 了exit。否则会引起程序崩溃。

定义机器码,即指令码,可以用.byte伪命令,相当于.ascii伪指令。我也是现学现卖。

#5


B8 00 00 00 00
BF 00 00 00 00
89 C3
能用纯指令码些吗,  怎么写 ,给我举个例子,谢谢

#6


试一下 .byte 0xb8,0x0,0x0,...
or .byte $0xb8,$0x0,...
我没有用过这个,是看的教程。。

#7


hao  thank you!