汇编程序:查0~9的平方表获得平方数

news2024/11/26 8:39:25
  • 查平方表。在数据段中建立一个表格TABLE,存放0~9的平方值。从键盘输入一个十进制数字(0~9),查表求键入数字的平方值。并把结果显示在CRT屏幕上。
  • 能够单步执行程序,认真观察、判断每条指令执行的结果是否正确,对错误结果,能够做出相应的处理。

解决问题:

ASSUME   CS:CODE, DS:DATA

;数据段
DATA SEGMENT
 	TABLE DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
 	BUF1 DB 'INPUT(0~9):', 0DH, 0AH, '$'
 	BUF2 DB ' OUTPUT IS $' 
DATA ENDS

;代码段
CODE SEGMENT 
START:
	
	MOV AX,DATA
	MOV DS,AX   	;获得数据段的段地址
	
	LEA DX, BUF1	;字符串BUF1首地址
	MOV AH, 09H 	;字符串输出
    INT 21H 
     
    ;输入字符 
    MOV AH, 01H
    INT 21H 	;存到AL里
    
    ;XLAT 换码指令 将DS:[BX+AL]指向的存储单元的内容送到AL
    AND AL, 0FH		;将AL高四位清零
    LEA BX, TABLE	;偏移地址赋给BX
    XLAT
    
    PUSH AX			;为什么要保护AX呢?
    
    LEA DX, BUF2	;字符串BUF2首地址
    MOV AH, 09H 	;字符串输出
    INT 21H 
    
    POP AX			;出栈
    
    CALL DISPLAY
    MOV AH, 4CH
    INT 21H



;将16进制转换成ASCII码,在屏幕上输出
DISPLAY:
   PUSH BX ;压入堆栈保护
   PUSH CX
   
   ;数位分离,分别显示个位十位
   MOV AH,0
   MOV BL,10
   DIV BL  ; AX/10,商送AL余数送AH
   XCHG AL,AH  ;一条语句实现交换AL与AH内容
   OR AX,3030H ;或3030H,将数字转ASCII码
   
   MOV CX,AX
   MOV DL,CH  ;AH送DL
   MOV AH,02H ;单字符显示DL的内容
   INT 21H
    
   MOV DL,CL   ;AL送DL
   MOV AH,02H  ;单字符显示DL的内容
   INT 21H 
   POP CX ;先出
   POP BX
RET
     
CODE ENDS 
END START  

编程思路:

  • 先在数据段定义好一个数组TABLE,存放0~9的平方数,并且声明变量类型
  • 然后创建两个字符串(BUF1、BUF2)用来提示输入输出数据
  • 在代码段中先将数据段的段地址送给DS
  • 取BUF1的首地址,用21H中的09H输出字符串
  • 调用21H功能包中的01H,从键盘输入一个字符x(本字符存储到AL中)
  • 将AL高四位清零(0~9是10个数,需要四位的空间,AL高4位用不到,所以清零)
  • 取TABLE的地址送给BX,然后使用换码指令取出TABLE变量的第x位数据
  • 此时将AX压入堆栈保护起来,(后面有用到AH)
  • 取BUF2的首地址,用21H中的09H输出字符串
  • AX出栈,调用显示十六进制转ASCII码的程序

优化代码,输出数据更整洁 

ASSUME   CS:CODE, DS:DATA

;数据段
DATA SEGMENT
 	TABLE DB 0, 1, 4, 9, 16, 25, 36, 49, 64, 81
	BUF1 DB 'Please enter a number. (0~9): ', '$'
 	BUF2 DB 'The square of the number is  $' 
 	CHANGELINE DB 13,10,'$';用来表示换行符 
DATA ENDS

;代码段
CODE SEGMENT 
START:
	
	MOV AX,DATA
	MOV DS,AX   	;获得数据段的段地址
	
	LEA DX, BUF1	;字符串BUF1首地址
	MOV AH, 09H 	;字符串输出
	INT 21H 
	 
	MOV AH, 01H     ;从键盘输入一个字符 
	INT 21H 		;存到AL里
	
	;XLAT 换码指令 将DS:[BX+AL]指向的存储单元的内容送到AL
	AND AL, 0FH		;将AL高四位清零, AL=输入的数字
	LEA BX, TABLE	;偏移地址赋给BX
	XLAT            ;换码后, AL = 变量TABLE中第AL位(把AL当做下标,查询变量TABLE)
	
	PUSH AX			;先保护AX, 因为下面要调用输出字符串的命令,AH=09H,会改变AX内容

	MOV DX,OFFSET CHANGELINE  ;输出换行符
	MOV AH,09H
	INT 21H 
	LEA DX, BUF2	;字符串BUF2首地址
	MOV AH, 09H 	;字符串输出
	INT 21H 
	
	POP AX			;出栈
	CALL DISPLAY
	MOV AH, 4CH
	INT 21H

;将16进制转换成ASCII码,在屏幕上输出
DISPLAY:
	PUSH BX ;压入堆栈保护
	PUSH CX
	
	;数位分离,分别显示个位十位
	MOV AH,0
	MOV BL,10
	DIV BL  ; AX/10,商送AL余数送AH
	XCHG AL,AH  ;一条语句实现交换AL与AH内容
	OR AX,3030H ;或3030H,将数字转ASCII码
	MOV CX,AX
	MOV DL,CH  ;AH送DL
	MOV AH,02H ;单字符显示DL的内容
	INT 21H
	MOV DL,CL   ;AL送DL
	MOV AH,02H  ;单字符显示DL的内容
	INT 21H 
	POP CX ;先出
	POP BX
RET

CODE ENDS 
END START  

运行结果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1257704.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【网络安全】-常见的网站攻击方式详解

文章目录 介绍1. SQL 注入攻击攻击原理攻击目的防范措施 2. 跨站脚本攻击(XSS)攻击原理攻击目的防范措施 3. CSRF 攻击攻击原理攻击目的防范措施 4. 文件上传漏洞攻击原理攻击目的防范措施 5. 点击劫持攻击原理攻击目的防范措施 结论 介绍 在数字时代&a…

工具: OPC-UA学习和模型搭建

本文采用的是open62541 V1.3.8 作为OPC-UA的开发的支持库官网 使用文档说明 git相关 git源码 Release版本 下载最新的git源码或者release版本发布包,之后按照使用文档进行编译可以生成动态库。推荐使用的是release发布包。open62541内部有其他的git库依赖 将动态…

微软重磅更新:Bing Chat全线改名Copilot,用户可免费使用GPT4!(文末附Copilot使用教程)

原创 | 文 BFT机器人 微软在2023年的Ignite大会上宣布了许多新产品和功能。其中最引人注目的是Bing Chat更名为Copilot,Copilot基于最新的OpenAI模型,包括GPT-4和DALL・E 3,为用户提供文本和图像生成功能。也就是说,只要你拥有微…

文件元数据批量修改:mp3音频和mp4视频的元数据如何批量修改

在数字媒体处理和管理的日常工作中,文件元数据的批量修改是一个常见的需求。元数据,或者称为文件信息,可以包括文件的创建日期、修改日期、文件名、文件大小、标签等。在音乐和视频处理领域,例如对mp3音频和mp4视频文件&#xff0…

关于铝镓氮(AlGaN)上p-GaN的高选择性、低损伤蚀刻

引言 GaN基高电子迁移率晶体管(HEMT)由于其高频和低导通电阻的特性,近来在功率开关应用中引起了广泛关注。二维电子气(2DEG)是由AlGaN/GaN异质结中强烈的自发和压电极化效应引起的,这导致传统器件通常处于…

ICMPv6报文与邻居状态跟踪

ICMPv6报文 ICMPv6(Internet Control Message Protocol for the IPv6)是IPv6的基础协议之一。 在IPv4中,Internet控制报文协议ICMP(Internet Control Message Protocol)向源节点报告关于向目的地传输IP数据包过程中的错误和信息。它为诊断、信息和管理目的定义了一些消息…

抖音本地生活服务商申请入口门槛过高,该怎么办?

近年来,短视频平台的举起让直播带货和本地生活服务行业逐渐兴起,并且以其便捷、高效的特点受到了广大用户的欢迎。很多创业者也加入了本地生活服务商的行列中,但有消息传出,抖音本地生活服务商申请入口可能会关闭,由于…

防雷接地电阻和接地网的区别及其应用

接地是电气工程中的一种重要的安全措施,它可以保护电气设备和人员免受雷击和过电压的危害,也可以提高电气系统的运行稳定性和可靠性。接地的基本原理是将电气设备或人体与大地连接成同一电位,从而消除或减小危险电压。 地凯科技接地的实现方式…

掌握你的Mac,iStat Menus带你了解mac系统状态

iStat Menus for mac是一款强大的mac系统状态监控工具,它能够提供实时的系统信息和性能监测,帮助用户全面了解和管理自己的Mac设备。无论是CPU、内存、网络、硬盘还是传感器数据,iStat Menus都能直观地展示,并且支持自定义布局和样…

组装自己的稳定扩散模型

在本文中,我们将利用 Hugging Face Diffusers 库的组件实现自己的稳定扩散模型,可以像 diffuser.diffuse() 一样简单地生成图像。 在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编…

基于AC6969的蓝牙控制RGB彩灯

程序的实现思路:单片机与手机app之间通过蓝牙实现通讯,通过点击屏幕上的对应色块然后app会把对应的RGB值发送到单片机。然后单片机会对数据进行解析然后把数字量转换为模拟量,然后通过PWM控制IO口输出不同的电压以此来达到控制RGB灯 RGB彩灯原…

运动蓝牙耳机哪个品牌好?什么运动耳机好用?运动蓝牙耳机推荐

​运动耳机作为现代人运动时不可或缺的装备,除了能够提供稳固舒适佩戴体验之外,还带来了高品质音质体验。我们在选择运动耳机时,需要考虑到它们的音质、稳定性、舒适度和耐用性等方面,以确保在运动中获得最佳的体验和效果。下面&a…

ubuntu下载vscode并运行程序

如有帮助点赞收藏关注! 如需转载,请注明出处! 好久没有在linux下编译c代码了,由于换了酷炫彩灯的电脑。又要重新安装一次喽。做个记录,可以帮助到有需要的人,接下来不要错过每一个步骤。 我们一起手把手运行…

Yolov8训练数据集过程 + 测试测试集 + 继续训练

做自己第一次使用Yolov8训练的记录 1、下载代码 官网的我没找到对应的视频教程,操作起来麻烦,一下这个链接的代码可以有对应bilibili教程:完整且详细的Yolov8复现训练自己的数据集 选择这个下载: 2、安装需要的包: …

桥梁道路结冰传感器守护出行安全的重要工具

随着冬季的到来,气温逐渐降低,路面和桥梁容易结冰,给人们的出行带来安全隐患。为了解决这一问题, WX-JB2H 桥梁道路结冰传感器应运而生。本文将详细介绍桥梁道路结冰传感器的作用、原理及在冬季出行中的重要性。 一、桥梁道路结冰…

JVS-rules规则引擎导出与导入,确保业务连续性的关键

在复杂的系统环境中,规则和配置的迁移、备份及共享成为了确保业务连续性和一致性的关键过程。不同的环境可能需要相同的规则和配置数据,或者我们可能需要备份这些数据以防万一。JVS规则引擎提供了规则的导出与导入功能,使用户能够在多个环境间…

全排列问题

全排列问题: 求n个元素的全排列,n个元素中允许出现重复元素,通过实例验证算法。 思路: 设R={r1,r2,…,rn}是要进行排列的n个元素,Ri&#xff1…

Java学习路线第一篇:Java基础(1)

Java学习路线图,还不赶紧快来查收~ 这篇则分享Java学习路线第一part:Java基础(1) 从看到这篇内容开始,你就是被选定的天命骚年,将承担起学完Java基础的使命,本使命为单向契约,你可…

位图(bitset)和布隆过滤器

位图将数字映射到比特位上&#xff0c;用0&#xff0c;1来表示数据存在与否。 适用场景&#xff1a;大量数据(2^32次方约为40亿数据&#xff0c;0.5GB)&#xff0c;判断存在与否。 template<size_t N> class Bitset { public:Bitset(){// 在x86下size_t表示四个字节&am…

工行软件开发中心DDD奇文赏析

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 本文的内容和《经济形势下谈建模和伪创新-长点心和长点良心》相关。 关于DDD&#xff08;领域驱动设计&#xff09;&#xff0c;乱七八糟的文章很多。 一些比较明显的宣传文章&#x…