汇编语言——输入两个字数据(16位的数)X,Y,计算Z=X+Y,并把Z的结果显示出来

文章目录

      • 以2进制输入,2进制输出(无符号)
      • 以2进制输入,2进制输出(带符号)
      • 以8进制输入,8进制输出
      • 以10进制输入,10进制输出
      • 以16进制输入,16进制输出

仅供参考

X、Y的输入可以是任何进制。

以2进制输入,2进制输出(无符号)

由于X、Y都是16位的数,X+Y会超出16位,用16位+16位=(dx,ax)32位存储相加的结果。

输入:

由于寄存器数量的限制,我们把输入的X、Y分别放入数据段X和Y,相加的结果(dx,ax)由低低高高,ax放入数据段W,dx放入数据段W+2。

输出:

先输出数据段的W+2,再输出W,总共32位二进制数。

在这里插入图片描述

在这里插入图片描述

data segmentstring1 db "please input x:",0ah,0dh,'$'string2 db 0ah,0dh,"please input y:",0ah,0dh,'$'string3 db "the result of x+y:",0ah,0dh,'$'X dw ?Y dw ?W dw ?,?
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ds:data,ss:stack
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,topmov bx,0				;存放输入的二进制数xmov cx,0				;统计输入的合法字符数;显示提示信息"please input x:"lea dx,string1mov ah,9int 21hL1:	mov ah,7int 21hcmp al,0dh				;回车,跳转到L2输入yje L2cmp al,30hjb L1cmp al,31hja L1mov dl,al				;合法输入,回显mov ah,2int 21hinc cx					;合法字符+1rol bx,1				;bx左移1位ror dl,1				;输入的字符右移1位adc bx,0				;带进位加法cmp cx,16				;判断输入的合法字符数,cx=16跳转到L2输入yje L2jmp L1					;否则继续输入L2:	cmp cx,0				;判断x输入的合法字符数,如果cx=0,跳回继续输入je L1mov X,bx				;把输入的x存储到数据段的Xmov bx,0				;bx清零mov cx,0				;cx清零;显示提示信息"please input y:"lea dx,string2mov ah,9int 21hL3:	mov ah,7int 21hcmp al,0dhje L4cmp al,30hjb L1cmp al,31hja L1mov dl,almov ah,2int 21hinc cxrol bx,1ror dl,1adc bx,0cmp cx,16je L4jmp L3L4:	cmp cx,0je L3mov Y,bx				;把输入的y存储到数据段的Ymov dl,0ah				;换行mov ah,2int 21hmov dl,0dh				;回车mov ah,2int 21hmov ax,X				;X+Ymov dx,0add ax,Yadc dx,0				;带进位加法mov W,ax				;把相加的结果ax存储到数据段的Wmov W+2,dx				;把相加的结果dx存储到数据段的W+2;显示提示信息"the result of x+y:"lea dx,string3mov ah,9int 21hmov bx,W+2				;先输出W+2的16位二进制数mov cx,16
L5:	mov dl,30hrol bx,1adc dl,0mov ah,2int 21hloop L5mov dl,' 'mov ah,2int 21hmov bx,W				;先输出W的16位二进制数mov cx,16
L6:	mov dl,30h	rol bx,1adc dl,0mov ah,2int 21hloop L6mov ah,4chint 21h
main endp
code endsend main

以2进制输入,2进制输出(带符号)

在X+Y的时候,使用符号拓展cwd将ax拓展成32位(dx,ax)

类型转换指令:

CBW

AL拓展成AX,AL的最高位为0,(AH)=00h;AL的最高位为1,(AH)=0ffh;

CWD

AX拓展成(DX,AX),AX的最高位为0,(DX)=00h;AH的最高位为1,(DX)=0ffh;

x=-3;y=6

在这里插入图片描述

x=-1;y=-1

在这里插入图片描述

由于输入的时候默认bx=0,不足16位以0补全,即只有输入16位二进制数才能改变符号位,否则默认为正数:

在这里插入图片描述

data segmentstring1 db "please input x:",0ah,0dh,'$'string2 db 0ah,0dh,"please input y:",0ah,0dh,'$'string3 db "the result of x+y:",0ah,0dh,'$'X dw ?Y dw ?W dw ?,?
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ds:data,ss:stack
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,topmov bx,0				;存放输入的二进制数xmov cx,0				;统计输入的合法字符数mov bp,0				;符号位,默认为0;显示提示信息"please input x:"lea dx,string1mov ah,9int 21hL1:	mov ah,7int 21hcmp al,0dh				;回车,跳转到L2输入yje L2cmp al,30hjb L1cmp al,31hja L1mov dl,al				;合法输入,回显mov ah,2int 21hinc cx					;合法字符+1rol bx,1				;bx左移1位ror dl,1				;输入的字符右移1位adc bx,0				;带进位加法cmp cx,16				;判断输入的合法字符数,cx=16跳转到L2输入yje L2jmp L1					;否则继续输入L2:	cmp cx,0				;判断x输入的合法字符数,如果cx=0,跳回继续输入je L1mov X,bx				;把输入的x存储到数据段的Xmov bx,0				;bx清零mov cx,0				;cx清零;显示提示信息"please input y:"lea dx,string2mov ah,9int 21hL3:	mov ah,7int 21hcmp al,0dhje L4cmp al,30hjb L1cmp al,31hja L1mov dl,almov ah,2int 21hinc cxrol bx,1ror dl,1adc bx,0cmp cx,16je L4jmp L3L4:	cmp cx,0je L3mov Y,bx				;把输入的y存储到数据段的Ymov dl,0ah				;换行mov ah,2int 21hmov dl,0dh				;回车mov ah,2int 21h;带符号数X+Y;把X拓展成带符号的32位二进制数mov ax,Xcwdmov cx,axmov bx,dx;把Y拓展成带符号的32位二进制数mov ax,Ycwdadd ax,cxadc dx,bx				;带进位加法mov W,ax				;把相加的结果ax存储到数据段的Wmov W+2,dx				;把相加的结果dx存储到数据段的W+2;显示提示信息"the result of x+y:"lea dx,string3mov ah,9int 21hmov bx,W+2				;先输出W+2的16位二进制数mov cx,16
L5:	mov dl,30hrol bx,1adc dl,0mov ah,2int 21hloop L5mov dl,' 'mov ah,2int 21hmov bx,W				;先输出W的16位二进制数mov cx,16
L6:	mov dl,30h	rol bx,1adc dl,0mov ah,2int 21hloop L6mov ah,4chint 21h
main endp
code endsend main

以8进制输入,8进制输出

还没有解决有进位32位二进制以8进制输出

2024/4/24 22:08已解决

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

data segmentstring1 db "please iput x:",0dh,0ah,'$'string2 db 0dh,0ah,"please iput y:",0dh,0ah,'$'string3 db 0dh,0ah,"the result of x+y:",0dh,0ah,'$'string4 db 0dh,0ah,"overflow!",0dh,0ah,'$'X dw ?Y dw ?W dw ?,?
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ds:data,ss:stack
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,topstarting:	mov bx,0mov si,8mov cx,0lea dx,string1mov ah,9int 21h
L1:	mov ah,7int 21hcmp al,0dhje L2cmp al,30hjb L1cmp al,37hja L1mov dl,almov ah,2int 21hinc cxand dx,7mov ax,dxxchg ax,bx	mul si	jc overflow	add bx,ax	jc overflowcmp cx,6je L2jmp L1L2:cmp cx,0je L1mov X,bxmov bx,0mov cx,0lea dx,string2mov ah,9int 21hL3:	mov ah,7int 21hcmp al,0dhje L4cmp al,30hjb L1cmp al,37hja L1mov dl,almov ah,2int 21hinc cxand dx,7mov ax,dxxchg ax,bx	mul si	jc overflow	add bx,ax	jc overflowcmp cx,6je L4jmp L3L4:cmp cx,0je L3mov Y,bxmov ax,Xmov dx,0add ax,Yjc printc				;x+y超出了16位,跳转到有进位的输出adc dx,0mov W,axmov W+2,dxlea dx,string3mov ah,9int 21h;W+2为0,可以不输出(懒得删)mov bx,W+2	mov dl,30hrol bx,1adc dl,0mov ah,2int 21hmov cx,5
L5:	push cxmov cl,3rol bx,clmov dl,bland dl,7add dl,30hmov ah,2int 21hpop cxloop L5mov dl,' 'mov ah,2int 21hmov bx,Wmov dl,30hrol bx,1adc dl,0mov ah,2int 21hmov cx,5
L6:	push cxmov cl,3rol bx,clmov dl,bland dl,7add dl,30hmov ah,2int 21hpop cxloop L6jcxz exit;x+y超出了16位,即W+2不等于0,要把W的最高位移到W+2,一起输出3位二进制数
;由于最大为177777(8)+177777(8),dx=1h
;把W+2左移1位加上W的最高位
;W+2以6位8进制进行输出
;W把最高位移出去再以5位8进制进行输出
printc:adc dx,0mov W,axmov W+2,dxlea dx,string3mov ah,9int 21hmov ax,W	mov bx,W+2rol bx,1rol ax,1adc bx,0;16位二进制以6位8进制输出,先输出最高位	mov dl,30hrol bx,1adc dl,0mov ah,2int 21h;再输出剩下的5位8进制mov cx,5
L7:	push cxmov cl,3rol bx,clmov dl,bland dl,7add dl,30hmov ah,2int 21hpop cxloop L7mov dl,' 'mov ah,2int 21h;把最高位移走mov bx,Wmov dl,30hrol bx,1;再输出剩下5位8进制	mov cx,5
L8:	push cxmov cl,3rol bx,clmov dl,bland dl,7add dl,30hmov ah,2int 21hpop cxloop L8jcxz exitoverflow:	lea dx,string4mov ah,9int 21hjmp startingexit:	mov ah,4chint 21h
main endp
code endsend main

以10进制输入,10进制输出

在这里插入图片描述

在这里插入图片描述

data segmentstring1 db "please iput x:",0dh,0ah,'$'string2 db 0dh,0ah,"please iput y:",0dh,0ah,'$'string3 db 0dh,0ah,"the result of x+y:",0dh,0ah,'$'string4 db 0dh,0ah,"overflow!",0dh,0ah,'$'X dw ?Y dw ?W dw ?,?
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ss:stack,ds:data
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,topstarting:	mov bx,0mov cx,0mov si,10
;输入x		lea dx,string1mov ah,9int 21h
L1:	mov ah,7int 21hcmp al,0dhje L2cmp al,30hjb L1cmp al,39hja L1mov dl,almov ah,2int 21hinc cxand dx,0fhmov ax,dxxchg ax,bxmul sijc overflowadd bx,axjc overflowjmp L1L2:cmp cx,0je L1mov X,bxmov bx,0mov cx,0;输入y	lea dx,string2mov ah,9int 21h	
L3:mov ah,7int 21hcmp al,0dhje L4cmp al,30hjb L3cmp al,39hja L3mov dl,almov ah,2int 21hinc cxand dx,0fhmov ax,dxxchg ax,bxmul sijc overflowadd bx,axjc overflowjmp L3L4:cmp cx,0je L3mov Y,bx;计算X+Ymov ax,Xmov dx,0add ax,Yadc dx,0mov W,axmov W+2,dx;以十进制输出X+Ylea dx,string3mov ah,9int 21hmov ax,Wmov dx,W+2mov cx,0
L5:	div sipush dxinc cxcmp ax,0je L6mov dx,0jmp L5L6:pop dxadd dl,30hmov ah,2int 21hloop L6jcxz exitoverflow:lea dx,string4mov ah,9int 21hjmp starting	exit:mov ah,4chint 21hmain endp
code endsend main

以16进制输入,16进制输出

在这里插入图片描述

在这里插入图片描述

data segmentstring1 db "please iput x:",0dh,0ah,'$'string2 db 0dh,0ah,"please iput y:",0dh,0ah,'$'string3 db 0dh,0ah,"the result of x+y:",0dh,0ah,'$'string4 db 0dh,0ah,"overflow!",0dh,0ah,'$'X dw ?Y dw ?W dw ?,?
data ends
stack segment stackdw 100 dup (?)top label word
stack ends
code segmentassume cs:code,ss:stack,ds:data
main proc farmov ax,datamov ds,axmov ax,stackmov ss,axlea sp,top;输入xmov bx,0mov cx,0lea dx,string1mov ah,9int 21h
L1:	mov ah,7int 21hcmp al,0dhje L5cmp al,30hjb L1cmp al,39hja L2mov dl,almov ah,2int 21hinc cxsub dl,30hjmp L4L2:cmp al,41hjb L1cmp al,46hja L3mov dl,almov ah,2int 21hinc cxsub dl,37hjmp L4L3:cmp al,61hjb L1cmp al,66hja L1mov dl,almov ah,2int 21hinc cxsub dl,57h	L4:	and dx,0fhpush cxmov cl,4shl bx,cladd bx,dxpop cxcmp cx,4je L5jmp L1L5:cmp cx,0je L1mov X,bx;输入y	lea dx,string2mov ah,9int 21hmov bx,0mov cx,0L6:mov ah,7int 21hcmp al,0dhje L10cmp al,30h	jb L6cmp al,39hja L7mov dl,almov ah,2int 21hinc cxsub dl,30hjmp L9L7:cmp al,41hjb L6cmp al,46hja L8mov dl,almov ah,2int 21hinc cxsub dl,37hjmp L9L8:cmp al,61hjb L6cmp al,66hja L6mov dl,almov ah,2int 21hinc cxsub dl,57hL9:and dx,0fhpush cxmov cl,4shl bx,cladd bx,dxpop cxcmp cx,4je L10jmp L6L10:cmp cx,0je L6mov Y,bx;计算x+y	mov ax,Xmov dx,0add ax,Yadc dx,0mov W,axmov W+2,dx;以16进制输出x+y	lea dx,string3mov ah,9int 21hmov bx,W+2cmp bx,0		;如果W+2是0,不输出je L11mov dl,bladd dl,30hmov ah,2int 21h
L11:	mov bx,Wmov cx,4
L12:	push cxmov cl,4rol bx,clmov dl,bland dl,0fhcmp dl,9ja L13add dl,30hjmp L14L13:add dl,37hL14:mov ah,2int 21hpop cxloop L12exit:mov ah,4chint 21hmain endp
code endsend main

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

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

相关文章

Windows系统启动Redis

一、下载windows版本Redis 1.1 选择一个使用的版本 在以下地址中选择一个Windows系统可以使用的版本 https://github.com/microsoftarchive/redis/tags 1.2 下载 1.3 解压到文件夹 二、启动Redis 双击redis-server.exe启动Redis 出现以下界面即启动成功 三、测试是否可以使…

Linux第二节--常见的指令介绍集合(持续更新中)

点赞关注不迷路!,本节涉及初识Linux第二节,主要为常见的几条指令介绍。 Linux下基本指令 1. ls 指令 语法: ls [选项][目录或文件] 功能:对于目录,该命令列出该目录下的所有子目录与文件。对于文件&#…

某米社区请求data类型multipart_form-data分析

随笔记录 之前未曾遇到请求的Content-Type:multipart/form-data; boundary=----WebKitFormBoundary9Fxpi3Dvlnhm3MKq,今天就简单是根据目标网站进行分析下,目标站点是:aHR0cHM6Ly93ZWIudmlwLm1pdWkuY29tL3BhZ2UvaW5mby9taW8vbWlvL3BjU2VhcmNoP2Zyb21QYXRobmFtZT1taW9Cb2FyZ…

边缘计算含义与应用简析

边缘计算概述 边缘计算使数据存储和处理靠近生成或收集数据的位置,而不是在位于数千公里的服务器上。它将通过保持灵活性在边缘无缝可靠地部署服务。它比云计算更安全,因为不需要传输数据。因此,在将数据从边缘移动到云端时,不用…

eSIM Network搭建指南

有任何关于GSMA\IOT\eSIM\RSP\业务应用场景相关的问题,欢迎W: xiangcunge59 一起讨论, 共同进步 (加的时候请注明: 来自CSDN-iot).

用自动化工具轻松吸引更多粉丝关注

在当今这个信息爆炸的时代,如何让自己的品牌、产品或者个人在众多信息中脱颖而出,吸引更多的粉丝关注,成为了许多人面临的问题。而自动化工具,就是我们解决这个问题的利器。 首先,我们要明白,吸引粉丝关注…

【笔记】Simulink与Workbench交互+自定义m函数封装为Simulink模块

以如下三角函数为例,说明建模方法 ya*sin(b*2*pi*uc);0.总模型总代码 总模型 总代码: clc clear close allt_all10; a10; b1; c0;%pi/2; delta_t0.01; simOutsim(test240430); out_tsimOut.tout; out_y1simOut.yout{1}.Values; out_y2simOut.yout{2}.…

【C 数据结构】深度优先搜索、广度优先搜索

文章目录 【 1. DFS 深度优先搜索 】1.1 基本原理1.2 C 实现 【 2. BFS 广度优先搜索 】2.1 基本原理2.2 C 实现 【 3. 深度优先生成树、广度优先生成树 】【 4. 深度优先生成森林、广度优先生成森林 】4.1 深度优先生成森林4.2 广度优先生成森林 对存储的图中的顶点进行遍历搜…

告诉我们事实:用知识图谱增强大语言模型以实现事实感知的语言建模

🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 论文标题:Give Us the Facts: Enhancing Large Language Models with Knowledge Graphs for Fact-aware Language Modeling 论文链接:https://arxiv.org/abs/2306.11489 论文作…

O2OA开发平台前端源码级二次开发(Vue3,React)

在使用O2OA进行项目定制化开发时,我们可以开发新的前端组件(x_component)以扩展O2OA来实现更多的业务。这种新增前端组件或者前端业务的开发通常会配合后端自定义应用实现的服务来完成系统内数据的交互。在当系统默认的界面不符合系统UI/UE设…

leetcode84柱状图中最大的矩形

题解&#xff1a; - 力扣&#xff08;LeetCode&#xff09; class Solution {public int largestRectangleArea(int[] heights) {Stack<Integer> stack new Stack<>();int maxArea Integer.MIN_VALUE;for(int i 0;i < heights.length;i){int curHeight hei…

spring boot 启动流程详解

主启动类 SpringBootApplication MapperScan("com.example.mapper") public class StableBootApplication {public static void main(String[] args) {SpringApplication.run(StableBootApplication.class,args);} }SpringApplication类中有个静态run()方法&#xf…

成都旅游攻略

第一天 大熊猫基地(55一人) 切记要去早&#xff0c;否则只能看到熊猫屁股 文殊院(拜文殊菩萨) 杜甫草堂(50一人) 宽窄巷子(旅游打卡拍照) 奎星楼街吃晚饭 这里的饭菜很可口 第二天 东郊记忆(成都故事.川剧变脸)主要是拍照打卡 春熙路 IFS国金中心(打卡熊猫屁屁) 太…

VBA技术资料MF149:在多个工作表某单元格中插入图片

我给VBA的定义&#xff1a;VBA是个人小型自动化处理的有效工具。利用好了&#xff0c;可以大大提高自己的工作效率&#xff0c;而且可以提高数据的准确度。“VBA语言専攻”提供的教程一共九套&#xff0c;分为初级、中级、高级三大部分&#xff0c;教程是对VBA的系统讲解&#…

2024-5-1我把QQ群聊天记录分析工具重写了一下

【下载地址】 https://www.lanzoub.com/b00rn0g47e 密码:9hww 【项目背景】 2020年我用Tkinter写过一个QQ群聊天记录分析的工具exe&#xff0c;后续也写过一个纯JS前端的版本&#xff0c;前阵子有个用户反馈不能用了&#xff0c;顺便看能不能加入一个分析关键词的功能&…

《引爆流量 获客技术》实战方法,让你的生意客户裂变渠道裂变(13节)

[1]-先导课_.mp4 [2]-第1节:设计客户终身价值的方法和买客户思维 .mp4 [3]-第2节:【渠道模型】解决谁是我的客户如何找到 ,mp4 [4]-第3节:【诱饵模型】解决 如何获得更多的客户 ,mp4 [5]-第4节:【钩子模型】解决让目标客户主动找你的 .mp4 [6]-第5节:【裂变策略】解决让来…

Github 2024-05-03 Java开源项目日报 Top9

根据Github Trendings的统计,今日(2024-05-03统计)共有9个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Java项目9Kotlin项目1C++项目1libGDX: 跨平台Java游戏开发框架 创建周期:4284 天开发语言:Java, C++协议类型:Apache License 2.0Star数量:2…

链表经典面试题下

目录 如有帮助&#xff0c;还望三连支持&#xff0c;谢谢&#xff01;&#xff01;&#xff01; 题目一&#xff1a;141. 环形链表 - 力扣&#xff08;LeetCode&#xff09; 题目二&#xff1a;142. 环形链表 II - 力扣&#xff08;LeetCode&#xff09; 题目三&#xff1a;…

java 学习二

java字面量 java变量 注意事项 十进制转二进制 计算机中表示数据的最小单元 java中的数据类型 java中的类型转换 表达式的自动类型转换 强制类型转换

Java 笔记 13:Java 数组内容,数组的声明、创建、初始化、赋值等,以及内存分析

一、前言 记录时间 [2024-05-03] 系列文章简摘&#xff1a; Java 笔记 01&#xff1a;Java 概述&#xff0c;MarkDown 常用语法整理 Java 笔记 02&#xff1a;Java 开发环境的搭建&#xff0c;IDEA / Notepad / JDK 安装及环境配置&#xff0c;编写第一个 Java 程序 Java 笔记 …