| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 950 人关注过本帖
标题:求助:一道汇编题,希望各位前辈指教!
只看楼主 加入收藏
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
收藏
 问题点数:0 回复次数:9 
求助:一道汇编题,希望各位前辈指教!


可实现10位十进制数加减混合运算的计算器
1. 本程序可实现10位十进制数的加减混合运算,例如:输入“1245678952+565452378-665442356-566542+235-55321”,则结果为1145067346
2. 如果输入的算式中含有“=”,则程序将“=”及等号后的字符删除,不参加运算。
3. 如果字符串中含有除了字符0-9,‘-’‘=’‘+’,之外,含有其他字符,则程序认为,含有非法字符,提示“Illegal character!”。
4. 如果在输入算式时,不小心输入了空格,程序自动删除空格,例如:输入:“12 35+665 325- 5554+5 56=455 788+55”,程序认为,你想要计算的算式为“1235+66525-5554+556”。
5. 当计算完成后,如果想继续,请按‘y’,‘Y’,否则,请按任意键,程序默认为继续。

搜索更多相关主题的帖子: 汇编 计算器 前辈 字符 算式 
2007-04-30 11:32
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
第一的一个不好做 数太大拉
后面的还好点 现在没时间拉 我要回家 呵呵
过两天在来

   好好活着,因为我们会死很久!!!
2007-04-30 13:16
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
收藏
得分:0 

谢谢斑竹来指教.等待.............

2007-04-30 18:50
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

上学期写了个10位数相乘的,也许对楼主有帮助

.model small
.386
data segment
buff1 db 10 dup(0) ;存放第一个数
buff2 db 10 dup(0) ;存放第二个数
len db 0ah ;操作数10
k word 0 ;结果数组中的下标
ones db 0 ;个位数
tens db 0 ;十位数
hint1 db 0ah,0dh,0ah,0dh,'Please input the first number(10 bits):','$'
hint2 db 0ah,0dh,0ah,0dh,'Please input the second number(10 bits):','$'
hint3 db 0ah,0dh,0ah,0dh,'The result is:','$'
data ends

extra segment
db 20 dup(0) ;存放结果
extra ends

code segment use16
assume cs:code,ds:data,es:extra
start:
mov ax,data
mov ds,ax
mov ax,extra
mov es,ax

mov dx,offset hint1 ;输出提示信息
mov ah,09h
int 21h

xor si,si
readnum1: ;读入十个数
xor al,al
mov ah,01h
int 21h
sub al,30h
mov buff1[si],al ;存放在buff1中
inc si
cmp si,09h
jbe readnum1 ;未满十个,继续读入

mov dx,offset hint2 ;输出提示信息
mov ah,09h
int 21h

xor si,si
readnum2: ;读入十个数
xor al,al
mov ah,01h
int 21h
sub al,30h
mov buff2[si],al ;存放在buff2中
inc si
cmp si,09h
jbe readnum2 ;未满十个,继续读入

xor cx,cx
xor bx,bx
xor ax,ax
xor dx,dx

mov si,0ah ;外循环
next1:
mov di,0ah ;内循环
next2:
mov al,buff1[si-1]
mov bl,buff2[di-1]
mul bl
div len
mov tens,al ;取商
mov ones,ah ;取余
mov k,0
add k,si
add k,di ;k=di+si
mov bp,k
mov ah,ones
add es:[bp],ah ;放入个位

cmp byte ptr es:[bp],0ah
jnge here1 ;小于10则跳到here1

xor ax,ax
mov al,es:[bp]
div len
mov es:[bp],ah
add byte ptr es:[bp-1],01h

here1:
mov al,tens
add es:[bp-1],al

;这段可以不要,因为进位最多不超过1位(9*9=81)
;cmp byte ptr es:[bp-1],0ah
;jnge here2 ;小于10则跳到here2

;xor ax,ax
;mov al,es:[bp-1]
;div len
;mov byte ptr es:[bp-1],00h
;mov es:[bp-1],ah
;add byte ptr es:[bp-2],01h

here2:
dec di
cmp di,0
ja next2 ;内循环
dec si
cmp si,0
ja next1 ;外循环

mov dx,offset hint3 ;输出提示信息
mov ah,09h
int 21h

xor si,si
mov si,01h ;0单元没用
print: ;输出结果
xor dl,dl
mov dl,es:[si]
add dl,30h
mov ah,02h
int 21h
inc si
cmp si,20
jbe print
exit:
mov ax,4c00h
int 21h
code ends
end start


2007-04-30 20:10
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
第一题我看拉上面兄弟的 我就想到组成原理 可以实现
我就不多说拉
第2.3题好像都差不多 都是用比较 后转移 只是转移后做什么事情就不一样拉
2是转移后去删除后面的 你就用
lop1:
inc bx
cmp buf[bx],'='
jz exit 相等就转移
jmp lop1 不等就继续比较
.....
exit:
mov buf[bx],0
inc bx
cmp buf[bx],'$' 看字符串完拉没有
jmp exit


   好好活着,因为我们会死很久!!!
2007-05-04 08:22
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

第三就是
lop2: inc bx
cmp buf[bx],'$'
jmp lop3 说明没有其他的 跳出
cmp buf[bx],'0'
jz lop1
cmp buf[bx],'9'
ja lop1
jmp lop2 则这个数是数字
lop1:cmp buf[bx],'+'
jz lop2
cmp buf[bx],'-'
jz lop2
cmp buf[bx],'='
jz lop2 比较完拉 如果都不是就输出Illegal character
exit mov dx,串地址
mov ah,9
int 21h

lop3: ......


   好好活着,因为我们会死很久!!!
2007-05-04 08:35
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 

第四的一个
输入空格 就删除
这个还是比较 后转移 好像都差不多 呵呵
lop1: mov ah,1
int 21h
cmp al,' ' 判断是不是空格
jz lop1
mov buf[bx],al
inc bx
jmp lop2
这样就没装空格拉


   好好活着,因为我们会死很久!!!
2007-05-04 08:41
爱以走远
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:52
帖 子:7542
专家分:21
注 册:2007-3-16
收藏
得分:0 
最后一个还是差不多
就是在最后加一个输入
在比较 如果等于y 就转移到前面 在来一回
如果等于n 就直接出来就是拉
我就不写拉哈 呵呵

   好好活着,因为我们会死很久!!!
2007-05-04 08:43
tdl2000
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-4-30
收藏
得分:0 
自己在去研究一下,谢谢哦!
2007-05-07 23:30
曾小
Rank: 1
等 级:新手上路
威 望:1
帖 子:239
专家分:0
注 册:2006-9-27
收藏
得分:0 
论坛里应该有类似的题目,自己去找找!其实有写很简单的!

2007-05-08 20:33
快速回复:求助:一道汇编题,希望各位前辈指教!
数据加载中...
 
   



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

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