创建一个宏以将存储在rax中的数字打印到控制台,宏也应具有错误处理

问题描述

创建一个宏以将rax中存储的数字打印到控制台。如果rax中的值不是真正的数字(从0到9),此宏还应该具有错误处理功能,以向控制台显示错误消息?

宏,我在单独的文件中创建

    %macro digitPrinter 2

section .data

text1 db "You entered a digit",10,0
size1 equ $-text1

text2 db "Not a digit",0
size2 equ $-text2       


    mov rax,4
    mov rbx,1
    mov rcx,%1
    mov rdx,%2
    int 128



    mov rbx,[%1]

    cmp rbx,'9'
    jle check_more  

Not_digit:

    call textPrinter2   
    call exit


check_more:
    cmp rbx,48
    jl Not_digit
    call textPrinter1
    call exit


textPrinter1:   
    mov rax,text1
    mov rdx,size1
    int 128
    ret

textPrinter2:   
    mov rax,text2 
    mov rdx,size2
    int 128
    ret

exit :
    mov rax,1
    mov rbx,0
    int 128
    ret


%endmacro

然后我将此文件包含在主.asm文件

    %include "PrintDigit_3129.inc"

section .data


section .bss
result resb 1

section .text

global _start

_start:

    mov rax,'5'
    mov [result],rax
    digitPrinter result,1 
    

程序使用make实用程序可以完美执行,但是会出现运行时错误,“分段错误(核心已转储)”我认为这可能是由于访问内存地址时宏中的问题所致,我尝试了几次却无法解决此问题

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)