gpt4 book ai didi

c - 用汇编语言打印数组元素

转载 作者:行者123 更新时间:2023-11-30 18:58:57 31 4
gpt4 key购买 nike

我在 nasm 程序集中编写了以下代码,用于在屏幕上打印数组元素。在此代码中没有编译错误,但我在屏幕上得到垃圾值。

section .data
num1: dd 10, 20, 30, 40, 50, 10, 20, 30, 40, 50,300
total: dd 0
msg : dd "Value=%d",10,0

section .text
extern _printf
global _main
_main:
push ebp
mov ebp,esp
mov ebx,num1 ;point bx to first number
mov ecx,11 ;load count of numbers in ecx
mov eax,0
loop:
mov eax,[ebx]

push msg
call _printf



add ebx,4
sub ecx,1
jnz loop

mov esp,ebp
pop ebp

ret

解决方案

section .data
num1: dd 10, 20, 30, 40, 50, 10, 20, 30, 40, 50,300
total: dd 0
msg : dd "Value=%d",10,0

section .text
extern _printf
global _main
_main:
push ebp
mov ebp,esp
mov eax,10
mov ebx,num1 ;point bx to first number
mov ecx,0 ;load 0

loop:

;store the value because external function like printf modify the value
push ebx
push eax
push ecx

push DWORD [ebx]

push msg
call _printf
add esp,8

;restore thses values
pop ecx
pop eax
pop ebx
inc ecx
add ebx,4
cmp ecx,eax
jne loop



mov esp,ebp
pop ebp

ret

最佳答案

  1. 显然您想将两个参数传递给 printf。然后你必须将它们都插入(你似乎认为其中之一是在 EAX 中传递的,但事实并非如此)。
  2. C 函数可以随意破坏 ECX,因此您应该保存并恢复它(您现在没有使用其他调用者保存的寄存器,但现在是时候阅读有关 X86 调用约定的更多信息了)。

关于c - 用汇编语言打印数组元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14279119/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com