关于用and转换大小写的汇编程序
assume cs:code,ds:data,ss:stackdata 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位,不过,我两个都试过了,都不行
哪里写错了 求指教 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
调试通过。 兰陵月 发表于 2016-3-30 14:58
1、我这边编译显示“and ds:,11011111b”语法错误。将这一句改成
mov al,ds:
and al,11011111B
恩我细看才发现原来是自己傻,明明已经是大写还要改大写 ,然后就改过来了,不管怎样还是多谢了,至于sp怎么设置,我也不清楚,毕竟我也是刚学到栈,之所以会用到,只不过是想顺便练一下栈的使用而已。对了,你说 “SP指向的地方不知道哪里去了”这句话是什么意思,我需要怎么修改才对? 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就指向了栈底,这是个空栈!后面就拿来用就是了。
兰陵月 发表于 2016-3-30 16:08
把定义栈的地方改成(栈操作是1个字为单位,不要定义成db型)
stack segment
dw '0' ...
sp一定要10H?如果不是 那么依据是什么? Fight_ 发表于 2016-3-30 20:30
sp一定要10H?如果不是 那么依据是什么?
好吧 我知道为什么了 Fight_ 发表于 2016-3-30 20:32
好吧 我知道为什么了
SP当然不一定是10H,这里是根据定义的栈大小来,你也可以把SP设置为0EH也可以,因为在这个例子里,用不到那么多的空间。
页:
[1]