标题:我的程序有问题,麻烦大家指导一下!谢谢!
只看楼主
乖乖宝贝儿
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-12-22
得分:0 

一位的我知道,减去30H就行了,可是2位究竟怎么做呢?????????????????


2006-12-22 19:37
24tian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-12-17
得分:0 

二位就 十位的*10+个位啊

2006-12-22 19:41
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
姑且认为输入的是一个字节的数,且默认作10进制
DSEG SEGMENT
TABLE DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
X DB ?
RESULT DB 1 ;先假设存在
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:DSEG
MAIN: MOV AX,DSEG
MOV DS,AX
MOV ES,AX
MOV CX,20
LEA DI,TABLE
MOV AH,1
INT 21H
MOV BH,AL
INT 21H
MOV BL,AL
AND BX,0F0FH ;这里对输入的10进制数进行转换
MOV AX,BX
AAD ;非BCD码调整,转换成实际数值
CLD
REPNZ SCASB ;串扫描都知道了吧
JZ FOUND
MOV RESULT,-1 ;找不到的话就给RESULT赋值-1
FOUND: MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN

我是金子,我要闪光的
2006-12-22 19:50
24tian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-12-17
得分:0 

楼上的大哥:你的这中2位的方法很好,受教了,但更多位的数值呢
如1234:
1
1*10
1*10+2
(1*10+2)*10+3
((1*10+2)*10+3)*10+4
另一种:
4*10
3*10*10
2*10*10*10
1*10*10*10*10
你还有更好的方法吗?

2006-12-22 20:09
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
[QUOTE] 如1234:
1
1*10
1*10+2
(1*10+2)*10+3
((1*10+2)*10+3)*10+4
另一种:(这里应该是12340吧)
4*10
3*10*10
2*10*10*10
1*10*10*10*10
[/QUOTE]
上述两种方法不错,尤其是第一种,比较直接就能求得;
当然我是一个追求效率的人,如果换作我的话,我会对位数先进行比较,再进行折半比较(比较原始)出数来吧,因为乘除法对我来说,我会尽量避开

我是金子,我要闪光的
2006-12-22 20:26
lefttime
Rank: 1
等 级:新手上路
帖 子:162
专家分:0
注 册:2006-10-6
得分:0 
还有个好方法,当然纯属个人认为啦
我觉得你在程序中建个宏,通过移位运算用于乘10运算比较好
例如可以这样:
MUL_10 MACRO NUM ;这里的参数来源于输入的数
MOV AX,NUM
MOV BX,AX
MOV CL,3
SHL BX,CL
DEC CL
SHL AX,CL
ADD AX,BX
ENDM

我是金子,我要闪光的
2006-12-22 20:31
24tian
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2006-12-17
得分:0 
知道了,谢谢了
2006-12-22 20:49
乖乖宝贝儿
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-12-22
得分:0 
以下是引用lefttime在2006-12-22 19:50:45的发言:
姑且认为输入的是一个字节的数,且默认作10进制
DSEG SEGMENT
TABLE DB 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20
X DB ?
RESULT DB 1 ;先假设存在
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG,ES:DSEG
MAIN: MOV AX,DSEG
MOV DS,AX
MOV ES,AX
MOV CX,20
LEA DI,TABLE
MOV AH,1
INT 21H
MOV BH,AL
INT 21H
MOV BL,AL
AND BX,0F0FH ;这里对输入的10进制数进行转换
MOV AX,BX
AAD ;非BCD码调整,转换成实际数值
CLD
REPNZ SCASB ;串扫描都知道了吧
JZ FOUND
MOV RESULT,-1 ;找不到的话就给RESULT赋值-1
FOUND: MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN

谢谢了!!!!多亏了帮忙啊!


2006-12-25 13:37
乖乖宝贝儿
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2006-12-22
得分:0 
看来小妹还是要多多努力学习呀!!!


谢谢你们了!!!!

2006-12-25 13:40
king208401
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-12-28
得分:0 

谁能帮我解决一下这几个汇编的题目1.(12分)已知某数据段的定义如下,画出变量在内存中的存储情况
DSEG SEGMENT
X1 DB 0,’1’,-1,31H
X2 DW 10,’ABCD’
X3 DW X2
DSEG ENDS

2.(10分)假如在程序的括号中分别填入指令: LOOP L20
试说明程序执行完后AX,BX,CX,DX四个寄存器的内容分别是什么?
CSEG SEGMENT
ASSUME CS:CSEG
BEGIN: MOV AX,01H
MOV BX,02H
MOV DX,0AH
MOV CX,03H
L20: INC AX
ADD BX,AX
SHR DX,1
( )
MOV AH,4CH
INT 21H
CSEG ENDS
END BEGIN
3.(10分)根据给定功能,填写方框中的指令。

1 X>1

以下程序实现Y= X -1≤X≤1

-1 x<-1
DATA SEGMENT
X DB ?
Y DB ?
DATA ENDS
STACK SEGMENT STACK
DB 100 DUP(0)
STACK ENDS
CODE SEGMENT
ASSUME CS:CODE,DS:DATA,SS:STACK
START: MOV AX,DATA

MOV AL,X


JG NEXT1
CMP AL,-1


MOV Y,AL


NEXT1: MOV Y,1
JMP EXIT
NEXT2: MOV Y,-1
EXIT: MOV AH,4CH
INT 21H
CODE ENDS
END START
4.(10分)用非压缩BCD码,实现23+15的运算。试编写程序。


2006-12-28 10:56



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-111337-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.307602 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved