. : : Assembly Language : : .  |  首页  |  我提出的问题  |  我参与的问题  |  我的收藏  |  消息中心   |  游客  登录  | 
刷新 | 提问 | 未解决 | 已解决 | 精华区 | 搜索 |
  《汇编语言》论坛 ->使用BIOS进行键盘输入和磁盘读写
  管理员: assembly   [回复本贴] [收藏本贴] [管理本贴] [关闭窗口]
主题 : :  p306页中的[SI]有什么作用?  [待解决] 回复[ 8次 ]   点击[ 456次 ]  
grc10010010
[帖 主]   [ 发表时间:2011-12-23 16:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:13
注册日期:2011-07-13 08:38
第17章关于字符串输入的程序中有如下代码:
...
charpush: mov bx,top    ;top是标号,其值相当于标号处的偏移地址,这里为什么将这个偏移地址赋给bx?
          mov [si][bx],al    ;[si]似乎可有可无,我运行程序时去掉[si]后的效果与有它是相同的...
                             ;另外这里寻址时默认的段寄存器是ds还是cs,书本288页的例子是cs,
                             ;但如果在开头定义了数据段data,则需要在assume中将标号与某寄存器
                                 ;(如ds)联系,并输入mov ax,data和mov ds,ax,以访问data段,此时的
                                 ;默认段寄存器是ds,不知道我的分析对否...
          inc top    ;此处是将top处的内存单元中数据的值加1,为什么要有这句代码?
          jmp sret 
...
其它子程序中也有类似的问题...

这是我学习中遇到问题最多的一节,期盼解答,感激不尽...
grc10010010
[第1楼]   [ 回复时间:2011-12-23 16:49 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:13
注册日期:2011-07-13 08:38
top标号所在的段在代码段,书本289页的例子中,标号与assuem中关联的段相同,为data段,这与这一节中的例子也是不同的,所以要确定mov [si][bx],al默认的段地址也要看assume中是如何关联的,start时又是如何设置的...
tomato
[第2楼]   [ 回复时间:2011-12-23 23:35 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
mov [si][bx],al这条指令默认的段地址当然是ds,是否关联是跟标号有关系的,如果与ds关联,相关段中标号的段地址会从ds中去取,如果跟es关联,相关段中的标号的段地址会从es中去取。
grc10010010
[第3楼]   [ 回复时间:2011-12-24 09:37 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:13
注册日期:2011-07-13 08:38
现在大部分问题已经弄懂了,还有一个情况是,我在实验时发现[si]和charpop子程序中的如下代码:
mov bx,top
mov al,[si][bx]
对程序的运行结果好像没有什么影响...因为我动手实践过了...
tomato
[第4楼]   [ 回复时间:2011-12-24 13:58 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
回复3楼,这两条指令不是出栈操作吗?
tomato
[第5楼]   [ 回复时间:2011-12-24 13:59 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
模拟出栈操作,将栈顶的数据放到al中。
grc10010010
[第6楼]   [ 回复时间:2011-12-24 15:41 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:13
注册日期:2011-07-13 08:38
是出栈操作,但这2条指令前已经有dec top,实际上相当于栈顶减一个字节,所以后面再调用charshow子程序时并不影响显示字符串,将栈顶中的数据放到al中没有意义。
tomato
[第7楼]   [ 回复时间:2011-12-29 23:25 ]   [引用]   [回复]   [ top ] 
荣誉值:405
信誉值:0
注册日期:2008-01-19 14:51
不要轻易说没意义,它的意义可能你还未看到。
jfztaq
[第8楼]   [ 回复时间:2012-10-16 19:56 ]   [引用]   [回复]   [ top ] 
荣誉值:0
信誉值:0
注册日期:2011-03-20 21:27
si是起始地址
需要登录后才能回帖 -->> 请单击此处登录
    Copyright © 2006-2024   ASMEDU.NET  All Rights Reserved