两道对高手来说很简单的ASM题目,解决者,本人的分数愿意全部奉送-235分!!算话!

brain_wiser 2001-06-25 10:06:00
本人有两道汇编题目:
1。四则运算问题:从键盘输入一个十进制的两位数的四则运算表达式,如:x=23*56-23*24-32。编程计算表达式的值,输出十进制结果。
要求:1。表达式可以没有括号 2。可以没有除好 3。循环运行
2。彩色图形显示:例如:可以把ctrl键设为一个行使键,按住此键再运用箭头键画图,显红色,以此类推,设几个这样的行使键。

这两个题目要求运用模块化设计。能提供思路算法者给分40,能给出源程序者,给本人的分数的60%,不少哦!
...全文
163 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
apeman 2001-07-11
  • 打赏
  • 举报
回复
兄弟,不好意思,你发的邮件我已看到,实在没时间了。分我不要了。
我最近发布新软件,到我主页来看吧.
http://IntoDNA.topcities.com
brain_wiser 2001-07-05
  • 打赏
  • 举报
回复
对谢大家大家的广泛参与,特别感谢Leemaasn(Pony) 

我的oicq是25632268
请道同者联系,。。。。
Leemaasn 2001-07-01
  • 打赏
  • 举报
回复
学校放假。没时间上网,忙吧了
第一道题仅供参考:
;程序说明:
;四则运算问题:从键盘输入一个十进制的两位数(每个参与运算的数必须是两位的,不能是一位的)的四则
;运算表达式,如:23*56-23*24-32(运算没有优先级别,按照从左到右的顺序进行计算)(不能处理括号,
;不能处理除号和其他符号)。
;十进制显示答案。
Code0 Segment
Assume CS:Code0,DS:Code0,SS:Code0
Main Proc Far
Start:
Mov AX,Code0
Mov DS,AX
Mov SS,AX
Jmp Begin
strExpr DB 'Please input a string:'
CrLf DB 13,10,24H
X DW 0 ;保存结果的内存单元.
Buffer DB 255,?,255 Dup (0) ;表达式缓冲区.
Begin:
Lea DX,strExpr
Mov AH,9
Int 21H ;提示
Lea DX,Buffer
Mov AH,10
Int 21H ;等待输入.
Mov BX,DX ;得到字符串的地址.
Add BX,2
Push BX ;保存地址.
Mov AX,' +'
Push AX ;送预操作符
Loop0:
Push [BX] ;送参与运算的数.
Call Oper ;完成一次两个数的运算
Pop BX
Add BX,2
Cmp Byte Ptr [BX],0DH ;判断表达式是否结束?
Jz Exit0
Inc BX
Push BX
Mov AX,[BX-1]
Mov AH,' '
Push AX ;得到下一个运算符
Jmp Loop0
Exit0:
Push X
Call HexToDec
Mov AH,2
Mov DL,10
Int 21H
Mov DL,'='
Int 21H ;显示“=”号
Pop BX
Mov DL,BH
And DL,0F0H
Mov CL,4
Shr DL,CL
Or DL,30H
Int 21H ;显示千位
Mov DL,BH
And DL,0FH
Or DL,30H
Int 21H ;显示百位
Mov DL,BL
Mov CL,4
Shr DL,CL
Or DL,30H
Int 21H ;显示十位
Mov DL,BL
And DL,0FH
Or DL,30H
Int 21H ;显示个位
Mov X,0 ;赋初始值0
Jmp Begin
Mov AH,4CH
Int 21H
Main EndP

Oper Proc Near
Mov BP,SP
Add BP,2
Mov BX,[BP] ;参与运算的数
Push BX
Call Modify ;得到参与运算的16进制的数
Pop BX
Mov AX,X
Cmp [BP+2],' +' ;选择分支“加、减、乘”
Jz AddOper
Cmp [BP+2],' -'
Jz SubOper
Mul BL ;乘运算
Return:
Mov X,AX ;保存结果
Ret 4
AddOper:
Add AX,BX ;加运算
Jmp Return
SubOper:
Sub AX,BX ;减运算
Jmp Return
Oper EndP

Modify Proc Near
Pop BX
Pop AX
Push BX
Mov CL,4
Shl AL,CL ;AH的低4位移到高4位
And AH,0FH
Add AH,AL
Mov BL,AH
Mov BH,0
Push BX
Call DecToHex
Pop AX ;转换后的16进制的数
Pop BX
Push AX
Push BX ;压入sp
Ret
Modify EndP
;十进制转换成十六进制!
DecToHex Proc Near
Pop BX ;保存sp!
Pop AX ;要转换的数!
Xor CX,CX
Dec0:
Cmp AX,10
Jb Dec1
Sub AX,10H
Add CX,10
Jmp Dec0
Dec1:
Add CX,AX
Mov AX,CX ;转换结束!
Push AX ;保存结果
Push BX ;压入sp
Ret
DecToHex EndP
;16进制转换成10进制
HexToDec Proc Near
Pop BX
Pop AX ;要转换的16进制数.
Push BX ;保存sp
Xor BX,BX
Hex0:
Cmp AX,0AH
Jb Hex1 ;已经比10小了,不用再减了!
Sub AX,0AH
Add BX,10H
Cmp BL,0A0H
Jb Hex0
Add BX,100H
Xor BL,BL
Mov CL,BH
And CL,0FH
Cmp CL,0AH
Jb Hex0
Add BH,010H
And BH,0F0H
Jmp Hex0
Hex1:
Add BX,AX ;转换到此结束!
Pop AX
Push BX ;保存结果.
Push AX
Ret
HexToDec EndP
Code0 EndS
End Start
蚊子王 2001-07-01
  • 打赏
  • 举报
回复
第一个程序我编过,但必须在我自己的编译环境(我写的未来汇编)下才行
brain_wiser 2001-07-01
  • 打赏
  • 举报
回复
谢谢Leemaasn(Pony) :分数已经给你。以后请多多指教!
也谢谢apeman(网络猩猩) :我看过你的结果后在看是否给份,总之,先谢谢你。邮件我已发给你。

apeman 2001-06-28
  • 打赏
  • 举报
回复
把你的要求写好,发邮件给 我,好久没玩汇编了,手有点庠了,编一个无所谓
mystudio@cmmail.com
Leemaasn 2001-06-28
  • 打赏
  • 举报
回复
可能你的要求 我没注意,你按ctrl+方向键可以移动方块。
程序运行时,最好切换到全屏幕状态。效果会好点。
这是第2题的。。
第1题的,一个子程序没找到,找到了,补上去旧好了。
Code0 Segment
Assume CS:Code0
X DB 0 ;光标的位置
Y DB 0
Begin:
Mov AH,10H
Int 16H ;等待按键
Cmp AX,73E0H
Jz GoLeft
Cmp AX,8DE0H
Jz GoUp
Cmp AX,74E0H
Jz GoRight
Cmp AX,91E0H
Jnz Begin
Inc Y
Go0:
Mov DH,Y
Mov DL,X
Mov AH,2
Mov BH,0
Int 10H ;设置光标的位置
Mov BH,0
Mov AL,0FEH ;方块的ascii码
Mov AH,9
Mov BL,4 ;方块的颜色=红色
Mov CX,1
Int 10H ;写方块
Jmp Begin
GoLeft:
Dec X
Jmp Go0
GoUp:
Dec Y
Jmp Go0
GoRight:
Inc X
Jmp Go0
Code0 EndS
End Begin
》》》》》》》》》》》》》》》》》》》》》》》》
第1题:
Code0 Segment
Assume CS:Code0,DS:Code0,SS:Code0
Main Proc Far
Start:
Mov AX,Code0
Mov DS,AX
Mov SS,AX
Jmp Begin
X DW 0
Buffer DB 255,?,255 Dup (0)
Begin:
Lea DX,Buffer
Mov AH,10
Int 21H
Mov BX,DX
Add BX,2
Push BX
Mov AX,' +'
Push AX
Loop0:
Push [BX]
Call Oper
Pop BX
Add BX,2
Cmp Byte Ptr [BX],0DH
Jz Exit0
Inc BX
Push BX
Mov AX,[BX-1]
Mov AH,' '
Push AX
Jmp Loop0
Exit0:
Pop AX
Mov AH,4CH
Int 21H
Main EndP

Oper Proc Near
Mov BP,SP
Add BP,2
Mov BX,[BP] ;参与运算的数
Push BX
Call Modify ;得到参与运算的16进制的数
Mov AX,X
Cmp [BP+2],' +'
Jz AddOper
Cmp [BP+2],' -'
Jz SubOper
Mul BL ;乘运算
Return:
Mov X,AX ;保存结果
Ret 4
AddOper:
Add AX,BX ;加运算
Jmp Return
SubOper:
Sub AX,BX ;减运算
Jmp Return
Oper EndP

Modify Proc Near
Pop BX
Pop AX
Push BX
Mov CL,4
Shl AL,CL ;AH的低4位移到高4位
And AH,0FH ;
Add AH,AL
Mov BL,AH
Mov BH,0
Ret
Modify EndP
Code0 EndS
End Start
brain_wiser 2001-06-28
  • 打赏
  • 举报
回复
谢谢大家的光顾!
不过肯请大家能不能说一些实际的东西。本人实际上对汇编一点兴趣也没,不过位老师所逼!
想必大家也有同感!
在所本人也不会全靠大家的程序,不过借鉴一下。肯请大家多位本人提些建议,以后,有实际意义的建议,本人一定给分!
*****我想本人的份不会少吧!!*****
本人的承诺也一定实现!请大家多发表建议!
谢谢!

To:plato(天天) 
用c编译过程中连接库文件,编译出的ASM不能再用此功能,ASM不能运行。我想很大一部分原因就在于c编译连结过程。
plato 2001-06-27
  • 打赏
  • 举报
回复
用C写,编译成asm行吗?
jfzsl 2001-06-27
  • 打赏
  • 举报
回复
考试题?自己做!
chenm001 2001-06-27
  • 打赏
  • 举报
回复
表达式的计算请参考《编译原理》
veijerd 2001-06-27
  • 打赏
  • 举报
回复
要求用模块的
至少2个
还需要link程序
嘿嘿
pgcat 2001-06-26
  • 打赏
  • 举报
回复
考试的时候能来问旧号了
veijerd 2001-06-26
  • 打赏
  • 举报
回复
老兄
你是几班的?
居然也到这里来问?
哈哈
看在我们是同学的份上,帮我把2号问题也问了吧。
:-)
apeman 2001-06-26
  • 打赏
  • 举报
回复
用汇编编程的话有点太长,要全部给我分,我愿编一个.
老土豆T 2001-06-25
  • 打赏
  • 举报
回复
好玩。我也来把帖子,给我一个机会吧。
Leemaasn 2001-06-25
  • 打赏
  • 举报
回复
哈哈,好主意!
要是我考完试,还没人帖,我就来看看,
留个位置给我。。。

21,459

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧