zoukankan      html  css  js  c++  java
  • nasm过程调用

      通常都是将一些通用的功能封装成一些函数,然后方便以后的调用,现在来看一下在nasm中是如何实现的。

      先定义一个print.pro 的nasm过程文件,文件内容如下:

     1 print_char:
    2 pusha
    3 mov dl, al
    4 mov ah, 02h
    5 int 21h
    6 popa
    7 ret

      其中print_char, print_str就是过程的名字,每个过程需要使用ret去跳回调用者。  

      然后写一个调用print.pro的文件,proc.asm, 代码如下:

    [org 0x0100]
    [BITS 16]
    %include "print.pro"
    [section .data]
    msg DB 'hello', 0Dh, 0Ah, '$'
    [section .text]
    mov al, 65h
    call print_char
    ret

      使用%include导入我们的过程文件print.pro,然后通过AL传递一个参数,传递给print_char,再使用call调用指定的过程。不过发现屏幕上没有打印任何内容,这是为什么呢?这是因为com文件属于纯二进制格式,编译器是按照我们的输入方式和顺序进行编译的,产生的代码也是按照这个顺序。由于我们%include "print.pro"在程序的最前面,所以在程序编译运行的时候,其实先执行了print.pro的内容,可以通过debug命令,就能看出来。然后又因为,al和ax没有内容,所以没有输出任何东西。我们只要稍微改下程序,就可以了。

      修改后的程序,如下:

    1 [org 0x0100]
    2 [section .code]
    3 jmp start
    4 %include "print.pro"
    5 [section .code]
    6 start:
    7 mov al, 'A'
    8 call print_char
    9 ret

      在我们%include .pro文件之前,先执行我们自己定义的入口,这样就能争取打印字符了。


  • 相关阅读:
    异步--记录
    css过渡——实现元素的飞入飞出
    使用touch操作图片
    .net mvc中epplus导出excel
    html无卡顿动画实现——requestAnimationFrame
    调用手机摄像头并上传图片--jquery ajax
    jquery form表单赋值封装
    记录
    .net mvc 使用 aspose.cells导出数据
    explain简介
  • 原文地址:https://www.cnblogs.com/chobits/p/2291938.html
Copyright © 2011-2022 走看看