注册 登录
编程论坛 汇编论坛

汇编语言的问题请教

zhu224039 发布于 2012-09-28 00:38, 472 次点击
date segment
     zifu db 100 dup(?),'$'
date ends

codesg segment
assume cs:codesg,ds:date
  start:mov ax,date
        mov ds,ax
   node:
        mov ah,1    ;DOS 键盘1号功能调用   作用从键盘输入1个字符并显示  检查ctrl-break键,入口参数无,出口AL=字符
        int 21h
        mov zifu,al  ;将输入字符 放到存储器的数据区
        inc zifu     ;将数据的偏移地址增加1
        cmp al,32    ;比较输入字符是否为空格键  空格ASCII=32
        jnz node      ;不是空格键 程序跳转到NODE处  形成循环
        lea dx,zifu   lea 地址装载指令
        mov ah,9      DOS 9号功能  显示字符串  入口参数为 ds:dx
        int 21h
        mov ah,4ch
        int 21h
codesg ends
end start
我想知道为什么
我将zifu 这个变量的值 inc 后
在后面的DOS 9号功能中 再次引用zifu 这个变量,而字符的输出确是正确的,照说 这个 zifu 的值 应该是加入说我输入X个字符  zifu的值应该是 zifu+x


 DOS 9号功能的输出 后面有跟个 ! (感叹号)     呢    我输入字符的时候是没有输入感叹号的!!!!
只有本站会员才能查看附件,请 登录


[ 本帖最后由 zhu224039 于 2012-9-28 00:54 编辑 ]
4 回复
#2
有容就大2012-09-28 01:22
inc zifu     ;将数据的偏移地址增加1
这个不是增加偏移地址 而是使zifu内存单元的值增加1


[ 本帖最后由 有容就大 于 2012-9-28 10:37 编辑 ]
#3
有容就大2012-09-28 01:34
试试这个
程序代码:
date segment
     zifu db 100 dup(?),'$'
date ends

codesg segment
assume cs:codesg,ds:date
  start:mov ax,date
        mov ds,ax
        lea si, zifu
   node:
        mov ah,1    ;DOS 键盘1号功能调用   作用从键盘输入1个字符并显示  检查ctrl-break键,入口参数无,出口AL=字符
        int 21h
        mov [si],al  ;将输入字符 放到存储器的数据区
        inc si    ;将数据的偏移地址增加1
        cmp al,32    ;比较输入字符是否为空格键  空格ASCII=32
        jnz node      ;不是空格键 程序跳转到NODE处  形成循环
        lea dx,zifu   ;lea 地址装载指令
        mov ah,9     ; DOS 9号功能  显示字符串  入口参数为 ds:dx
        int 21h
        mov ah,4ch
        int 21h
codesg ends
end start

#4
有容就大2012-09-28 01:42
回复 楼主 zhu224039
mov zifu, al
inc zifu
al存进zifu处的首内存单元后 这个内存单元加1 然后循环直到输入的字符是空格,其实偏移地址并没变,程序一直在改变zifu的第一个字符 我们看到的结果是中断回显 和 输入字符+1 存入zifu首单元的显示。
所以输入‘abc空格’后看到的结果就是 ‘abc空格!’(‘空格’+ 1 = ‘!’)


[ 本帖最后由 有容就大 于 2012-9-28 11:10 编辑 ]
#5
有容就大2012-09-28 10:57
如果你把输入结束标志变一下 比如 换做小字母a(97)那么程序显示结果最后会是b 其实b就是zifu首内存单元的存放内容,后面有99个空格呢。
1