Fight_ 发表于 2016-3-30 09:51:26

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

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:,11011111b
                mov ax,stack
                mov ss,ax
                mov sp,ax
                push ds:
                mov ax,2000h
                mov ds,ax
                pop ax
                mov ds:,ax
                mov ax,4c00h
                int 21h
        code ends
end start
以上是我的代码。我忘记了应该改变第6位还是第5位,不过,我两个都试过了,都不行
哪里写错了 求指教

兰陵月 发表于 2016-3-30 14:58:39

1、我这边编译显示“and ds:,11011111b”语法错误。将这一句改成
mov al,ds:
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:
                  and al,11011111b
                  mov ds:,al
                  inc bx
                  loop s
               
                  mov ax,4c00h
                  int 21h
      code ends
end start

调试通过。

Fight_ 发表于 2016-3-30 15:53:33

兰陵月 发表于 2016-3-30 14:58
1、我这边编译显示“and ds:,11011111b”语法错误。将这一句改成
mov al,ds:
and al,11011111B


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

兰陵月 发表于 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就指向了栈底,这是个空栈!后面就拿来用就是了。

Fight_ 发表于 2016-3-30 20:30:20

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

sp一定要10H?如果不是 那么依据是什么?

Fight_ 发表于 2016-3-30 20:32:21

Fight_ 发表于 2016-3-30 20:30
sp一定要10H?如果不是 那么依据是什么?

好吧 我知道为什么了

兰陵月 发表于 2016-3-31 09:36:09

Fight_ 发表于 2016-3-30 20:32
好吧 我知道为什么了

SP当然不一定是10H,这里是根据定义的栈大小来,你也可以把SP设置为0EH也可以,因为在这个例子里,用不到那么多的空间。
页: [1]
查看完整版本: 关于用and转换大小写的汇编程序