标题:汇编语言的问题请教
只看楼主
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
结帖率:59.52%
已结贴  问题点数:20 回复次数:4 
汇编语言的问题请教
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 编辑 ]
搜索更多相关主题的帖子: start 存储器 
2012-09-28 00:38
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:20 
inc zifu     ;将数据的偏移地址增加1
这个不是增加偏移地址 而是使zifu内存单元的值增加1


[ 本帖最后由 有容就大 于 2012-9-28 10:37 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-09-28 01:22
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
试试这个
程序代码:
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


梅尚程荀
马谭杨奚







                                                       
2012-09-28 01:34
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
回复 楼主 zhu224039
mov zifu, al
inc zifu
al存进zifu处的首内存单元后 这个内存单元加1 然后循环直到输入的字符是空格,其实偏移地址并没变,程序一直在改变zifu的第一个字符 我们看到的结果是中断回显 和 输入字符+1 存入zifu首单元的显示。
所以输入‘abc空格’后看到的结果就是 ‘abc空格!’(‘空格’+ 1 = ‘!’)


[ 本帖最后由 有容就大 于 2012-9-28 11:10 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-09-28 01:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
得分:0 
如果你把输入结束标志变一下 比如 换做小字母a(97)那么程序显示结果最后会是b 其实b就是zifu首内存单元的存放内容,后面有99个空格呢。

梅尚程荀
马谭杨奚







                                                       
2012-09-28 10:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-382237-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.399802 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved