回 帖 发 新 帖 刷新版面

主题:[讨论]这个宏汇编怎么错的

exchange macro a
      mov al,a
      local error_ptr,ret_macro,num_ptr
      cmp al,'F'
      ja error_ptr;;大于F不合法则跳转
      cmp al,'0'
      jc error_ptr;;小于0则跳转
      cmp al,'9'
      jbe num_ptr;;比9小则是数字,跳转到数字操作
      sub al,37h
      jmp ret_macro;;是字母减37H后,跳转出去
num_ptr:
  sub al,30h
  jmp ret_macro
error_ptr:
   push ax 
   push dx  
   mov ah,09h
   mov dx,offset error_printf_word;;返回前打印提示,内容为:操作数据不合法,系统将会自动返回
   int 21h
   pop dx
   pop ax
  mov ah,4ch
  int 21h
ret_macro:
  mov a,al
  endm ;;结束宏定义
.model small
.data
 buf db 'ABCDE12345'
 error_printf_word db 'WHAT YOU INPUT IS ERROR!'
.stack
.code
.startup
 push cx
 mov cx,10
 mov di,offset buf
again:
 exchange byte ptr[di] 
 inc di
loop again
 pop cx  
.exit 0
end  


 

回复列表 (共2个回复)

沙发


error_printf_word db 'WHAT YOU INPUT IS ERROR!'后面要加个$符号吧!

:error_printf_word db 'WHAT YOU INPUT IS ERROR!$'

而且比较时也有错吧,小于A大于9的也是不合法数据,觉得应该先和0比较,大于0再和9比较,比九大的还要判断是否在A-F之间。

以上是个人意见,有不足或错误的地方请见谅!

板凳

提供多种网站程序:企业站/商城网店/学校/医院/行政/门户/房产/...什么样的都有!
官方网站  http://www.web300.cn
专业网站建设,永久的技术支持,让您无后顾之忧!
联系:QQ:812256  183317146  384684725,电话0312-4164045 13613394168 

我来回复

您尚未登录,请登录后再回复。点此登录或注册