鱼c丶威武 发表于 2011-10-22 17:12:09

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

本帖最后由 鱼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


程序是小弟一个个打上去的好辛苦的 求高手指点啊!!!

tsembrace 发表于 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:这个单元,即预设的Z单元
       MOV AH,4CH
       INT 21H
CODE ENDS
END START


tsembrace 发表于 2011-10-22 20:43:57

补充一下,你这个代码思路上没有问题,但细节上其实是有问题的;在求取“4x"的时候,因为是AX寄存器整体移动,所以AH的值可能会被影响;这样在进行求取8y值的开始那句”mov AL,Y"的时候,不能保证AX整体就等于Y,因为AL=y而AH由于前述的移位影响有可能不为0。
另外,这里在数据段的预设时候也用到了“数据标号”——X/Y/Z,这对我们新手也是需要注意留意的地方。

鱼c丶威武 发表于 2011-10-22 22:07:10

tsembrace 发表于 2011-10-22 20:43 static/image/common/back.gif
补充一下,你这个代码思路上没有问题,但细节上其实是有问题的;在求取“4x"的时候,因为是AX寄存器整体移动 ...

非常感谢你 大侠   可以 54h 是举例为什么要举例啊?可以随便举例嘛? 比如我把54h 改成52h   29h呢?

tsembrace 发表于 2011-10-22 22:14:24

本帖最后由 tsembrace 于 2011-10-22 22:15 编辑

鱼c丶威武 发表于 2011-10-22 22:07 static/image/common/back.gif
非常感谢你 大侠   可以 54h 是举例为什么要举例啊?可以随便举例嘛? 比如我把54h 改成52h   29h呢? ...
对你在一楼提到的程序代码而言,它只能实现预先赋值的X-Y的函数计算,必须先设置X-Y变量的值才行。你这里当然可以举例其他数值,只需要注意下我在3#里提到的移位影响了AH值这个问题。当然,这个问题也很好解决,只要给AH重新置0就可以。
MOV AH,0   ;将AH重新置0避免前面的移位影响
ADD BX,AX
MOV AL,Y
SHL AX,1
奇怪,我的头像修改了怎么还是老的?

鱼c丶威武 发表于 2011-10-22 22:18:25

tsembrace 发表于 2011-10-22 22:14 static/image/common/back.gif
对你在一楼提到的程序代码而言,它只能实现预先赋值的X-Y的函数计算,必须先设置X-Y变量的值才行。你这 ...

大师有QQ嘛加小弟吧方便以后请教你啊{:7_169:}
页: [1]
查看完整版本: 新手求教 来帮帮我吧 真心的哦~~