NASM在线运行

版本:

所属目录
点击了解高性能代码运行API
运行结果
教程手册
代码仓库
极速运行
终端运行
图形+终端

                        
以下是用户最新保存的代码
计算字符串长度 发布于:2021-05-04 08:50 [更多]
显示目录

引用外部文件



学习嵌入式的绝佳套件,esp8266开源小电视成品,比自己去买开发板+屏幕还要便宜,省去了焊接不当搞坏的风险。 蜂鸣版+触控升级仅36元,更强的硬件、价格全网最低。

点击购买 固件广场

引用外部文件允许我们从程序中移动代码,并将其放入单独的文件中。这种技术对于编写干净、易于维护的程序非常有用。可重用代码位可以作为子例程编写,并存储在称为库的单独文件中。当您需要一段逻辑时,您可以在程序中包含该文件,并将其当作同一文件的一部分来使用。

在这节课中,我们将把字符串长度计算子例程移动到一个外部文件中。我们还使字符串打印逻辑和程序退出逻辑成为一个子程序,我们将把它们移到这个外部文件中。一旦它完成,我们实际的程序将是干净的,更容易阅读。

然后,我们可以声明另一个消息变量并两次调用print函数,以演示如何重用代码。

注意:我不会在函数中显示代码。Asm后这一课除非它改变。如果需要,它将被包括在内。

functions.asm

;------------------------------------------
; int slen(String message)
; String length calculation function
slen:
    push    ebx
    mov     ebx, eax

nextchar:
    cmp     byte [eax], 0
    jz      finished
    inc     eax
    jmp     nextchar

finished:
    sub     eax, ebx
    pop     ebx
    ret


;------------------------------------------
; void sprint(String message)
; String printing function
sprint:
    push    edx
    push    ecx
    push    ebx
    push    eax
    call    slen

    mov     edx, eax
    pop     eax

    mov     ecx, eax
    mov     ebx, 1
    mov     eax, 4
    int     80h

    pop     ebx
    pop     ecx
    pop     edx
    ret


;------------------------------------------
; void exit()
; Exit program and restore resources
quit:
    mov     ebx, 0
    mov     eax, 1
    int     80h
    ret

helloworld-inc.asm

; Hello World Program (External file include)
; Compile with: nasm -f elf helloworld-inc.asm
; Link with (64 bit systems require elf_i386 option): ld -m elf_i386 helloworld-inc.o -o helloworld-inc
; Run with: ./helloworld-inc

%include        'functions.asm'                             ; include our external file

SECTION .data
msg1    db      'Hello, brave new world!', 0Ah              ; our first message string
msg2    db      'This is how we recycle in NASM.', 0Ah      ; our second message string

SECTION .text
global  _start

_start:

    mov     eax, msg1       ; move the address of our first message string into EAX
    call    sprint          ; call our string printing function

    mov     eax, msg2       ; move the address of our second message string into EAX
    call    sprint          ; call our string printing function

    call    quit            ; call our quit function
~$ nasm -f elf helloworld-inc.asm
~$ ld -m elf_i386 helloworld-inc.o -o helloworld-inc
~$ ./helloworld-inc
Hello, brave new world!
This is how we recycle in NASM.
This is how we recycle in NASM.

第二个消息输出了两次。这将在下一课中确定。

由JSRUN为你提供的NASM在线运行、在线编译工具
        JSRUN提供的NASM 在线运行,NASM 在线运行工具,基于linux操作系统环境提供线上编译和线上运行,具有运行快速,运行结果与常用开发、生产环境保持一致的特点。
yout