首页 > 编程语言 >汇编语言学习_5_包含外部文件

汇编语言学习_5_包含外部文件

时间:2023-03-01 23:35:57浏览次数:47  
标签:包含 eax 汇编语言 mov helloworld 外部 ebx asm inc

第五节

包含外部文件

翻译自:https://asmtutor.com/

外部包含文件允许我们从我们的程序中移动代码并将其放入单独的文件中。这种技术对于编写干净、易于维护的程序很有用。可重用的代码位可以编写为子程序并存储在称为库的单独文件中。当您需要一段逻辑时,您可以将该文件包含在您的程序中并使用它,就好像它们是同一文件的一部分一样。
在本课中,我们将把我们的字符串长度计算子程序移动到一个外部文件中。我们还填充了我们的字符串打印逻辑和程序退出逻辑一个子例程,我们将把它们移到这个外部文件中。一旦完成,我们的实际程序将变得干净且更易于阅读。
这样,我们可以声明再声明一个变量,调用 print 函数两次,来演示如何重用代码。

注意: 除非它发生变化,否则我不会在本课后展示 functions.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)
; 编译: nasm -f elf helloworld-inc.asm
; 链接 (64 bit systems require elf_i386 option): ld -m elf_i386 helloworld-inc.o -o helloworld-inc
; 运行: ./helloworld-inc
 
%include        'functions.asm'                             ; 包含外部文件
 
SECTION .data
msg1    db      'Hello, brave new world!', 0Ah              ; 第一个信息串
msg2    db      'This is how we recycle in NASM.', 0Ah      ; 第二个信息串
 
SECTION .text
global  _start
 
_start:
 
    mov     eax, msg1       ; 将第一个字符串的地址移动到 EAX
    call    sprint          ; 调用字符串打印函数
 
    mov     eax, msg2       ; 将第二个字符串的地址移动到 EAX
    call    sprint          ; 调用字符串打印函数
 
    call    quit            ; 调用退出函数

~$ 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.

错误:我们的第二条消息输出了两次。这将在下一课中修复。

标签:包含,eax,汇编语言,mov,helloworld,外部,ebx,asm,inc
From: https://www.cnblogs.com/chai-yuan/p/17170329.html

相关文章

  • 汇编语言语句格式
    通常一个语句常占一行(支持续行符“\”)一个语句不超过132个字符,4个部分执行性语句:表达处理器指令,实现功能标号:硬指令助记符操作数,操作数;注释说明性语句:表达伪指令,控......
  • 获取Winform窗体或Panel下包含的所有控件、根据控件名称获取指定控件
    一、实现效果在Winform中窗体(Form)就像一个容器,可以包含所有的控件(比如:panel、button、textedit等控件);如果把窗体看做是Winform中最大的容器,那么Panel可以看做第二,Pa......
  • SQL Server 2022 包含的可用性组
    介绍SQLServer2022引入了包含的可用性组的新概念。这是DBA自10年前引入可用性组以来一直在等待的事情。包含的可用性组通过在数据库副本之间复制系统对象(如SQL......
  • 2023-03-01 'react-natvie' 不是内部或外部命令,也不是可运行的程序 这个报错是因为你
    问题描述:想要初始化一个新的rn项目,执行【react-natvieinitmyApp--version0.68.2】,报错:'react-natvie'不是内部或外部命令,也不是可运行的程序原因:没有全局安装react-n......
  • pat乙级:模拟链表问题(汇总,包含所有pat中链表题目分析)
    更新:优化文章结构,增加了部分内容如(1110区块反转)和自己代码和他人代码分析。看完你就懂了转载请注明出处和链接地址:(https://www.cnblogs.com/ahappyfool/p/17156470.htm......
  • jQuery中选择器(包含实例)
    因为我查了一下,发现网上别人总结的确实也都不错了,所以我下面主要是对选择器的使用(其实主要还是为了督促自己多练习使用啦)推荐两个我觉得不错的关于选择器的总结:​​jQuery选......
  • 汇编语言学习_3_计算字符串长度
    第三节计算字符串长度翻译自:https://asmtutor.com/背景知识为什么我们需要计算字符串的长度?好吧,sys_write要求我们向它传递一个指向我们要在内存中输出的字符串的指......
  • 汇编语言学习_4_函数
    第四节函数翻译自:https://asmtutor.com/介绍函数(子程序)函数/子程序(functions/subroutines)是可重用的代码片段,程序可以调用它们来执行各种可重复的任务。函数是使......
  • 汇编语言学习_2_正确的退出方式
    第二节正确的退出方式翻译自:https://asmtutor.com/背景知识在Lesson1中成功学习了如何执行系统调用之后,现在需要学习内核中最重要的系统调用之一sys_exit。请注......
  • wsl2 通过桥接网络实现被外部局域网主机直接访问
    wsl2通过桥接网络实现被外部局域网主机直接访问背景介绍之所以有这个需求的主要原因是需要用WSL和外部机器人硬件调试分布部署的ROS系统,WSL2是在windows主机内部建立的......