计算两个数之间所有整数的和_汇编语言:输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...
实验要求:
(1)在屏幕提示:“please input the first number(0–99): ”后,输入一个0–99之间的整数。
若所输入的数不在此范围内,或输入其它字符,则屏幕提示:“input an invalid number, input again!”;
(2)在屏幕提示:“please input the second number(0–99): ”后,输入一个0–99之间的整数。
若所输入的数不在此范围内,或输入其它字符,则屏幕提示:“input an invalid number, input again!”。
(3)对2个整数做乘法运算。
(4)在屏幕上显示出乘积所对应的二进制和十六进制数;
显示部分功能要求用子程序实现。
完整代码如下:
DATAS SEGMENT
;此处输入数据段代码
string1 db "please input the first number(0-99):",0dh,0ah,"$"
string2 db "please input the second number(0-99):",0dh,0ah,"$"
string3 db "input an invalid number, input again!",0dh,0ah,"$"
linefeed db 0dh,0ah,'$'
buff1 db 5
num1 db ?
chars1 db 5 dup(0)
buff2 db 5
num2 db ?
chars2 db 5 dup(0)
temp db 10
finum db 0
senum db 0
DATAS ENDS
STACKS SEGMENT
;此处输入堆栈段代码
STACKS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX
;此处输入代码段代码
mov ah,09h
mov dx,offset string1
int 21h
input1:
mov dx,offset buff1
mov ah,0ah
int 21h
mov dx,offset linefeed
mov ah,09h
int 21h
check1:
lea bx,chars1
mov cl,num1
mov ch,0
nextt1:
mov dx,[bx]
cmp dl,'0'
jb again1;小于就
cmp dl,'9'
ja again1;大于就
inc bx
loop nextt1
jmp inputcontinue
again1:
mov dx,offset string3
mov ah,09h
int 21h
jmp input1
inputcontinue:
mov ah,09h
mov dx,offset string2
int 21h
input2:
mov dx,offset buff2
mov ah,0ah
int 21h
mov dx,offset linefeed
mov ah,09h
int 21h
check2:
lea bx,chars2
mov cl,num2
mov ch,0h
nextt2:
mov dx,[bx]
cmp dl,'0'
jb again2;小于就
cmp dl,'9'
ja again2;大于就
inc bx
loop nextt2
jmp putcontinue
again2:
mov dx,offset string3
mov ah,09h
int 21h
jmp input2
putcontinue:
firstnum:
lea bx,chars1
mov al,[bx]
;and al,0fh;ascii码变成数值
sub al,30h
push ax
mov cl,num1 ;是否是单位数操作
cmp cl,1
jne doubchange1 ; num1!=1 ?-
jmp secondnum
doubchange1: ;将字符串变为十六进制数字保存在al内!
mul temp
mov ah,al
mov al,[bx+1]
;and al,0fh
sub al,30h
add al,ah
push ax;保存!
secondnum:
lea bx,chars2
mov al,[bx]
;and al,0fh
sub al,30h
mov cl,num2
cmp cl,1
jne doubchange2
jmp multi
doubchange2:
mul temp
mov ah,al ;暂时存放在ax高八位
mov al,[bx+1]
; and al,0fh
sub al,30h
add al,ah
multi:;做乘法运算
mov bl,al
pop ax
mul bl
output1: ;输出结果十六进制
push ax
mov al,ah
call DisplayforAl_H
pop ax
call DisplayforAl_H
push ax ;暂时保存结果
mov dx,'H'
mov ah,02h
int 21h
mov dx,offset linefeed; 换行!
mov ah,9
int 21h
output2: ;输出结果二进制
pop ax
mov bx,ax
call DisplayforBx_B
mov dx,'B'
mov ah,02h
int 21h
MOV AH,4CH
INT 21H
DisplayforAl_H proc near ;输出al十六进制数据也就是两个字符
push ax ;过程中使用了AX、CX和DX,所以先保存
push cx
push dx
push ax ;暂存ax
mov dl,al ;转换al的高4位
mov cl,4
shr dl,cl ;把高四位移到后4位
;or dl,30h ;al高4位变成0011,相当于在dl上加30h
add dl,30h
cmp dl,39h
jbe DisplayforAl1;小于等于
add dl,7 ;是0Ah~0Fh,还要加上7 A:65,9:57,10:58+7=65:A
DisplayforAl1:
mov ah,2 ;显示
int 21h
pop dx ;将原ax的值恢复到dx
and dl,0fh ;去掉高4位保留低4位
;or dl,30h
add dl,30h
cmp dl,39h
jbe DisplayforAl2
add dl,7
DisplayforAl2:
mov ah,2 ;显示
int 21h
pop dx
pop cx
pop ax
ret ;过程返回
DisplayforAl_H endp
DisplayforBx_B proc near ;显示二进制
mov cx,16 ;显示总共位数
L:
rol bx,1;左移,从头至尾依次移至CF中
mov dl,0
adc dl,30h;dl=dl+30h+CF
mov ah,02h
int 21h
loop L
ret
DisplayforBx_B endp
MOV AH,4CH
INT 21H
CODES ENDS
END START
运行结果如下图:
计算两个数之间所有整数的和_汇编语言:输入2个0–99之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...相关推荐
- 从键盘输入0-255之间的十进制数,将其转换成十六进制数,并在屏幕上显示出
- 编写一个程序,计算两个数的最大公约数
""" 两个或多个整数公有的倍数叫做它们的公倍数 """ # 定义一个函数 def hcf(x, y):""" ...
- 计算两个数之差的绝对值
程序: #include <stdio.h>//从键盘输入两个整数 ,调用库函数 计算两个数之差的绝对值 //带符号相减int SBB(int a,int b) {int S = 0;S ...
- python求两数之和的命令_python计算两个数的百分比方法
工作中遇到了要计算两个数百分比的问题,python 2.7 环境. 代码: #!/usr/bin/env python #function: 计算百分比 #USAGE: python calculat ...
- python计算两个数的最大公约数和最小公倍数
文章目录 计算最大公约数(暴力求解和辗转相除法) 计算最小公倍数 计算最大公约数(暴力求解和辗转相除法) 方法一:暴力求解 def hcf(x,y):smaller = x if x<y els ...
- python怎么计算百分比_python计算两个数的百分比方法
工作中遇到了要计算两个数百分比的问题,python 2.7 环境. 代码: #!/usr/bin/env python #function: 计算百分比 #USAGE: python calculat ...
- 计算两个数平均值的三种方法
第一种方法: 思路:两数相加求和再除2 代码 int a=10;int b=20;int avg=0;avg=(a+b)/2;//平局值//或者avg=(a+b)>>1://右移表示除2, ...
- 不使用加法计算两个数的和
一.前置知识 为了能够快速的理解最后的算法,这里先准备一些前置知识.这些所谓的前置知识可以理解为"点",最后只要把这些"点"串联为"线",就 ...
- 编写一个函数,实现计算两个数大小的比较,且返回最大值。
例子:编写一个函数,实现计算两个数大小的比较,且返回最大值. 解释:当$a大于$b,返回最大值$a,当$b大于$b,返回最大值$b,否则输出null 实现效果: ...
最新文章
- Python游戏开发pygame模块,Python实现吃豆人,儿时的回忆
- 学用 ASP.Net 之 字符串 (2): string.Format
- HDU 1848 Fibonacci again and again
- .NET中的加密算法总结(自定义加密Helper类续)
- Boost智能指针——scoped_ptr
- 现代软件工程 第十四章 【质量保障】 练习与讨论
- java mock void_如何使用Mockito模拟void方法 - How to mock void methods with Mockito
- FPGA————构建3*3矩阵实现每一列求和
- 通过Lotusscript修改数据库主模板属性
- shell定时执行java,shell学习之定时运行作业
- 杭州雄迈拟召回一万个网络摄像头:被指引发美国网络瘫痪
- 如何在win10上显示隐藏文件
- 云计算、大数据、人工智能三者究竟有什么关系
- 使用 Convex 进行状态管理的指南
- php多级分栏,网页设计中分栏布局的几种实现方案
- Android蓝牙手柄开发
- 阿里矢量图标(字体图标)使用
- windows远程下载的新方案
- 按键精灵实现qq群私发脚本Day1实战讲解
- 今天杂志今天杂志社今天编辑部2022年第22期目录