汇编语言-005(XCHG、标志位操作、算术操作、比例因子的变址寻址、多个常用运算符运用、大端转小端、数组操作)

1: 用不超过3条XCHG指令对4个8位寄存器的值重新排序,A,B,C,D调整为D,C,B,A

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data.code
main PROCmov al,'A'mov bl,'B'mov cl,'C'mov dl,'D'xchg al,dlxchg bl,clINVOKE ExitProcess,0
main ENDP
END main

2: 用一条算术运算指令和奇偶标志位判断信息字节是偶校验还是奇校验,设AL中的信息字节为0111 0101

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data.code
main PROC     mov al,75h   ;假设信息字节为 0111 0101add al,1     ;1,如果奇偶标志位为1,那么信息字节就是偶校验否则是奇校验INVOKE ExitProcess,0
main ENDP
END main

3: 用字节操作数实现两个负整数相加,使溢出标志位为1 用加法使零标志位和进位标志位同时置1 用减法使进位标志位为1 使用进位标志位与溢出标志位同时为1

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data.code
main PROCmov al,81hadd al,80h ;溢出标志位为1mov al,80hadd al,80h ;零标志位与进位标志位为1mov al,70hsub al,80h ;进位标志位为1mov al,81hadd al,80h ;进位标志位与溢出标志位都为1INVOKE ExitProcess,0
main ENDP
END main

4: 实现算术 EAX = -val2+7-val3+val1 AX = (val4+BX)-val5

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
val1 DWORD 11
val2 DWORD 22
val3 DWORD 33val4 WORD 44
val5 WORD 55 .code
main PROC;EAX = -val2+7-val3+val1neg val2mov eax,val2add eax,7sub eax,val3add eax,val1;AX = (val4+BX)-val5mov ax,val4add ax,bxsub ax,val5INVOKE ExitProcess,0
main ENDP
END main

5: 在一个双字数组中迭代,用带比例因子的变址寻址,计算元素总和

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
listD DWORD 1,2,3,4,5,6.code
main PROCmov eax,0mov ecx,LENGTHOF listDmov esi,ecx
L1:   sub esi,1add eax,listD[esi * TYPE listD]loop L1INVOKE ExitProcess,0
main ENDP
END main

6: 多个常用运算符运用例子

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
lMyBytes LABEL WORD  ;插入LABEL定义类型使用myBytes直接送入16位寄存器
myBytes BYTE 10h,20h,30h,40h
ALIGN 1              ;使用myBytes对齐到偶数地址
lMyWords LABEL DWORD  ;插入LABEL定义类型使用myWords直接送入32位寄存器
myWords WORD 3 DUP(?),2000h
myStrings BYTE "ABCDE".code
main PROCmov eax,TYPE myBytes ;1mov eax,LENGTHOF myBytes ;4mov eax,SIZEOF myBytes ;4mov eax,TYPE myWords ;2mov eax,LENGTHOF myWords;4mov eax,SIZEOF myWords  ;8mov eax,SIZEOF myStrings ;5mov dx,WORD PTR myBytes  ;将myBytes前两个字节送往DX,值为2010hmov al,BYTE PTR [myWords+1] ;将myWords的第二个字节送入ALmov eax,DWORD PTR myBytes  ;将myBytes全部四个字节送入EAXmov eax,lMyWords   ;使用LABEL定义的类型将myWords直接送入32位寄存器mov ax,lMyBytes   ;使用LABEL定义的类型将myBytes直接送入16位寄存器INVOKE ExitProcess,0main ENDP
END main

7: 大端转小端

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
bigEndian BYTE 12h,34h,56h,78h
littleEndian DWORD ?.code
main PROCmov eax,DWORD PTR bigEndianmov littleEndian,eaxINVOKE ExitProcess,0
main ENDP
END main

8: 交换数组元素对,元素i与元素i+1交换,元素i+2与元素i+3交换

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dwordList DWORD 1,2,3,4,5,6.code
main PROCmov ecx,LENGTHOF dwordListmov eax,0
L1:	mov esi,dwordList[eax * TYPE dwordList]inc eaxxchg esi,dwordList [eax * TYPE dwordList]dec eaxmov dwordList [eax * TYPE dwordList],esiadd eax,2dec ecxloop L1INVOKE ExitProcess,0
main ENDP
END main

9: 数组元素间隔之和,假设数组为0、2、5、9、10,则元素间隔为2、3、4、1,总和为10

.386 
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
dwordList DWORD 0,2,5,9,10.code
main PROCmov ecx,LENGTHOF dwordList -1mov eax,0
L1:	 mov ebx,ecxmov esi,dwordList[ebx * TYPE dwordList]dec ebxsub esi,dwordList[ebx * TYPE dwordList]add eax,esiloop L1INVOKE ExitProcess,0
main ENDP
END main

10: 将字数组复制到双字数组

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
wordList WORD 1,2,3,4,5,6
dwordList DWORD 5 DUP(?).code
main PROCmov ecx,LENGTHOF wordList
L1:   dec ecxmovzx eax,wordList[ecx * TYPE wordList]mov dwordList[ecx * TYPE dwordList],eaxinc ecxloop L1INVOKE ExitProcess,0
main ENDP
END main

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

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

相关文章

bcd码二进制转十进制_二进制编码的十进制(BCD码)及其加法

bcd码二进制转十进制Prerequisite: Number systems 先决条件: 数字系统 BCD Code (8421 Code): In BCD 8421 code, each decimal digit is represented using a 4-bit binary number. The 4-bit binary numbers have their weights attached as 8, 4, 2, 1 from MS…

SVN服务器部署

一、SVN版本控制器 Subversion就是一款实现版本控制的工具软件,通常也成为版本控制器,简称SVN。 Subversion是Apache软件基金会组织下的一个项目 SVN基本操作: checkout(检出):将一个服务端创建好的项目…

rtmp流\http流测试地址

测试方式:ffplay rtmp://58.200.131.2:1935/livetv/cctv1 rtmp: CCTV-1综合:rtmp://58.200.131.2:1935/livetv/cctv1 CCTV-2财经:rtmp://58.200.131.2:1935/livetv/cctv2 CCTV-3综艺:rtmp://58.200.131.2:1935/livetv/cctv3 CCTV-4中文国际:rtmp://58.2…

LINQ to XML:如何读写XCData

using System;using System.Xml.Linq;namespace ConsoleApplication1 {class Program{static void Main(string[] args){//写入CDATA元素块var doc new XElement("Test",new XElement("User",new XAttribute("name", "chenxizhang"),…

C#中的结构和类之间的区别

C#类和结构 (C# class and structure) In C# and other programming languages, structure and classes are used to define a custom data type, that we can organize according to our need with different types of variables, methods etc. 在C#和其…

[转载]SQL Plus 一些使用技巧

原文地址:SQL Plus 一些使用技巧作者:☆水『若寒Sql*plus的使用 Sql*plus介绍 Sql*plus是oracle提供的一个工具程序,既可以在oracle服务器使用,也可以在oracle客户端使用。在windows下分两种,sqlplus.exe是命令行程序&…

云服务器(Centos)部署SVN

1,安装svn yum install subversion 2,查看版本号 svnserve --version 3,创建SVN版本库(在var/svn 文件夹下) 新建文件夹 mkdir -p /var/svn/svnrepos 创建版本库 svnadmin create /var/svn/svnrepos 4,修改…

ffmpeg命令提取像素格式

1: 提取yuv格式:不修改宽高 取3秒 ffmpeg -i test_1920x1080.mp4 -t 3 yuv420p_orig.yuv ffmpeg -i test_1920x1080.mp4 -t 3 -pix_fmt yuv420p yuv420p_orig.yuv 可以使用ffplay播放:ffplay -video_size 1920x1080 yuv420p_orig.yuv 提取y…

Javascript(js)使用function定义构造函数

Javascript并不像Java、C#等语言那样支持真正的类。但是在js中可以定义伪类。做到这一点的工具就是构造函数和原型对象。首先介绍js中的构造函数。 Javascript中创建对象的语法是在new运算符的后面跟着一个函数的调用。如 1 varobj newObject();2 vardate newDate();运算符new首…

错误:将字符串分配给C中的char变量| 常见的C程序错误

If you assign a string to the character variable, it may cause a warning or error (in some of the compilers) or segmentation fault error occurs. 如果将字符串分配给字符变量,则可能会导致警告或错误(在某些编译器中)或发生分段错误。 Consider the code…

【转】用BibTeX 写 Reference

BibTeX 是一种格式和一个程序, 用于协调LaTeX的参考文献处理,BibTeX 使用数据库的的方式来管理参考文献.,BibTeX 文件的后缀名为 .bib。 例子: article{name1, author {作者, 多个作者用 and 连接}, title {标题}, journal {期…

计算机二级C语言易混淆的区别

1,if(a1)与if(a1)的区别 首先,if(a1) 等价于 a1;if(a); 而a 1,是判断a是不是为1; if(sq)里面的分为两种情况,一种是sq为0,不执行if里面的代码内容;另一种是sq不为0,执行里面的代码内…

ffmpeg命令mp3中提取pcm格式

原mp3文件: ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm (这可能是pcm原格式查不到什么信息但是可以播放的:ffplay -ar 48000 -ac 2 -f s16le 48000_2_s16le.pcm) ffmpeg -i buweishui.mp3 -ar 48000 -ac 2 -samp…

C++ STL map的使用

1、map简介 map是一类关联式容器。它的特点是增加和删除节点对迭代器的影响很小,除了那个操作节点,对其他的节点都没有什么影响。对于迭代器来说,可以修改实值,而不能修改key。 2、map的功能 自动建立Key - value的…

bfs广度优先搜索算法_图的广度优先搜索(BFS)

bfs广度优先搜索算法What you will learn? 您将学到什么? How to implement Breath first search of a graph? 如何实现图的呼吸优先搜索? Breadth First Search is a level-wise vertex traversal process. Like a tree all the graphs have verte…

考研C++必刷题(一)

【程序1】 题目:有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 解题思路: 利用三层循环,分别控制百位十位个位,若百位十位个位有重复的,则不输出即可。 代…

关于计算机存储单位?

关于计算机存储单位? 计算机只能识别二进制。(1010100110. . . ) 1字节 8bit(8比特)–>1byte 8bit 1bit 就是一个 1 或 0 1KB 1024byte byte是[-128 ~ 127],共可以标识256个不同的数字。 byte类型的最大值是怎么计算出来的…

ffmpeg 命令转封装

1: 改变编码格式 原mp4文件:视频是h264 音频是aac 视频转成h265,音频转成mp3(容器为mkv,有些容器不一定支持放h265的) ffmpeg -i test_60s.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv 播放&#xff1a…

Delphi 2010 DataSnap封装COM对象

在Delphi 2010中,DataSnap已完全可以不使用COM了.想起在windows上配置COM,就麻烦的很,如果在本机还好说,在远程要涉及到权限等诸多问题(用SocketConnection要方便一些). 如果早期写的程序中有许多COM对象,我们可以通过DataSnap的封装,使用适配器模式简单地封装一下,那么在客户端…

JavaScript中带有示例的Math.PI属性

JavaScript | Math.PI属性 (JavaScript | Math.PI Property) Math.PI is a property in math library of JavaScript that is used to find the value of PI(π) which is a mathematical constant whose value is 3.141. It is generally used to solve problems related to c…