回 帖 发 新 帖 刷新版面

主题:[讨论]宏汇编的一个小问题!

rrr macro r
       macro&r
endm

macro1 macro         ;小写变大写宏程序
       mov cl,e
       mov ch,0      ;串长度,循环次数 
       mov bx,offset e+1
loop1:
       mov al,[bx]   ;取一个字符
       cmp al,'a'
       jb  mtol
       cmp al,'z'
       ja  mtol
       sub al,20h
       mov [bx],al    ;存回原位

mtol:
       inc bx
       loop loop1
endm

macro2 macro         ;大写变小写宏程序 
       mov cl,e
       mov ch,0
       mov bx,offset e+1
loop2:
       mov al,[bx]
       cmp al,'A'
       jb ltom
       cmp al,'Z'
       ja ltom
       add al,20h
       mov [bx],al

ltom:
       inc bx
       loop loop2
endm

data segment
     b db ' 1,Lwercase to Majuscule',10,13
       db ' 2,Majuscule to Lwercase',10,13
       db '  please input a=?',10,13,'$'
     e db 22,'Lwercase and Majuscule  $'    ;22为串长度
data ends

code segment
      assume cs:code,ds:data,es:data
start:
      mov ax,data
      mov ds,ax
      mov es,ax
      mov dx,offset b
      mov ah,09h                             ;提示输入
      int 21h
      mov ah,08h
      int 21h
      cmp al,'1'
      je l1
      rrr 2
      jmp l2
l1:
      rrr 1
l2:
      mov dx,offset e+1
      mov ah,09h
      int 21h
      mov ah,4ch
      int 21h
code  ends
      end start 

这个程序就是提示宏套入错误

我修改了一下,如下:
macro1 macro         ;小写变大写宏程序
       mov cl,e
       mov ch,0      ;串长度,循环次数 
       mov bx,offset e+1
loop1:
       mov al,[bx]   ;取一个字符
       cmp al,'a'
       jb  mtol
       cmp al,'z'
       ja  mtol
       sub al,20h
       mov [bx],al    ;存回原位

mtol:
       inc bx
       loop loop1
endm

macro2 macro         ;大写变小写宏程序 
       mov cl,e
       mov ch,0
       mov bx,offset e+1
loop2:
       mov al,[bx]
       cmp al,'A'
       jb ltom
       cmp al,'Z'
       ja ltom
       add al,20h
       mov [bx],al

ltom:
       inc bx
       loop loop2
endm

data segment
     b db ' 1,Lwercase to Majuscule',10,13
       db ' 2,Majuscule to Lwercase',10,13
       db '  please input a=?',10,13,'$'
     e db 22,'Lwercase and Majuscule  $'    ;22为串长度
data ends

code segment
      assume cs:code,ds:data,es:data
start:
      mov ax,data
      mov ds,ax
      mov es,ax
      mov dx,offset b
      mov ah,09h                             ;提示输入
      int 21h
      mov ah,08h
      int 21h
      cmp al,'1'
      je l1
      macro2
      jmp l2
l1:
      macro1
l2:
      mov dx,offset e+1
      mov ah,09h
      int 21h
      mov ah,4ch
      int 21h
code  ends
      end start 

这样就可以了,不过我不知道第一个为什么错了?

回复列表 (共4个回复)

沙发

把第一段汇编了一下,连个warning都没有。你使用的汇编器可能不支持宏嵌套或者版本太久。

板凳

不是啊
我用的是ml615啊
应该支持这个指令&的

3 楼

你改用masm和tasm试试就明白了。

4 楼

我下了个masm50,可以了
不过我就纳闷了,masm615为什么就不行。都是ms的产品啊
应该是包含的关系啊
第一个很可能是&不能被识别

我来回复

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