我正在尝试从用户那里读取3个数字,并将它们存储在一个数组中,然后在NASM中使用paul carter函数向他们展示它们,这是我的代码:

%include "asm_io.inc"

SECTION .bss 

tab resb 3

SECTION .data 
msg db "Un nombre :",10 

SECTION .text 
 global main 
      main:
    mov esi,tab 
    xor ecx,ecx 
get_data:   
    mov eax,msg 
    call print_string 
    call read_int 
    mov [esi+ecx],eax   
    inc ecx 
    cmp ecx,3 
    jne get_data
    call print_nl
    xor ecx,ecx 
    mov edi,tab 
print_data: 
    mov eax,[edi+ecx]
    call print_int 
    inc ecx 
    cmp ecx,3 
    jne print_data 






    mov eax,1 ; exit code 
    int 0x80 ; call exit 

问题是它不执行print_data循环而退出。

#1楼 票数:0

只是要清楚。 这些是您所做的更改吗? 即使ECX寄存器不用作特定功能的输入或输出,它也可能在内部使用。 这就是Michael所说的“ ecx通常是保存呼叫者的”

%include "asm_io.inc"

SECTION .bss 

tab resd 3

SECTION .data 
msg db "Un nombre :",10,0

SECTION .text 
global main 
main:
mov edi,tab 
xor ecx,ecx 
get_data:
push ecx   
mov eax,msg 
call print_string 
call read_int 
mov [edi+ecx*4],eax   
pop ecx
inc ecx 
cmp ecx,3 
jne get_data
call print_nl
mov esi,tab
xor ecx,ecx  
print_data: 
push ecx
mov eax,[esi+ecx*4]
call print_int 
pop ecx
inc ecx 
cmp ecx,3 
jne print_data 

mov eax,1 ; exit code 
int 0x80 ; call exit 

  ask by aouakki translate from so

未解决问题?本站智能推荐:

1回复

NASM反转整数数组

从概念上讲,我试图将这些值压入堆栈并以“相反”的顺序弹出。 实际上,我认为我正在这样做,但不确定。 我要传递的数组在section .data定义为array: dd 1, 2, 3, 4, 5, 6其大小作为int值传递(3 = 3个元素)。 当我运行该应用程序时,它会链接并组装,但数组
1回复

计算浮点数的平均值四舍五入为整数NASM

基本上该程序假设从用户输入浮点数,然后得到它们的总和,它们的平均值(从0.0到100.0),上面的任何东西都不计算,下面的任何东西也不计算在内。 负数不会被计算在内,还会退出循环/程序。 输出和,输出有效数字的数量,最后输出浮点数ROUNDED到最接近的整数的平均值。 我想我现在很接近,到
1回复

NASM程序集,如何打印字符串数组的前4个字节

如果names是这样存储的名称字符串的数组:TomBobPeterJim。 如何分开并分别推送每个名称? 每个名称占用4个字节,对不对? 这是我尝试过的方法,但是它打印了整行:
1回复

Nasm程序集:我正在尝试复制一个字符串,然后在其中搜索特定的单词,进行更改并打印。 卡在复印部分上。

我一直想弄清楚将字符串源复制到目标,应该将其初始化为全零。 似乎我需要找到字符串的大小,启动计数器寄存器,并将stringitem [counter]推入堆栈,递增计数器寄存器。 我什至不知道如何开始,更不用说在字符串中搜索单词了。 谢谢!
1回复

遍历NASM中的阵列

我想学习汇编程序设计,以编写快速有效的代码。 我如何偶然遇到无法解决的问题。 我想遍历双字数组并添加其组件,如下所示: Sum由简单的C驱动程序调用。 函数print_string,print_int和print_nl如下所示: 在对所有数组元素求和后打印结果时,它说的
1回复

NASM数组指针操作

这是一个初学者的问题......但我现在已经挣扎了将近2整天。 我必须在NASM中实现一个与C配合的功能,从主函数(在C中完成)将指向常量短数组的指针数组传递给函数,我必须根据需要对指针进行排序,这需要我读取每个常量短数组中的项目。 因为它是一个指针,所以我的函数不会返回。 传递给
1回复

在 NASM 中使用 printf 循环

在第一个循环中,我填充了array ,然后我想打印这个数组,但是我会出错。 这是Segmentation fault 。 我只是更改ecx寄存器,因为这是我的_loop2计数器。
1回复

将值插入数组并显示,nasm

首先,这是一项家庭作业。 我有一个循环来分别获取两个数字的值,并通过将第一个数字乘以10并与第二个数字相加以获得整数来加入它们。 我正在做所有这些事情并将其保存在我的AL寄存器中,现在我想将该整数插入到数组中,然后扫描该数组并显示这些数字。 如何插入向量并从向量中读取?