主题:[讨论]宏汇编的一个小问题!
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
这样就可以了,不过我不知道第一个为什么错了?
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
这样就可以了,不过我不知道第一个为什么错了?