大黑鱼 发表于 2014-5-6 10:24:15

请问为什么输入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


vkevke_3437 发表于 2014-5-6 10:24:16

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、若输入的字符数超过缓冲区的最大容量,则多出的部分被丢弃,系统并发出响铃,直到输入“回车”键才结束输入。

xiaosawanjava 发表于 2014-5-6 11:50:05

你看你又粗心了,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

大黑鱼 发表于 2014-5-6 12:35:17

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,
也不行啊!请问该怎样改呢?

oggplay 发表于 2014-5-6 23:43:42

粗略一看你的这一行y   db   'YES!$' 下边一行也是同样错误
'YES!$' 2个字节能放的下? intel汇编不是太清楚 如果是AT& T我倒是可以看一下

大黑鱼 发表于 2014-5-7 11:26:20

oggplay 发表于 2014-5-6 23:43 static/image/common/back.gif
粗略一看你的这一行y   db   'YES!$' 下边一行也是同样错误
'YES!$' 2个字节能放的下? intel汇编不 ...

应该是可以的!关键是跳转的问题!

大黑鱼 发表于 2014-5-7 17:43:04

vkevke_3437 发表于 2014-5-6 10:24 static/image/common/back.gif
data segment
    a    db    'y'
    y   db   'YES!$'


谢谢啦!不介意加个好友吧!

vkevke_3437 发表于 2014-5-8 14:27:58

大黑鱼 发表于 2014-5-7 17:43 static/image/common/back.gif
谢谢啦!不介意加个好友吧!

加不了 哈哈 论坛等级不够
页: [1]
查看完整版本: 请问为什么输入y时跳不到不到s1呢?