鱼C论坛

 找回密码
 立即注册
查看: 2709|回复: 5

新手求教 来帮帮我吧 真心的哦~~

[复制链接]
发表于 2011-10-22 17:12:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 鱼c丶威武 于 2011-10-22 17:13 编辑

                Z=(5X+8Y)/2 X,Y是无符号数,Z是字变量的程序如下


DATA SEGMENT
     X DB 26H                   (这句什么意思啊?为什么是26H呢?  )
     Y DB 54H                   (这句什么意思啊?为什么是54H呢?  )
     Z DB ?
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DS,AX
       MOV AX,0000H
       MOV AL,X
       MOV BX,AX
       SHL AX,1
       SHL AX,1
       ADD BX,AX
       MOV AL,Y
       SHL AX,1
       SHL AX,1
       SHL AX,1
       ADD AX,BX
       SHR AX,1
       MOV 2,AX
       MOV AH,4CH
       INT 21H
CODE ENDS
END START


  程序是小弟一个个打上去的  好辛苦的 求高手指点啊!!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-22 20:31:37 | 显示全部楼层
DATA SEGMENT
     X DB 26H        ;           (这句什么意思啊?为什么是26H呢?  )--------这里的26H只是举例
     Y DB 54H                   (这句什么意思啊?为什么是54H呢?  )--------同上
     Z DB ?          ;X-Y作为变量,求Z并保存在这个内存单元里
DATA ENDS
CODE SEGMENT
     ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA
       MOV DS,AX
       MOV AX,0000H
       MOV AL,X    ;AL=x,即AX=x
       MOV BX,AX   ;BX=x
       SHL AX,1    ;new_AX=AX*2=2x
       SHL AX,1    ;new_AX=AX*2=4x
       ADD BX,AX   ;new_BX=BX+AX=5x
       MOV AL,Y    ;AL=y,即AX=y       SHL AX,1    ;new_AX=AX*2=2y
       SHL AX,1    ;new_AX=AX*2=4y
       SHL AX,1    ;new_AX=AX*2=8y
       ADD AX,BX    ;new_AX=AX+BX=5x+8y
       SHR AX,1     ;右移即除以2,new_AX=ax/2=(5x+8y)/2
       MOV 2,AX     ;这里可以这样写?我不确定。但可以知道本句代码的意思是将结果存入ds:[2]这个单元,即预设的Z单元
       MOV AH,4CH
       INT 21H
CODE ENDS
END START


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-22 20:43:57 | 显示全部楼层
补充一下,你这个代码思路上没有问题,但细节上其实是有问题的;在求取“4x"的时候,因为是AX寄存器整体移动,所以AH的值可能会被影响;这样在进行求取8y值的开始那句”mov AL,Y"的时候,不能保证AX整体就等于Y,因为AL=y而AH由于前述的移位影响有可能不为0。
另外,这里在数据段的预设时候也用到了“数据标号”——X/Y/Z,这对我们新手也是需要注意留意的地方。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-22 22:07:10 | 显示全部楼层

非常感谢你 大侠   可以 54h 是举例  为什么要举例啊?  可以随便举例嘛? 比如我把54h 改成52h   29h呢?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-10-22 22:14:24 | 显示全部楼层
本帖最后由 tsembrace 于 2011-10-22 22:15 编辑
鱼c丶威武 发表于 2011-10-22 22:07
非常感谢你 大侠   可以 54h 是举例  为什么要举例啊?  可以随便举例嘛? 比如我把54h 改成52h   29h呢? ...

对你在一楼提到的程序代码而言,它只能实现预先赋值的X-Y的函数计算,必须先设置X-Y变量的值才行。你这里当然可以举例其他数值,只需要注意下我在3#里提到的移位影响了AH值这个问题。当然,这个问题也很好解决,只要给AH重新置0就可以。
  1. MOV AH,0   ;将AH重新置0避免前面的移位影响
  2. ADD BX,AX
  3. MOV AL,Y
  4. SHL AX,1
复制代码

奇怪,我的头像修改了怎么还是老的?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-10-22 22:18:25 | 显示全部楼层
tsembrace 发表于 2011-10-22 22:14
对你在一楼提到的程序代码而言,它只能实现预先赋值的X-Y的函数计算,必须先设置X-Y变量的值才行。你这 ...

大师  有QQ嘛  加小弟吧  方便以后请教你啊{:7_169:}  
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-6 23:08

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表