汇编语言-003(LAHF_SAHF 、XCHG、FLAGS、 OFFSET、ALIGN、PTR、LENGTHOF、SIZEOF)

1:LAHF将EFLAGS符号寄存器低8位字节复制到AH,SAHF将AH复制到EFLAGS符号寄存器低8位字节

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
saveflags BYTE ?.code
main PROClahfmov saveflags ,ahmov ah,saveflagssahfINVOKE ExitProcess,0
main ENDP
END main

2:交换两个操作数内容

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCoed:DWORD.data
val1 WORD 1234h
val2 WORD 5678h.code
main PROCmov ax,val1xchg ax,val2mov val1,axINVOKE ExitProcess,0
main ENDP
END main

3:直接寻址,数组名加[]和偏移量访问元素

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCoed:DWORD.data
arrayB BYTE 10h,20h,30h,40h,50h
arrayW WORD 100h,200h,300h,400h,500h
arrayD DWORD 1000h,2000h,3000h,4000h,5000h.code
main PROCmov al,arrayBmov al,[arrayB+1]mov al,[arrayB+2]mov ax,arrayWmov ax,[arrayW+2]mov eax,arrayDmov eax,[arrayD+4]INVOKE ExitProcess,0
main ENDP
END main

4:算术表达式例子 Rval = -Xval + (Yval - Zval)

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
Rval SDWORD ?
Xval SDWORD 26
Yval SDWORD 30
Zval SDWORD 40.code
main PROCmov eax,Xvalneg eaxmov ebx,Yvalsub ebx,Zvaladd eax,ebxmov Rval,eaxINVOKE ExitProcess,0
main ENDP
END main

5:标志位例子展示

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
val1 BYTE 10h.code
main PROC;零标志mov cx,1sub cx,1mov ax,0FFFFhinc ax;符号标志位mov cx,0sub cx,1mov ax,7FFFhadd ax,2;进位标志位mov al,0FFhadd al,1;溢出标志位mov al,+127add al,1mov al,-128sub al,1INVOKE ExitProcess,0
main ENDP
END main

6:OFFSET伪指令,返回数据标号的距离数据段起始地址的偏移量

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
bVal BYTE ?
wVal WORD ?
dVal DWORD ?
dVal2 DWORD ?myArray WORD 1,2,3,4,5.code
main PROCmov esi,OFFSET bValmov esi,OFFSET wValmov esi,OFFSET dValmov esi,OFFSET dVal2;OFFSET访问数组元素mov esi,OFFSET myArray+4INVOKE ExitProcess,0
main ENDP
END main

7:ALIGN伪指令,将一个变量对齐到1,2,4,8,16个字节

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
bVal BYTE ?  ;00404000h
ALIGN 2
wVal WORD ?  ;00404002h
bVal2 BYTE ? ;00404004h
ALIGN 4
dVal DWORD ? ;00404008h
dVal2 DWORD ?;0040400ch.code
main PROCINVOKE ExitProcess,0
main ENDP
END main

8:重写一个已经声明过的操作数的大小类型,就类似指针,指向某地址再取值

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCoed:DWORD.data
myDouble DWORD 12345678h
wordList WORD 5678h,1234h.code
main PROC; mov ax,myDouble ;汇编器不允许这样mov ax,WORD PTR myDoublemov ax,WORD PTR [myDouble+2] ;1234hmov bl,BYTE PTR myDouble  ;78hmov eax,DWORD PTR wordList  ;12345678hINVOKE ExitProcess,0
main ENDP
END main

9:LENGTHOF伪指令,计算数组元素个数

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCoed:DWORD.data
byte1 BYTE 10,20,30        ;LENGTHOF为3
array1 WORD 30 DUP(?),0,0   ;LENGTHOF为30+2
array2 WORD 5 DUP(3 DUP(?))  ;如果嵌套DUP,那LENGTHOF返回的是两个数值的乘积 LENGTHOF为5*3,类似二维数组
array3 DWORD 1,2,3,4             ;LENGTHOF为4
digitStr BYTE "12345678",0      ;LENGTHOF为9myArray BYTE 10,20,30,40,50    ;LENGTHOF为5,占用多行只针对第一行BYTE 60,70,80,90,100myArray2 BYTE 10,20,30,40,50,   ;LENGTHOF为10,第一行用逗号,后面继续初始化60,70,80,90,100.code
main PROCINVOKE ExitProcess,0
main ENDP
END main

10:SIZEOF伪指令,计算数组总字节数,LENGTHOF 与 TYPE 的乘积

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCoed:DWORD.data
intArray WORD 32 DUP(0).code
main PROCmov eax,SIZEOF intArrayINVOKE ExitProcess,0
main ENDP
END main

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

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

相关文章

Mybatis中的核心配置文件SqlMapConfig.xml详细介绍

一、properties(属性) 可以引用java属性文件中的配置信息如下 jdbc.properties代码如下: jdbc.drivercom.mysql.jdbc.Driver jdbc.urljdbc:mysql://localhost:3306/mybatis?characterEncodingutf-8 jdbc.usernameroot jdbc.passwordbeyond…

用Kotlin开发您的第一个应用程序| Android与Kotlin

In the previous article, we learned how to setup Kotlin in the android studio? Now moving to journey ahead we are going to develop our first app with Kotlin. It is the basic app, but it will let you know the structure of the program. 在上一篇文章中&#x…

数据结构与算法分析-第一章Java类(02)

编写一个名为Person的类,它包含分别表示人的名字与年龄的两个数据域。要求此类包含对其中任何一个数据域进行设置与获取的方法。还要求包含可进行下列测试的方法: 两个Person对象是否相等--即是否有相同的名称与年龄一个人是否比另一个人年长 最后&#…

asp.net对于长篇文章进行分页

对于文章篇幅比较长的,就必须采用分页显示。在.net中对长篇文章分页一般有2种方法,第一种就是先计算好一页的文字长度是多少,然后把文章总的长度除设置好的单页文字长度及可,用这方法可以减少认为进行分页的繁琐,但是这…

汇编语言-004(LABEL 、间接寻址、变址操作数、指针使用、TypeDef、LOOP、DWORD变量交换高位低位字)

1: LABEL : 为一个标号定义大小属性,但不分配内存与下一个变量共用内存,与C中UNION类似 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCoed:DWORD.data val16 LABEL WORD val32 DWORD 12345678hLongValue LABEL DWORD val1…

(只需挨个复制粘贴命令即可部署)在Centos7下搭建文件服务器(VSFTPD)

观看北京尚学堂-百战程序员笔记一、VSFTPD简介 Linux的组件(一款软件),安装到Linux后可以通过java代码(FtpClient)实现文件的上传。基于FTP协议。 由于VSFTPD是基于FTP协议,客户端浏览器是需要通过http协议…

POJ 2421 Constructing Roads MST kruskal

最近刚学的并查集所以用kruskal来试试最小生成树~ kruskal其实用几句话就能说完~ 1.贪心所有边的权值,从小到大取值 2.取值时~将边权非0的两个顶点~进行并查操作~如果两个点的祖先不同...边权加入最小生成树...并且将两个点纳入同一个集合中 3.判断是否所有点都在同一个集合中…

c# 声明类的时候初始化类_使用C#初始化的列表声明

c# 声明类的时候初始化类The task is to create/declare a list with an initializer list in C#. 任务是在C#中使用初始化列表创建/声明一个列表 。 C#清单 (C# List) A list is used to represent the list of the objects, it is represented as Lis…

编写程序计算所输日期是当年的第几天

/* 1.输入年月日,编写程序计算所输日期是当年的第几天 *//* 2.已知列车隔日发车,且1/1/2006不发车(无ticket),如果所输入数据在此日期之后,则输出有没有车票,否则仅输出上一步结果。*/ /* month/date/year is which day of the ye…

汇编语言-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,Amov bl,Bmov cl,Cmov dl,Dxchg al,dlxchg bl,clINVOKE ExitProcess,0 main ENDP E…

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…