一个简单的汇编题目,请帮我看看哪里需要改进
时间: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
内容: 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
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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28