汇编语言

qq_45822778 2019-11-20 05:45:28
dxgxx macro buf;宏定义,将大写字母换成小写
local again,next1,next2
mov bx,offset buf
again: mov al,[bx]
.while al!=0
.if al>='A' && al<='Z'
add al,20h
mov [bx],al
inc bx
.else
inc bx
.endif
.endw
endm .model small
.stack
.data
string db 'HeLLO,eveRyboDy !',0
.code
.startup
dxgxx string
mov bx,offset string
.while [bx]!=0
mov dl,[bx]
mov ah,2
int 21h
.endw
done: .exit 0
end 帮我看看哪里有错, dxgxx macro buf
local again,next1,next2
mov bx,offset buf
again: mov al,[bx]
or al,al;cmp al,0
jz next2
cmp al,'A'
jb next1
cmp al,'Z'
ja next1
or al,20h
mov [bx],al
next1: inc bx
jmp again
next2: endm
.model small
.stack
.data string db 'HeLLO,eveRyboDy !',0
.code
.startup
dxgxx string
mov bx,offset string
w1: mov dl,[bx]
or dl,dl;cmp dl,0
jz done
mov ah,2
int 21h
inc bx
jmp w1
done: .exit 0
end 这个说什么宏嵌套有问题啥的,看看啥问题
...全文
103 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
next2: endm 分成两行写:
next2:
endm
qq_45822778 2019-11-22
  • 打赏
  • 举报
回复
应该不是吧,我用的masm集成版
qq_45822778 2019-11-21
  • 打赏
  • 举报
回复
软件提示dxgxx string这里invalid instruction operands
zara 2019-11-21
  • 打赏
  • 举报
回复
不可以吧,al 没设置就使用了。可不可以,编译了运行,看结果对不对;不对,调试软件拉出来,先在节点上界定问题在哪个部分,然后在单步进去看看哪里不合原意。
qq_45822778 2019-11-21
  • 打赏
  • 举报
回复
我改成 mov bx,offset buf .while byte ptr [bx]!=0 .if al>='A' && al<='Z' mov al,[bx] add al,20h mov [bx],al inc bx .else inc bx .endif .endw endm 这样可以不
zara 2019-11-21
  • 打赏
  • 举报
回复
第一个,最后那里应该是 .while byte ptr [bx],!=0 吧;显示的循环里,没有递增 bx;上面的宏定义里的 .while不对吧,除了第一次,再没有设置过 al,所以,要么吧 agin: 囊括进 .while 要么在 endw 前再置 al 如 mov al,[bx]。
第二个,next: endm 这里,endm 另起一行就可以了吧。
qq_45822778 2019-11-21
  • 打赏
  • 举报
回复
引用 1 楼 thesperus的回复:
这么复杂啊

需要这么复杂吗

我是看不懂
就是用宏定义,再后面宏调用,将大写字母转换成小写字母
  • 打赏
  • 举报
回复
估计你用的masm版本太老
qq_45822778 2019-11-21
  • 打赏
  • 举报
回复
我把数据段那里个while和if那里都加了有符号定义,为什么我这里没有有符号数还要加上有符号定义才能运行?

21,449

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧