+ -
当前位置:首页 → 问答吧 → 一个简单的汇编题目,请帮我看看哪里需要改进

一个简单的汇编题目,请帮我看看哪里需要改进

时间:2011-03-21

来源:互联网

上机题目:两个八位数的相加运算  
内容: DAT开始的单元中存放两个八位二进制 数,两个数相加后结果存入SUM单元中。 ( SUM为十六位 )
  DAT DB X1,X2
  SUM DW ?
-----------------------------------------
我的代码(可以运行,但是我不知道对不对)


STACK SEGMENT STACK
STA DW 20H DUP(0)
STACK ENDS
DAT SEGMENT
X1 DB 10H //自己设置的值
X2 DB 01H
SUM DW ?
DAT ENDS
CODE SEGMENT
  ASSUME CS:CODE,DS:DAT,SS:STACK
START:
  MOV AX,DAT
  MOV DS,AX
  MOV AL,X1
  ADD SUM,AX
  MOV BL,X2
  ADD SUM,BX 
  MOV AH,4CH
INT 21H
CODE ENDS
END START

作者: verona   发布时间: 2011-03-21

Assembly code

mov al,x1
add al,x2
adc ah,0
mov sum,ax

作者: masmaster   发布时间: 2011-03-21

debug跟踪下不就知道对错了?

作者: angel_kong   发布时间: 2011-03-21

不对。
MOV AL,X1
ADD SUM,AX ;问题1在这里
MOV BL,X2
ADD SUM,BX ;问题2在这里

问题1:ah没初始化,不能保证ah=0;同时sum未初始化,也不能保证sum=0. 所以把ax加到sum中的结果不一定从数值上有“sum = x1”.

问题2:与问题1一样,bh的值未知。

1楼的“adc ah,0”时也未初始化ah.

另,楼主在内存变量sum中完成加法的方法不好,最后在寄存器中完成后,再移入内存。这样会节省CPU的运行时间.

在1楼基础上改为:
mov al,x1
mov ah,0
add al,x2
adc ah,0
mov sum,ax

作者: shzhfu   发布时间: 2011-03-21