请问为什么输入y时跳不到不到s1呢?
本帖最后由 大黑鱼 于 2014-5-7 14:15 编辑data segment
a db 'y'
y db 'YES!$'
n db 'NO!$'
len db 2
data ends
code segment
assume ds:data,cs:code
start: mov ax,data
mov ds,ax
lea dx,len
mov ah,0ah
int 21h
cmp al,a
je s1
lea dx,n
mov ah,09
int 21h
jmp s0
s1: lea dx,y
mov ah,09
int 21h
s0: mov ax,4c00h
int 21h
code ends
end start
data segment
a db 'y'
y db 'YES!$'
n db 'NO!$'
len db 2
data ends
code segment
assume ds:data,cs:code
start: mov ax,data
mov ds,ax
mov bx,offset a
lea dx,len
mov ah,0ah
int 21h
mov al,len+2
cmp al,
je s1
lea dx,n
mov ah,09
int 21h
jmp s0
s1: lea dx,y
mov ah,09
int 21h
s0: mov ax,4c00h
int 21h
code ends
end start
程序出错的原因是0ah号int 21中断的返回值不是在al中
入口参数:AH=0AH
DS:DX=存放输入字符的起始地址
接受输入字符串缓冲区的定义说明:
1、第一个字节为缓冲区的最大容量,可认为是入口参数;
2、第二个字节为实际输入的字符数(不包括回车键),可看作出口参数;
3、从第三个字节开始存放实际输入的字符串;
4、字符串以回车键结束,回车符是接受的最后一个字符;
5、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。 你看你又粗心了,a明明代表的是 y 的偏移地址,又不是y本身
而你又拿 y 的偏移地址,去跟 y 比较,你说 y减去 y 的地址 怎么可能会是 0 所以 je 永远不执行,因为结果永远不等于0
start: mov ax,data
mov ds,ax
lea dx,len
mov ah,0ah
int 21h
cmp al,a
je s1
xiaosawanjava 发表于 2014-5-6 11:50 static/image/common/back.gif
你看你又粗心了,a明明代表的是 y 的偏移地址,又不是y本身
而你又拿 y 的偏移地址,去跟 y 比较,你说 y...
恩恩!但是如果改为
mov ds,ax
mov bx,a
lea dx,len
mov ah,0ah
int 21h
cmp al,
也不行啊!请问该怎样改呢? 粗略一看你的这一行y db 'YES!$' 下边一行也是同样错误
'YES!$' 2个字节能放的下? intel汇编不是太清楚 如果是AT& T我倒是可以看一下 oggplay 发表于 2014-5-6 23:43 static/image/common/back.gif
粗略一看你的这一行y db 'YES!$' 下边一行也是同样错误
'YES!$' 2个字节能放的下? intel汇编不 ...
应该是可以的!关键是跳转的问题! vkevke_3437 发表于 2014-5-6 10:24 static/image/common/back.gif
data segment
a db 'y'
y db 'YES!$'
谢谢啦!不介意加个好友吧! 大黑鱼 发表于 2014-5-7 17:43 static/image/common/back.gif
谢谢啦!不介意加个好友吧!
加不了 哈哈 论坛等级不够
页:
[1]