汇编练习

2023-05-16

 1.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段;编写一完整的汇编语言程序验证转换的正确性,其中sign与sinteger均为双字变量。               

 if  (sinteger == 0)                 

     sign = 0;              

   else   if ( siteger > 0)           

             sign = 1;                      

     else                               

     sign = -1;

.data
     signter dword ?
	 mysign dword ?
	 frmStr1 byte '%d',0
	 frmStr2 byte '%d',10,0

.code
 main proc
 invoke scanf,offset frmStr1,offset signter
 mov eax,signter
 cmp eax,0
 jnz l1
 mov mysign,0
 jmp done
 l1:
	cmp eax,0
	jg l2
mov mysign,-1
jmp done
l2:
	mov mysign,1
	jmp done
done:
   pushad
	invoke printf, offset frmStr2,mysign
	invoke _getch
   popad
	ret
	
 main endp
 end main

 2.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段;编写一完整的汇编语言程序验证转换的正确性,其中ch1与caps均为字节变量。    

     if (ch1> =’a’ && ch1< =’z’)                    

          caps= =0;                  

      if (ch1> =’A’ && ch1< =’Z’)      

              caps=1;

3.将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段;编写一完整的汇编语言程序验证转换的正确性,其中sum与i均为双字变量。         

   sum=0;              

     for ( i=1;i< =100;i++)          

                  if ( i%2= =0)            

                   sum=sum+i;

提示:采用div指令求余数

.data
	 i dword 1h
	 sum dword 0h
	 frmStr byte '%d',10,0

.code
 main proc
	mov ecx,i
	mov ebx,sum
	again:
		cmp ecx,100
		ja done
		mov eax,ecx
		xor edx,edx			;edx置零,sub edx,edx
		mov bx,2
		div bx				;被除数为edx,且要求被除数位数为除数的2倍
		cmp edx,0
		jnz next
	add sum,ecx
	next:
		inc ecx
		jmp again
	done:
		invoke printf,offset frmStr,sum
	ret
	
 main endp
 end main

4.输入一个年份(调用readuid子程序或scanf函数),判断其是否是闰年。         提示:采用div指令求余数,伪代码描述如下:         read year        

if (year mod 4=0 and year mod 100 <>0)              

                   or (year mod 400=0) then          

   print year ,'is leap year. '      

  else        

     print year ,'is not leap year. '  

.data
	 year dword ?
	 frmStr1 byte '%d',0
	 frmStr2 byte 'is leap year',0ah,0
	 frmStr3 byte 'is not leap year',0ah,0
	 frmStr4 byte 'input year',10,0

.code
 main proc
 invoke printf, offset frmStr4
 invoke scanf,offset frmStr1,offset year

 mov eax,year
 xor edx,edx
 mov ebx,400
 div ebx
 cmp edx,0
 je doneyes
 mov eax,year
 xor edx,edx
 mov ebx,4
 div ebx
 cmp edx,0
 jne doneno
 mov eax,year
 xor edx,edx
 mov ebx,100
 div ebx
 cmp edx,0
 jz doneno
jnz doneyes

 doneyes:
	pushad
	invoke printf,offset frmStr2
	popad
	ret
 doneno:
	pushad
	invoke printf,offset frmStr3 
	popad
 	ret
	
 main endp
 end main

 5. 采用无条件和条件转移指令构造while和do while循环结构,完成下面的求和任务并输出sum和n(sum ,n为双字)。                                                                                                          

    sum=1+2+3+….+n ;

n=100     

思考题:假设sum 为双字无符号整数,在和不溢出的情况下求出n的最大值;输出sum和n的值。

.data
     sum dword 0
	 n dword 1h
	 frmStr byte 'sum=%d,n=%d',10,0
.code
 main proc
 mov ecx,n
 mov eax,sum
again:
	cmp ecx,100
	ja done
	add eax,ecx
	inc ecx
 jmp again
 done:
   pushad
	invoke printf, offset frmStr,eax,ecx
	invoke _getch
   popad
	ret
	
 main endp
 end main

6.从键盘上输入3个有符号的双字整数,编写一完整的程序按照又大到小的顺序输出这3个数。     提示:采用xchg指令交换两个变量的值,伪代码描述如下:                  

             1. read a,b,c              

            2. if  (a<b) then exchage( a,b)                    

            3. if  (a<c) then exchage( a,c)            

              4. if  (b<c) then exchage( b,c)        

              5. print a,b,c

.data
     a sdword ?			
	 b sdword ?
	 cc sdword ?
	 frmStr1 byte '%d%d%d',0
	 frmStr2 byte '%d>%d>%d',10,0
	 frmStr3 byte '请输入三个整数',10,0
.code
 main proc
	invoke printf,offset frmStr3
	invoke scanf,offset frmStr1,offset a,offset b,offset cc
	mov eax,a
	mov ebx,b
	mov ecx,cc0
	cmp eax,ebx
	jl l1
a2:	cmp eax,ecx
	jl l2
a3:	cmp ebx,ecx
	jl l3
	jmp done

l1:
	xchg eax,ebx
	jmp a2
l2:
	xchg eax,ecx
	jmp a3
l3:
	xchg ebx,ecx
	jmp done

done:
 pushad
	invoke printf, offset frmStr2,eax,ebx,ecx
	invoke _getch
 popad
 ret
	
 main endp
 end main

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

汇编练习 的相关文章

  • RabbitMQ消息队列

    同步异步通讯 微服务间通讯有同步和异步两种方式 同步通讯 xff1a 就像打电话 xff0c 需要实时响应 异步通讯 xff1a 就像发邮件 xff0c 不需要马上回复 两种方式各有优劣 xff0c 打电话可以立即得到响应 xff0c 但是
  • Spring Boot集成Spring Security

    Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架 它提供了一组可以在Spring应用上下文中配置的Bean xff0c 充分利用了Spring IoC xff0c DI xf
  • 超分辨重建-Bicubic双三次线性插值opencv实现

    论文实验中经典方法Bicubic的Python实现 使用时更改文件夹 保存路径 重建倍数即可 import os import argparse import cv2 parse args parser 61 argparse Argume
  • opencv_contrib aruco源码

    https github com opencv opencv contrib tree master modules 最近使用了aruco模块 想看看aruco的源码是怎样实现的 在opencv源码中一直没找到aruco 原来 他隐藏在op
  • HTTP/WEB中常见的状态码大全

    HTTP 状态码分类 HTTP 状态码由三个十进制数字组成 xff0c 第一个十进制数字定义了状态码的类型 响应分为五类 xff1a 信息响应 100 199 成功响应 200 299 重定向 300 399 客户端错误 400 499 服
  • 低质量图像超分算法 SwinIR: Image Restoration Using Swin Transformer

    论文名称 xff1a SwinIR Image Restoration Using Swin Transformer 论文地址 xff1a https arxiv org abs 2108 10257 代码仓库 xff1a https gi
  • volatile关键字详解

    volatile的作用 volatile是一个轻量级的synchronized xff0c 一般作用于变量 xff0c 在多线程开发中保证了内存的可见性 相比于synchronized关键字 xff0c volatile关键字的执行成本更低
  • 矩阵连乘-动态规划

    xfeff xfeff 问题 xff1a 给定n个矩阵 xff1a A1 A2 An xff0c 其中Ai与Ai 43 1是可乘的 xff0c i 61 1 xff0c 2 xff0c n 1 确定计算矩阵连乘积的计算次序 xff0c 使得
  • 流水作业调度-算法设计

    问题描述 xff1a 算法描述 xff1a 具体代码 xff1a include lt stdio h gt include lt iostream gt using namespace std class Jobtype public i
  • 动态规划解决01背包问题

    问题描述 xff1a 简单的说就是容量为c的背包 xff0c 有n个物品 xff0c 物品i的重量为wi xff0c 其价值为vi xff0c 问要如何选择装入物品使得背包中物品总价值最大 xff1f xff08 在选择装入背包的物品时 x
  • 石子合并问题

    问题描述 xff1a 在一个圆形操场的四周摆放着n堆石子 xff0c 现在要将石子有次序的合并成一堆 xff0c 规定每次只能选取相邻的两堆石子合并成一堆新的一堆 xff0c 并将新的一堆石子数记为此次合并的得分 xff0c 要求设计一个算
  • 类与对象

    1 编写一个代表三角形的类 xff0c 其中三条边为三角形的属性 xff0c 并且封装有求三角形的面积和周长的方法 分别针对三条边为3 4 5 和7 8 9的两个三角形进行测试 程序代码 xff1a package ex5 public c
  • 抽象类与接口

    1 定义一个接口 xff0c 其中包含一个displa 方法用于显示信息 xff1a 通知类 xff0c 汽车类 xff0c 广告类 xff0c 均要实现该接口显示 通知内容 xff0c 汽车油量 和 广告信息 程序代码 xff1a pub
  • ArduSub SITL Ubuntu mavros环境搭建

    第一章 ArduSub SITL Ubuntu环境搭建 作者 xff1a 张玉梅 zhangym 64 pcl ac cn 1 1 安装过程 第一步 xff1a http ardupilot org dev docs building se
  • 继承与多态

    1 给Point类添加一下几个求两点间距离的多态方法 xff1a public double distance Point p public double distance int x int y public static double
  • css+js制作一个简易的播放器

    lt doctype html gt lt html gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta name 61 34 Keywords 34 content 61 34
  • 图片轮播

    lt DOCTYPE HTML gt lt HTML gt lt HEAD gt lt META name 61 34 Generator 34 content 61 34 EditPlus 34 gt lt META name 61 34
  • 3d盒子

    lt DOCTYPE HTML gt lt HTML gt lt HEAD gt lt TITLE gt 旋转盒 lt TITLE gt lt meta charset 61 34 UTF 8 34 gt lt META name 61 3
  • 基于JavaScript之碰撞的小球

    lt DOCTYPE HTML gt lt HTML gt lt HEAD gt lt META name 61 34 Generator 34 content 61 34 EditPlus 34 gt lt META name 61 34

随机推荐

  • 排序、查找、链表、栈、队列等常见数据结构算法代码实现(C语言版)

    列举了一些数据结构常用算法的代码实现及注释讲解 xff0c 所有代码都自己进行过测试 xff0c 如有疑问请留言 插入排序 include lt stdio h gt typedef struct int key datatype void
  • Java分治法实现日程表

    算法描述 xff1a 设有n 61 2的k次个运动员要进行网球比赛 xff0c 现在要设计一个满足一下要求的比赛日程表 xff1a 每个选手必须要与其他n 1个选手各赛一次每个选手一天只能赛一次循环赛一共进行n 1天 日程表 1234567
  • Struts-标签使用

    1 form标签 表格标签 xff0c f可以用于提交数据 示例 xff1a lt 64 taglib prefix 61 34 s 34 uri 61 34 struts tags 34 gt lt html gt lt body gt
  • Struts-拦截器+通配符+客户端跳转

    1 通配符匹配 Product 表示所有以Product结尾的路径 xff0c 都会匹配在这个Action上 method 61 1 表示第一个通配符 如果访问的是addProduct就会调用add方法 如果访问的是listProduct就
  • Hibernate-基本操作

    1 数据插入 Hibernate可以使用for循环插入多个数据到数据库 示例 xff1a public class TestHibernate public static void main String args SessionFacto
  • 将视觉信息转换为mavros

    https github com thien94 vision to mavros blob master src vision to mavros cpp rosmsg show mavros msgs LandingTarget MAV
  • 分蛋糕+中间数

    问题描述 小明今天生日 xff0c 他有n块蛋糕要分给朋友们吃 xff0c 这n块蛋糕 xff08 编号为1到n xff09 的重量分别为a1 a2 an 小明想分给每个朋友至少重量为k的蛋糕 小明的朋友们已经排好队准备领蛋糕 xff0c
  • 基于键盘与扬声器的电子琴设计

    1 功能需求 开发一个基于键盘和主机扬声器 xff08 小喇叭 xff09 的简易电子琴工具 xff0c 同时它也可以自动的演奏指定的简谱文件 通过调用计算机系统的API接口 xff0c 导入kernel32 dll xff0c 调用相关的
  • 最大波动+数位之和

    问题描述 小明正在利用股票的波动程度来研究股票 小明拿到了一只股票每天收盘时的价格 xff0c 他想知道 xff0c 这只股票连续几天的最大波动值是多少 xff0c 即在这几天中某天收盘价格与前一天收盘价格之差的绝对值最大是多少 输入格式
  • 折点计数

    问题描述 给定n个整数表示一个商店连续n天的销售量 如果某天之前销售量在增长 xff0c 而后一天销售量减少 xff0c 则称这一天为折点 xff0c 反过来如果之前销售量减少而后一天销售量增长 xff0c 也称这一天为折点 其他的天都不是
  • 动态规划+贪心算法实现背包问题

    动规背包问题实现 xff1a import java util Scanner public class PackDynamic public static void main String args TODO Auto generated
  • 图像旋转

    问题描述 旋转是图像处理的基本操作 xff0c 在这个问题中 xff0c 你需要将一个图像逆时针旋转90度 计算机中的图像表示可以用一个矩阵来表示 xff0c 为了旋转一个图像 xff0c 只需要将对应的矩阵旋转即可 输入格式 输入的第一行
  • 注册界面表单

    代码 xff1a lt DOCTYPE HTML gt lt html gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt meta name 61 34 Generator 34 cont
  • 关于表单验证错误提示的几种方式

    一 用alert 弹出提示框 xff08 不提倡 xff09 通过alert弹出提示框 xff0c 但输入框多的话会不断弹出提示框 xff0c 每次都要点确定 xff0c 很麻烦 二 利用H5新增的required属性 required 属
  • html+css+js手写练习-仿CCF注册和登录页面

    直接贴代码 xff1a lt DOCTYPE html gt lt html gt lt head gt lt meta charset 61 34 utf 8 34 gt lt title gt 中国计算机学会 注册 lt title g
  • Android学习之点击按钮跳转至另一个Activity并传值和设置返回逻辑父屏幕

    首先新建一个Activity 1 在activity main的layout布局文件中添加一个按钮 xff0c 一个EditText并简单设置样式 我是这样写的 lt xml version 61 34 1 0 34 encoding 61
  • mission planner日志分析

    通过USB连接pixhawk xff0c 打missionplanner 选择需要的日志下载 xff0c 下载很慢 xff0c 慢慢等 https ardupilot org dev docs common diagnosing probl
  • Android学习之SD卡操作

    1 权限声明 对于SD卡的读写 xff0c 需要申请对应的权限 xff0c 即在主配置文件中添加对应的权限请求 lt uses permission android name 61 34 android permission WRITE E
  • Maven利用JBoss创建hibernate核心配置文件

    1 在Help的Eclipse Marketplace中搜索JBoss xff0c 选择下载安装 安装完毕后重启eclipse xff0c 如果重启后maven项目报错 xff0c 很大可能是在下载过程中有jar包受损 xff0c 出现Fa
  • 汇编练习

    1 将下面C语言程序的代码片段转换为功能等价的汇编语言代码片段 xff1b 编写一完整的汇编语言程序验证转换的正确性 xff0c 其中sign与sinteger均为双字变量 if sinteger 61 61 0 sign 61 0 els