注册 登录
编程论坛 汇编论坛

算术指令

haiyungood 发布于 2009-11-12 19:37, 903 次点击
帮忙看看是哪里错了,只是运行的时候没有结果:原式子为:f=(x+(x*y)+z+1234)/x    谢谢了,
D_SEG SEGMENT
X DW 2420
Y DW 198
Z DW 342
f dw ?
NUM DW 2 DUP(?)
D_SEG ENDS

C_SEG SEGMENT
ASSUME CS:C_SEG,DS:D_SEG
START:MOV Ax,D_SEG
      MOV Ds,Ax
      MOV Ax,X
      IMUL Y
      MOV Cx,Dx
      MOV Bx,Ax
      MOV Ax,Z
      MOV Dx,0
      ADD Bx,Ax
      ADC Cx,Dx
      ADD Bx,1234
      ADC Cx,0
      MOV Ax,X
      ADD Ax,Bx
      ADC Dx,Cx
      IDIV X
      MOV NUM,Ax
      MOV [f+2],Dx     
      MOV AH,4CH
      INT 21H
      C_SEG ENDS
  END START
6 回复
#2
simon02272009-11-12 20:18
没有结果什么意思?
没有中断输出,应该没有显示吧。
具体程序对不对单步调试看寄存器内容变化。
#3
haiyungood2009-11-12 20:34
最后生成exe文件后,运行结果里面什么也没有,是空的。
我没有学过汇编,只是在学计算机组成原理的时候,老师讲了一点汇编的知识,就留了一个题就下来自己写了,我写了那个,但是不知道是哪里错了,
#4
simon02272009-11-12 22:44
我把程序改了改
令x = 2, y = 3,z = 4
运算结果为:623 = 026FH
这样结果中AX = 026FH,DX = 0000H,其中AX是商,DX是余数。
其实你的本身程序是对的,只是没有调用dos系统功能导致没有输出。
具体命令可以网上查查。我红色代码是调用命令。

在说明一下,我这里只是一个示例,输出结果是'o'。目前我会的也只有字符串输出,所以我输出的一个字符时以AL中的值为ascii码的,
如此时AL = 6FH,正是o的ascii码值。具体要输出十进制需要写根据二进制转化成相应十进制的ascii码的子过程。这里我不写了,应为觉得有点麻烦。
在强调一下你不能输出的原因应该是没有红色代码!


;f=(x+(x*y)+z+1234)/x

D_SEG SEGMENT
X DW 2
Y DW 3
Z DW 4
f dw ?
NUM DW ?
D_SEG ENDS

C_SEG SEGMENT
ASSUME CS:C_SEG,DS:D_SEG
START:MOV Ax,D_SEG
      MOV Ds,Ax
      
      MOV Ax,X
      IMUL Y
      
      MOV Cx,Dx
      MOV Bx,Ax
      MOV Ax,Z
      MOV Dx,0
      ADD Bx,Ax
      ADC Cx,Dx
      ADD Bx,1234
      ADC Cx,0
      MOV Ax,X
      ADD Ax,Bx
      ADC Dx,Cx
      IDIV X
      MOV NUM,Ax                     
      MOV f,Dx  
      
      MOV Dx,NUM
      MOV AH,02H
      INT 21H     
      
      MOV AH,4CH
      INT 21H
      C_SEG ENDS
  END START
#5
machill2009-11-14 23:23
好像code没错
#6
myang2009-11-15 16:28
回复 4楼 simon0227
你要显示的字符应放在dl里
#7
haiyungood2009-11-15 17:52
谢谢各位了……
1