问题描述
创建一个宏以将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
%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 (将#修改为@)