实验要求:

(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之间的整数,对其做乘法运算,在屏幕上显示出该乘积对应的二进制和十六进制数...相关推荐

  1. 从键盘输入0-255之间的十进制数,将其转换成十六进制数,并在屏幕上显示出

  2. 编写一个程序,计算两个数的最大公约数

    """ 两个或多个整数公有的倍数叫做它们的公倍数 """ # 定义一个函数 def hcf(x, y):""" ...

  3. 计算两个数之差的绝对值

    程序: #include <stdio.h>//从键盘输入两个整数 ,调用库函数 计算两个数之差的绝对值 //带符号相减int SBB(int a,int b) {int S = 0;S ...

  4. python求两数之和的命令_python计算两个数的百分比方法

    工作中遇到了要计算两个数百分比的问题,python 2.7 环境. 代码: #!/usr/bin/env python #function: 计算百分比 #USAGE: python calculat ...

  5. python计算两个数的最大公约数和最小公倍数

    文章目录 计算最大公约数(暴力求解和辗转相除法) 计算最小公倍数 计算最大公约数(暴力求解和辗转相除法) 方法一:暴力求解 def hcf(x,y):smaller = x if x<y els ...

  6. python怎么计算百分比_python计算两个数的百分比方法

    工作中遇到了要计算两个数百分比的问题,python 2.7 环境. 代码: #!/usr/bin/env python #function: 计算百分比 #USAGE: python calculat ...

  7. 计算两个数平均值的三种方法

    第一种方法: 思路:两数相加求和再除2 代码 int a=10;int b=20;int avg=0;avg=(a+b)/2;//平局值//或者avg=(a+b)>>1://右移表示除2, ...

  8. 不使用加法计算两个数的和

    一.前置知识 为了能够快速的理解最后的算法,这里先准备一些前置知识.这些所谓的前置知识可以理解为"点",最后只要把这些"点"串联为"线",就 ...

  9. 编写一个函数,实现计算两个数大小的比较,且返回最大值。

    例子:编写一个函数,实现计算两个数大小的比较,且返回最大值. 解释:当$a大于$b,返回最大值$a,当$b大于$b,返回最大值$b,否则输出null            实现效果:          ...

最新文章

  1. Python游戏开发pygame模块,Python实现吃豆人,儿时的回忆
  2. 学用 ASP.Net 之 字符串 (2): string.Format
  3. HDU 1848 Fibonacci again and again
  4. .NET中的加密算法总结(自定义加密Helper类续)
  5. Boost智能指针——scoped_ptr
  6. 现代软件工程 第十四章 【质量保障】 练习与讨论
  7. java mock void_如何使用Mockito模拟void方法 - How to mock void methods with Mockito
  8. FPGA————构建3*3矩阵实现每一列求和
  9. 通过Lotusscript修改数据库主模板属性
  10. shell定时执行java,shell学习之定时运行作业
  11. 杭州雄迈拟召回一万个网络摄像头:被指引发美国网络瘫痪
  12. 如何在win10上显示隐藏文件
  13. 云计算、大数据、人工智能三者究竟有什么关系
  14. 使用 Convex 进行状态管理的指南
  15. php多级分栏,网页设计中分栏布局的几种实现方案
  16. Android蓝牙手柄开发
  17. 阿里矢量图标(字体图标)使用
  18. windows远程下载的新方案
  19. 按键精灵实现qq群私发脚本Day1实战讲解
  20. 今天杂志今天杂志社今天编辑部2022年第22期目录

热门文章

  1. 链式前向星模板 建图+dfs+bfs+dijkstra
  2. windbg模拟器不准确现象
  3. linux编译llvm代码
  4. JAVASE——File类
  5. EasyRE 寒假逆向生涯(5/100)
  6. 如何跟踪log4j漏洞原理及发现绕WAF的tips
  7. 【Nginx】 server 配置记录
  8. VI编辑器的操作模式
  9. EF映射之修改数据库
  10. Nginx的平滑重启和升级