| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1280 人关注过本帖
标题:汇编语言程序设计的几个题目
只看楼主 加入收藏
a261935348
Rank: 2
等 级:论坛游民
帖 子:35
专家分:12
注 册:2012-5-27
结帖率:80%
收藏
已结贴  问题点数:10 回复次数:22 
汇编语言程序设计的几个题目
P65
第一题,  VAR1 DW 1234H 89 ,255,-2,-0AH          以字为单位 存储
          VAR2 DB 34,78H,44,22,19,-12            以字节为单位
             .
            .
            .
          MOV AH ,23H                            将23H 移动到 AH
          LEA BX,VAR1+4                          LEA近地址写入寄存器,在VAR1+4的地址数(-0AH吗?)移动到BX
          MOV AL,BYTE PTR [BX+1]                 PTR是什么意思不太了解,命令符号多了就搞不清楚了,把BX+1地址下的内容送到AL
          MOV SI,WORD PTR VAR2+3                 VAR2+3的数值22送到SI  
    程序段执行后AX=_____,SI=____  答案 23FFH   1316H  现在的题目感觉更难了!后面的中文为我自己的理解有错误的帮忙指出谢谢!一点都不明白他的答案是怎么出来的!

第二题, BUF DW 1,0,0AB1CH,582H,9,3A04H,9,0

         LEA DI,BUF                  把BUF的第一个地址放入DI
         MOV CX,8                    8放如CX
         MOV AX,9                    9放入AX
         REPNZ SCASW                 不懂这句
         JNZ K1                      结果不为零直接跳转到K1
         SUB DI,OFFSET BUF          OFFSET是偏移量什么DI下的数字减去BUF?                                                                                      
         MOV DX,DI                   DI的数移动到DX
         SUB DI ,OFFSET BUF           DI减去BUF                                             
         MOV DX,DI                 DI移动到DX
         SHR DX,1                算术右移一位
         ADD DL,30H               30H加DL放入DL
         MOV AH,2                 2移动到AH
     INT 21H                       显示
   K1:....
上述程序执行后:(1)程序完成什么功能?(2)显示输出的是什么值?     老样子文字是我自己的理解当中有几句关键的命令不懂所以感觉完全看不懂!

      
搜索更多相关主题的帖子: 单位 寄存器 
2012-05-29 12:41
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
先讨论第一题
 ; 我也刚学 不对的地方请路过的大牛指出来 免得误了人。
VAR1 DW 1234H 89 ,255,-2,-0AH  后 VAR1 连续存储空间的 布局是
下标  内容
0     34H
1     12H
2     59H
3     00H   ;89的字分布是 0059H
4     FFH  
5     00H   ;对应255
6     FEH
7     FFH   ;对应-2
8     F6H
9     FFH   ;对应-0AH

VAR2 DB 34,78H,44,22,19,-12 后 VAR2的内存分布是
22H
78H
2CH
16H
13H
F4H


MOV AH ,23H                            将23H 移动到 AH
LEA BX,VAR1+4                          LEA近地址写入寄存器,在VAR1+4的地址数(-0AH吗?)移动到BX
                                       VAR1 + 4 应该是指向FFH 作为低字节传给BL VAR1+5 = 00H 传给BH
                                       所以 BX = 00FFH
MOV AL,BYTE PTR [BX+1]       这里的BYTE PTR 就是传一个字节给AL的意思 [BX + 1] 刚好指向FFH 因为BX = 00FFH
所以 AH = 23H AL = FFH AX = 23FFH

MOV SI,WORD PTR VAR2+3   
VAR2+3 指向 16H  WORD PTR要求传一个字 所以SI的低位是 VAR2+3 高位是VAR2 + 4 = 13H
所以 SI = 1316H

第2个 还没学好 不敢乱说 同求大牛解答。

梅尚程荀
马谭杨奚







                                                       
2012-05-29 13:32
hellovfp
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:禁止访问
威 望:30
帖 子:2976
专家分:7697
注 册:2009-7-21
收藏
得分:0 
repnz/repne scasw 前缀可以理解为"当数据串没有结束(CX不等零),并且串不相等(zf等于零),则继续比较"

我们都在路上。。。。。
2012-05-29 13:36
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
以下是引用hellovfp在2012-5-29 13:36:22的发言:

repnz/repne scasw 前缀可以理解为"当数据串没有结束(CX不等零),并且串不相等(zf等于零),则继续比较"
大哥你来的太及时了 现在学汇编好费脑子啊
什么时候能比较轻松的看win32汇编啊
以后有什么要多向你请教
我先去做做第2道 看能不能拿下来。

梅尚程荀
马谭杨奚







                                                       
2012-05-29 13:42
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
发现我上面的回答有个矛盾
程序代码:
LEA BX,VAR1+4                          LEA近地址写入寄存器,在VAR1+4的地址数(-0AH吗?)移动到BX
                                       VAR1 + 4 应该是指向FFH 作为低字节传给BL VAR1+5 = 00H 传给BH
                                       所以 BX = 00FFH
MOV AL,BYTE PTR [BX+1]       这里的BYTE PTR 就是传一个字节给AL的意思 [BX + 1] 刚好指向FFH 因为BX = 00FFH
--
如果 BX = 00FFH 那么 [BX + 1] 是不是应该指向高位 00H 因为 BX 的分布是
FFH
00H

那么 VAR1 + 4 指向的是 OOH 还是 FFH?
我也糊涂了。



[ 本帖最后由 有容就大 于 2012-5-29 13:57 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-29 13:55
a261935348
Rank: 2
等 级:论坛游民
帖 子:35
专家分:12
注 册:2012-5-27
收藏
得分:0 
回复 4楼 有容就大
哈哈 第一道看懂了~每次都靠你帮忙哈~
2012-05-29 15:47
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
回复 6楼 a261935348
应该还有点问题 你可以再想想

VAR1 DW 1234H 89 ,255,-2,-0AH  
LEA BX,VAR1+4   

VAR1 是按字来的 那么 VAR1 + 1 是按一个字走还是按一个字节走 如果按字节走推出的就不符合你的答案
按字走的话  LEA BX,VAR1+4 后 VAR1+4指向F6H [BX] = F6H 那么 BYTE PTR [BX + 1] = FFH才对 我现在就想去证实这个。

[ 本帖最后由 有容就大 于 2012-5-29 15:54 编辑 ]

梅尚程荀
马谭杨奚







                                                       
2012-05-29 15:53
a261935348
Rank: 2
等 级:论坛游民
帖 子:35
专家分:12
注 册:2012-5-27
收藏
得分:0 
回复 5楼 有容就大
难道是答案错了么 毕竟练习册也是人做出来的 我感觉你推的听正确的啊!
2012-05-29 16:03
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
我去 证实了下 VAR1 + 1 走的是一个字节 BYTE PTR [BX + 1] = 00H才对
图片附件: 游客没有浏览图片的权限,请 登录注册

梅尚程荀
马谭杨奚







                                                       
2012-05-29 16:04
zklhp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:china
等 级:贵宾
威 望:254
帖 子:11485
专家分:33241
注 册:2007-7-10
收藏
得分:0 
太长看不懂 帮顶了
2012-05-29 16:08
快速回复:汇编语言程序设计的几个题目
数据加载中...
 
   



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

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