《2022年用汇编语言做成计算器推荐 .pdf》由会员分享,可在线阅读,更多相关《2022年用汇编语言做成计算器推荐 .pdf(12页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、用汇编语言做成计算器(论文)摘要:用汇编语言做成计算器; 首先从键盘输入合法中缀算术表达式,并将其存储到S1中;然后调用子程序 CHANGE将中缀式转化为后缀式;第三,调用子程序CALCULATE 对后缀表达式进行有符号数的运算,并将最终结果存放在栈中;第四,POP AX,AX-STORAGE ,即用STORAGE 存放最终运算结果将栈中保存的最后运算结果弹出,并保存到STORAGE中;最后,调用子程序OUTPUT将运算结果输出。关键词: 计算器寻址方式汇编程序寄存器数据传送流程图引言:作此课程设计前我用数据结构将中缀表达式转换为后缀表达式,并用后缀表达式计算出表达式结果, 再转化为汇编语言确
2、实遇到些困难:首先遇到的问题是如何判断运算符号的优先级; 其次遇到的问题是如何输出一个负数;再一个就是该如何输入一个负数; 还有就是如何输出两位及两位以上的数据。但一切困难在经过努力思考后都解决了。 编程时应先进行需求分析, 将程序分成几个功能模块,然后将功能一个一个地实现,这是一种比较好也比较快的编程方法。正文:一、计算器的具体功能: 输入一个正数后按回车可以直接输出该正数;输入一个负数后按回车可以直接输出该负数;可以进行有符号数的加运算;可以进行有符号数的减运算;可以进行有符号数的加、减运算;可以进行有符号数的乘运算;可以进行有符号数的除运算;可以进行有符号数的乘、除运算;可以进行有符号数
3、的加、减、乘、除四则运算;支持使用括号改变运算顺序;输入一个数值不是很大的合法的算术表达式并按回车,可以得到正确的结果。二、程序设计中用到的汇编知识点:寄存器寻址方式;变址寻址方式;立即寻址方式;变量的使用; 标号的使用; 数据传送指令 MOV ;加 1 指令 INC;比较指令 CMP;键盘输入( 1 号调用) ;顺序程序设计;简单条件转移指令JNE; 无条件转移指令 JMP; 循环程序设计;进栈指令 PUSH; 出栈指令 POP;地址表达式的使用;类型运算符PTR;简单条件转移指令JE;有符号条件转移指令 JG,JGE,JLE;无条件转移指令JMP;分支程序设计;循环程序设计;子程序调用指令
4、 CALL ;子程序返回指令RET;有符号乘指令 IMUL ;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 12 页 - - - - - - - - - 有符号除指令 IDIV ; 逻辑乘指令 AND ; 求补指令 NEG; 有符号除指令 IDIV ;显示字符串( 9 号调用) ;有符号条件转移指令JGE等。三、程序设计简要流程(二)调用子程序CHANGE 将中缀式转化为后缀式(三)调用子程序CALCULATE对后缀表达式进行有符号数的运算,并将最终结果存放在栈中(四)
5、 POP AX ,AX- STORAGE 即用 STORAGE 存存放最终运算结果(五)调用子程序OUTPUT将运算结果输出结束开始(一)、从键盘输入合法中缀算术表达式并将其存储到S1中以回车符号作为结束符号每个数后放置一格按位从高位到低位一位一位的输出遇到空格则将之前的数据压入栈中,遇到运算符则从栈中弹出两数据进行运算四、源程序代码DATA SEGMENT S1 DB 60 DUP(?),$;存储输入的中缀表达式子S2 DB 60 DUP(?),$;存储后缀表达式子名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理
6、- - - - - - - 第 2 页,共 12 页 - - - - - - - - - N DB 10 DUP(?),$;存储要输出的数字字符串STORAGE DW ?,$;存储运算结果BUF DB PLEASE INPUT EXPRESSION:,0AH,0DH,$ BUF1 DB 0AH,0DH,EXPRESSION ERROR!$ DATA ENDS STACK SEGMENT STACK DB 40 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX L
7、EA DX,BUF; 输出字符串MOV AH,9;BUF, 提示输入表达式INT 21H MOV SI,0 ;输入的第一个数为负数的处理方法MOV AH,1 INT 21H CMP AL,- JNE LL MOV S1SI,0 INC SI LL: MOV S1SI,AL INC SI LLL: MOV AH,1; 循环输入表达式INT 21H MOV S1SI,AL INC SI CMP AL,0DH JNE LLL 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 12
8、 页 - - - - - - - - - MOV DL,0AH MOV AH,2 INT 21H CALL CHANGE; 调用中缀转后缀子程序CALL CALCULATE; 调用计算后缀表达式子程序NEXT : POP AX CMP AX, JE NEXT1 MOV STORAGE,AX CALL OUTPUT; 调用输出运算结果子程序NEXT1: MOV AH,4CH INT 21H ERROR:LEA DX,BUF1; 输出字符串MOV AH,9;BUF1, 提示输入表达错误INT 21H JMP NEXT1 CHANGE PROC NEAR; 中缀表达式转换为MOV AH,0; 后缀表
9、达式的子程序MOV DH,0 MOV SI,0 MOV DI,0 PUSH DI CHA: MOV AL,S1SI INC SI CMP AL,0DH JE L8 CMP AL,( JE L1 CMP AL,+ JE L2 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 12 页 - - - - - - - - - CMP AL,- JE L3 CMP AL,* JE L4 CMP AL,/ JE L5 CMP AL,) JE L6 CMP AL,0 JGE L7 JMP
10、 ERROR L1: PUSH AX;对左括号的处理MOV AX,0 PUSH AX CMP S1SI,- JNE CHA MOV S2DI,0 INC DI MOV S2DI, INC DI L2: MOV BP,SP;对加法的处理MOV DL,BP CMP DL,01H JGE L21 PUSH AX MOV DX,0101H PUSH DX JMP CHA L21: POP DX POP BX 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 12 页 - - - -
11、 - - - - - MOV S2DI,BL INC DI JMP L2 L3: MOV BP,SP;对减法的处理MOV DX,BP CMP DL,01H JGE L31 PUSH AX MOV DX,0201H PUSH DX JMP CHA L31: POP DX POP BX MOV S2DI,BL INC DI JMP L3 L4: MOV BP,SP;对乘法的处理MOV DX,BP CMP DL,02H JGE L41 PUSH AX MOV DX,0302H PUSH DX JMP CHA L41: POP DX POP BX MOV S2DI,BL INC DI JMP L4 名
12、师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 12 页 - - - - - - - - - L5: MOV BP,SP;对除法的处理MOV DX,BP CMP DL,02H JGE L51 PUSH AX MOV DX,0402H PUSH DX JMP CHA L51: POP DX POP BX MOV DS:S2DI,BL INC DI JMP L5 L6: MOV BP,SP;对右括号的处理CMP BYTE PTR BP,0 JNE L61 POP DX POP
13、AX JMP CHA L61: POP DX POP BX MOV S2DI,BL INC DI JMP L6 L7: CMP AL,9;对数字的处理JLE L71 L71: MOV S2DI,AL INC DI CMP BYTE PTR S1SI,0 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 12 页 - - - - - - - - - JGE L72 MOV AL, MOV S2DI,AL INC DI JMP CHA L72: CMP BYTE PTR S1S
14、I,9 JLE L73 L73: MOV AL,SI INC SI JMP L71 L8: MOV BP,SP CMP BYTE PTR BP,0 JG L81 POP AX JMP L9 L81: POP DX POP BX MOV S2DI,BL INC DI JMP L8 L9: MOV S2DI,0DH RET CHANGE ENDP CALCULATE PROC NEAR ; 计算后缀表达式子程序MOV SI,0 MOV DI,0 MOV AH,0 MOV BX, PUSH BX CAL: MOV AL,S2DI 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
15、- - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 12 页 - - - - - - - - - INC DI CMP AL,0DH JE NEXT CMP AL, JE CAL CMP AL,+ JE F1 CMP AL,- JE F2 CMP AL,* JE F3 CMP AL,/ JE F4 CMP AL,0 JGE F5 JMP ERROR F5: CMP AL,9 JLE F51 F51: MOV DL,AL AND DL,0FH MOV BL,10 MOV AL,0 F52 : IMUL BL ADD AL,DL CMP BYTE
16、PTR S2DI, JNE F53 PUSH AX JMP CAL F53:MOV DL,S2DI INC DI 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 12 页 - - - - - - - - - AND DL,0FH JMP F52 F4: POP DX POP AX IDIV DL AND AX,000FH PUSH AX JMP CAL F3: POP DX POP AX IMUL DL PUSH AX JMP CAL F2: POP DX POP AX
17、SUB AX,DX PUSH AX JMP CAL F1: POP AX POP DX ADD AX,DX PUSH AX JMP CAL RET CALCULATE ENDP OUTPUT PROC NEAR;输出运算结果子程序MOV SI,0 MOV AX,STORAGE CMP AX,0 JGE C1 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 10 页,共 12 页 - - - - - - - - - NEG AX MOV NSI,- INC SI C1: CMP AX,
18、10000 JGE C11 CMP AX,1000 JGE C12 CMP AX,100 JGE C2 CMP AX,10 JGE C3 CMP AX,0 JGE C4 C11: MOV DX,0 MOV BX,10000 IDIV BX ADD AL,30H MOV DS:NSI,AL INC SI MOV AX,DX JMP C1 C12:MOV DX,0 MOV BX,1000 IDIV BX ADD AL,30H MOV DS:NSI,AL INC SI MOV AX,DX JMP C1 C2: MOV CL,100 名师资料总结 - - -精品资料欢迎下载 - - - - - - -
19、 - - - - - - - - - - - 名师精心整理 - - - - - - - 第 11 页,共 12 页 - - - - - - - - - IDIV CL ADD AL,30H MOV DS:NSI,AL INC SI MOV AL,AH MOV AH,0 JMP C1 C3: MOV CL,10 IDIV CL ADD AL,30H MOV DS:NSI,AL INC SI MOV AL,AH MOV AH,0 JMP C1 C4: ADD AL,30H MOV NSI,AL INC SI JMP C0 C0:LEA DX,N MOV AH,9 INT 21H RET OUTPUT ENDP CODE ENDS END START 参考文献:1、徐孝凯,数据结构辅导与提高,2003。2 、钱晓捷新版汇编语言程序设计.-北京:电子工业出版社, 2006.12高等学校教材名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 12 页,共 12 页 - - - - - - - - -
限制150内