专栏首页图灵技术域使用汇编语言编写的计算器

使用汇编语言编写的计算器

计算器实现简单的加减乘除运算(小于65536的正数)

①从键盘输入算数的等式

②不接受复合算数如3+5*7

③按‘=’号输出结果

④按‘C’号作为CLEAR清零

程序分为输入模块,判断模块,计算模块,输出模块。

其他:增加了一些特性

①能够得出两个正数相减得到的负数

②能够计算除法中的余数

③比较美观

代码过长由于增加了一些特性

Assembly (x86)

DATA SEGMENT
divisors DW 10000, 1000, 100, 10, 1
results DB 0,0,0,0,0,"$" ;存放五位数ASCII码
data ends
 
STACK SEGMENT
STACK ENDS
 
CODE SEGMENT
ASSUME CS:CODE
MAIN PROC FAR
MOV AX,DATA
MOV DS,AX
 
NOW:
MOV AX,0
CALL INPUT
 
PUSH BX
;------------------------
CMP AL,'+'
JZ PLUS
CMP AL,'-'
JZ MINUS
CMP AL,'*'
JZ BY
CMP AL,'/'
JZ DIVD
 
PLUS:
CALL INPUT
POP AX
ADD AX,BX
JMP NEXT
 
MINUS:
CALL INPUT
POP AX
CMP AX,BX
JL LESS
SUB AX,BX
JMP NEXT
LESS:
SUB AX,BX
NEG AX
PUSH AX
MOV DL,'-'
MOV AH,02H
INT 21H
POP AX
JMP NEXT
 
BY:
CALL INPUT
POP AX
MUL BX
JMP NEXT
 
DIVD:
CALL INPUT
POP AX
CMP AX,BX
JL LESS2
DIV BX
JMP NEXT
LESS2:
PUSH AX
MOV DL,30H
MOV AH,02H
INT 21H
MOV DL,'~'
MOV AH,02H
INT 21H
POP AX
JMP NEXT
;---------------------------
NEXT:
 
CALL OUTPUT
JMP NOW
MOV AH,4CH
INT 21H
RET
MAIN ENDP
;---------------------
INPUT PROC NEAR
MOV BX,0
NUM:
MOV AH,1
INT 21H
CMP AL,'C'
JZ CLEAR
CMP AL,'+'
JZ EXIT
CMP AL,'-'
JZ EXIT
CMP AL,'*'
JZ EXIT
CMP AL,'/'
JZ EXIT
 
SUB AL,30H
JL EXIT
CMP AL,9
JG EXIT
CBW
XCHG AX,BX
MOV CX,10
MUL CX
XCHG AX,BX
ADD BX,AX
JMP NUM
 
CLEAR:
MOV DL,0DH
MOV AH,2
INT 21H
MOV DL,0AH
MOV AH,2
INT 21H
MOV AX,0
MOV BX,0
JMP NUM
 
EXIT:RET
INPUT ENDP
;----------------------
OUTPUT PROC NEAR
mov si, offset divisors
mov di, offset results 
mov cx,5 
CAL:
mov dx,0 
div word ptr [si]
add al,30H
mov byte ptr [di],al 
inc di 
add si,2 
mov ax,dx 
LOOP CAL
mov cx,4 
mov di, offset results 
NZ:
cmp byte ptr [di],'0' 
jne print
inc di 
loop NZ
print:
mov dx,di 
MOV AH,9
INT 21H
RET
OUTPUT ENDP
;---------------------
CODE ENDS
END MAIN

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 汇编语言 debug masm5.0的使用

    第一步: 从网站上下载MASM5.0到本地盘,然后运行dosbox0.74-win32-installer.exe,此时桌面会有快捷方式 ...

    meihuasheng
  • 汇编语言---计算表达式的值

    编写程序,计算表达式(2*X+Y-65)/Z的值。要求相除之后的商和余数分别存放在A,B单元中(设X,Y,Z和A,B都是16位有符号数,不考虑溢出)

    跋扈洋
  • 8086汇编语言——循环的使用

    zy010101
  • 汇编语言---计算有符号数算式的值

    计算【Z-(X*Y+60)】/4的值,将商送入V单元,余数送入W单元。设X,Y,Z均为16位有符号数据,具体数据由用户自己定义。

    跋扈洋
  • C++嵌入汇编语言计算N的阶乘

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 深入理解计算机系统(3.1)------汇编语言和机器语言

      《深入理解计算机系统》第三章——程序的机器级表示。作者首先讲解了汇编代码和机器代码的关系,阐述了汇编承上启下的作用;接着从机器语言IA32着手,分别讲述了如...

    IT可乐
  • 8086汇编语言——双层循环的使用

    zy010101
  • 计算机基础|你知道汇编语言吗?

    当今互联网发达很多青少年都喜欢打游戏,比如:英雄联盟、绝地求生、穿越火线等游戏十分火热,那么有游戏就肯定有游戏外挂。当然这都不是重点,今天我们不谈写外挂我们重点...

    算法与编程之美
  • C语言编译器为什么能够用C语言编写?

    所谓C语言编译器,就是把编程得到的文件,比如.c,.h的文件,进行读取,并对内容进行分析,按照C语言的规则,将其转换成cpu可以执行的二进制文件。

    诸葛青云
  • C语言编译器为什么能够用C语言编写?

    所谓C语言编译器,就是把编程得到的文件,比如.c,.h的文件,进行读取,并对内容进行分析,按照C语言的规则,将其转换成cpu可以执行的二进制文件。

    诸葛青云
  • C语言编译器为什么能够用C语言编写?

    所谓C语言编译器,就是把编程得到的文件,比如.c,.h的文件,进行读取,并对内容进行分析,按照C语言的规则,将其转换成cpu可以执行的二进制文件。

    7089bAt@PowerLi
  • 使用vs2015编写c语言的方法

    在 VS2015 下开发程序首先要创建项目,不同类型的程序对应不同类型的项目,初学者应该从控制台程序学起。 打开 VS2015,在上方菜单栏中选择“文件 --...

    vv彭
  • 使用 fyne 编写一个计算器程序

    在上一篇文章中,我们介绍了一个 Go 的高颜值 GUI 库fyne。本文接着上一篇,介绍如何使用fyne编写一个简单的计算器程序。程序效果如下:

    用户7731323
  • 使用Golang语言编写echo程序

    网络教程的echo程序,在server断开链接的时候,会出现卡死的情况,如何防止这样的问题出现呢? 我自己优化了一把,异步的echo程序,在client端进行容...

    李海彬
  • 6.计算机语言的发展 编程语言发展 编程语言类型 为什么会有编程语言 编程语言什么作用 机器语言 高级语言分类 编程语言历史 编程语言有哪些 编程语言编年史

    随后,开始用与代码指令实际含义相近的英文缩写词、字母和数字等符号来替代描述指令代码

    noteless
  • 使用C语言编写Python扩展包

    使用C编写Python扩展包。官网文档其实已经很详尽~ 使用场景猜想:某些需要高效处理的算法、某些耗时的操作优化、或者某些核心算法加密等~

    lpe234
  • 8086汇编语言——使用数据段和栈段

    zy010101
  • 常见计算机语言在线编译器!

    当上课,外出,身边没电脑时,或者电脑上没安装必要的运行环境。那么,这篇文章的干活你一定会喜欢的。这里有各种语言的在线编译器,电脑用浏览器即可运行,...

    BessCroft
  • 自制计算器——《自制编程语言》二

    get_token()接受的入参是一个Token结构体指针,函数会分割出记号装入Token结构体并返回。下面是上面两个函数声明和Token结构体的定义:

    Charlie_W

扫码关注云+社区

领取腾讯云代金券