【问题标题】:Making endline in assembler NASM在汇编器 NASM 中制作 endline
【发布时间】:2015-01-08 00:51:23
【问题描述】:

我想问一下关于在 NASM 汇编器中制作馈线的问题。目前我们在大学里创建简单的程序。

当我之前想要 make endline 时,我只是声明了 byte 并在里面覆盖了“0ah”。类似的东西:

section .text
global _start

_start:

mov eax,4
mov ebx,1
mov ecx,variable
mov edx,1

section .data
variable db 0ah

它有效,但需要很长时间。所以我想直接将“0ah”写入寄存器,而不用初始化变量,这样:

section .text
global _start

_start:

mov eax,4
mov ebx,1
mov ecx,10 ;; hexadecimal 0ah
mov edx,1

但它不起作用。我会寻求帮助。

附言。如果有人有时间,请查看我之前关于寄存器工作的帖子:Binary representation in processor's registers in Nasm

【问题讨论】:

    标签: line nasm


    【解决方案1】:

    您可以将 .data 部分用于您想要使用的字符串值,例如 \n 或您想要使用的其他字符串,并使用 C 函数 printf 和 scanf 来处理 IO。 只需添加:

    extern  printf, scanf
    

    在 asm 文件的开头,然后:

    section .data
       input_n db  'n = ',0
       number   db  '%d',0   
       endofline   db  10,0 
    

    并在 .text 部分中像这样调用 printf:

    mov eax,endofline
    push    eax
    call    printf
    add esp,8
    

    要编译,Makefile 如下:

    main: main.o factorial.o 
        gcc -o main main.o facto.o
    
    %.o: %.asm
        nasm -f elf $^
    
    clean:
        rm -f a.out core *.o *~ main
    

    main.asm 将是您的主要 asm 程序,而 factorial.asm 和其他 cotaining 让我们说 nasm 中的事实函数

    【讨论】:

    • 好的,非常感谢你。我可以将它转换为任何小型库吗?
    • 它只是您程序中的一个部分,使用 C printf 和 scanf 函数。如果你愿意,我会在答案中为你添加一个 Makefile 来编译多个文件
    • 谢谢。好的,请发给我。
    • 已添加到答案中
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-02
    • 2015-07-08
    • 2013-04-13
    • 1970-01-01
    • 2018-09-08
    相关资源
    最近更新 更多