鱼C论坛

 找回密码
 立即注册
查看: 2474|回复: 6

关于用and转换大小写的汇编程序

[复制链接]
发表于 2016-3-30 09:51:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
assume cs:code,ds:data,ss:stack
        data segment
                db 'A','b','c'
        data ends
        stack segment
                db '0','0','0','0','0','0','0','0'
        stack ends
        code segment
start:  mov        ax,data
                mov ds,ax
                and ds:[0],11011111b
                mov ax,stack
                mov ss,ax
                mov sp,ax
                push ds:[0]
                mov ax,2000h
                mov ds,ax
                pop ax
                mov ds:[0],ax
                mov ax,4c00h
                int 21h
        code ends
end start
以上是我的代码。我忘记了应该改变第6位还是第5位,不过,我两个都试过了,都不行
哪里写错了 求指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-3-30 14:58:39 | 显示全部楼层
1、我这边编译显示“and ds:[0],11011111b”语法错误。将这一句改成
mov al,ds:[0]
and al,11011111B
2、不理解为何这样设置栈,SP指向的地方不知道哪里去了,指那么远是何意,实在是没理解。
                mov ax,stack
                mov ss,ax
                mov sp,ax
3、整个程序实现什么功能?变大写?如果是要把字母都变成大写,上面的程序之变了第一个元素,而第一个元素A本来就是大写。变与不变都是大写。b和c没有用到。

下面这个程序是否可以?
assume cs:code,ds:data
        data segment
                db 'A','b','c'
        data ends

        code segment
start:          mov ax,data
                  mov ds,ax
                               
                  mov cx,3
                  mov bx,0
                       
       s:          mov al,ds:[bx]
                  and al,11011111b
                  mov ds:[bx],al
                  inc bx
                  loop s
               
                  mov ax,4c00h
                  int 21h
        code ends
end start

调试通过。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-30 15:53:33 | 显示全部楼层
兰陵月 发表于 2016-3-30 14:58
1、我这边编译显示“and ds:[0],11011111b”语法错误。将这一句改成
mov al,ds:[0]
and al,11011111B

恩  我细看才发现原来是自己傻,明明已经是大写还要改大写 ,然后就改过来了,不管怎样还是多谢了,至于sp怎么设置,我也不清楚,毕竟我也是刚学到栈,之所以会用到,只不过是想顺便练一下栈的使用而已。对了,你说 “SP指向的地方不知道哪里去了”这句话是什么意思,我需要怎么修改才对?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-30 16:08:15 | 显示全部楼层
Fight_ 发表于 2016-3-30 15:53
恩  我细看才发现原来是自己傻,明明已经是大写还要改大写 ,然后就改过来了,不管怎样还是多谢了,至于s ...


把定义栈的地方改成(栈操作是1个字为单位,不要定义成db型)
stack segment
                dw '0','0','0','0','0','0','0','0'
stack ends

栈初始化:
mov ax,stack
mov ss,ax
mov sp,10H
这样栈指针SS:SP就指向了栈底,这是个空栈!后面就拿来用就是了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-30 20:30:20 | 显示全部楼层
兰陵月 发表于 2016-3-30 16:08
把定义栈的地方改成(栈操作是1个字为单位,不要定义成db型)
stack segment
                dw '0' ...

sp一定要10H?如果不是 那么依据是什么?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-30 20:32:21 | 显示全部楼层
Fight_ 发表于 2016-3-30 20:30
sp一定要10H?如果不是 那么依据是什么?

好吧 我知道为什么了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-3-31 09:36:09 | 显示全部楼层
Fight_ 发表于 2016-3-30 20:32
好吧 我知道为什么了

SP当然不一定是10H,这里是根据定义的栈大小来,你也可以把SP设置为0EH也可以,因为在这个例子里,用不到那么多的空间。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-10-6 18:30

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表