汇编语言-006(数组操作 、字符串应用、PUSHFD_POPFD 、PUSHAD_POPAD 、 子程序 函数、 USES 、 INC_DEC )

1: 计算斐波那契数列前7个数值之和

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data.code
main PROCmov esi,1mov edi,1mov eax,2mov ecx,5
L1: mov ebx,esiadd ebx,edimov esi,edimov edi,ebxadd eax,ebxloop L1INVOKE ExitProcess,0
main ENDP
END main

2: 数组反向,使用TYPE,LENGTHOF运行符和 TEXTEQU伪指令来应对往后程序的数值大小和类型可能变化的情况

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORDtempReg TEXTEQU <eax>
.data
List DWORD 1,2,3,4,5.code
main PROCmov ecx,LENGTHOF List /2mov esi,0mov edi,LENGTHOF List - 1
L1:mov tempReg,List[esi * TYPE List]xchg tempReg,List[edi * TYPE List]mov List[esi * TYPE List],tempReginc esidec ediloop L1INVOKE ExitProcess,0
main ENDP
END main

3: 将字符串复制相反顺序到另一个字符串

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
source BYTE "This is the source string",0
target BYTE SIZEOF source DUP('#').code
main PROCmov target[SIZEOF target -1],0mov esi,SIZEOF target - 2mov edi,0mov ecx,SIZEOF target - 1
L1:   mov al,source[esi]mov target[edi],aldec esiinc ediloop L1INVOKE ExitProcess,0
main ENDP
END main

4: 数组元素移位,数组[10,20,30,40]移位后为[40,10,20,30]

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data 
dwordList DWORD 10,20,30,40.code
main PROCmov esi,LENGTHOF dwordList - 1mov ecx,esimov ebx,dwordList[esi * TYPE dwordList]dec esi
L1:mov edi,dwordList[esi * TYPE dwordList]inc esimov dwordList[esi * TYPE dwordList],edisub esi,2loop L1mov dwordList,ebxINVOKE ExitProcess,0
main ENDP
END main

5: PUSHFD_POPFD : 将标识寄存器入栈出栈

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
saveFlags DWORD ?.code
main PROCpushfd          ;标识寄存器内容入栈pop saveFlags   ;复制给一个变量push saveFlags  ;被保存的标识入栈popfd           ;复制给标识寄存器INVOKE ExitProcess,0
main ENDP
END main

6: PUSHAD_POPAD : 将通用寄存器入栈和反顺序出栈,顺序:eax,ecx,edx,ebx,esp,ebp,esi,edi

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.code
main PROCpushad   ;保存通用寄存器的内容 eax,ecx,edx,ebx,esp,ebp,esi,edi顺序;mov eax,0 ;如果有返回值在eax中后面就要注意用popad了popad ;反顺序出栈INVOKE ExitProcess,0
main ENDP
END main

7: 运用栈将字符串反转

.386
.model flat,stdcall
.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
aName BYTE "Abraham Lincoln",0
nameSize = ($ - aName) - 1.code
main PROC;将名字压入栈mov ecx,nameSizemov esi,0
L1:movzx eax,aName[esi] ;获取字符push eax              ;压入栈inc esiloop L1;将名字按逆序弹出栈;并存入aName数组mov ecx,nameSizemov esi,0
L2:pop eax          ;获取字符mov aName[esi],al;存入字符串inc esiloop L2INVOKE ExitProcess,0
main ENDP
END main

8: 创建过程(子程序,函数)进行数组求和

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwEixtCode:DWORD.data
array DWORD 10000h,20000h,30000h,40000h,50000h
theSum DWORD ?.code
main PROCmov esi,OFFSET array    ;esi指向数组mov ecx,LENGTHOF array  ;数组计数器call ArraySum           ;计算和数mov theSum,eax          ;取返回的和数INVOKE ExitProcess,0
main ENDP;ArraySum
;计算32位整数数组之和
;接收:ESI = 数组偏移量
;      ECX = 数组元素的个数
;返回  EAX = 数组元素之和ArraySum PROCpush esipush ecx   ;保存esi和ecxmov eax,0 
L1:add eax,[esi] ;将每个整数与和数相加add esi,TYPE DWORD ;指向下一个整数loop L1          ;按照数组大小重复pop ecx      ;恢复ecx和esipop esiret     ;返回调用片
ArraySum ENDP
END main

9: USES : USES伪指令告诉汇编器,在过程开始时生成PUSH寄存器指令,在结束时生成POP寄存器指令(可以查看反汇编窗口)

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwEixtCode:DWORD.data
array DWORD 10000h,20000h,30000h,40000h,50000h
theSum DWORD ?.code
main PROCmov esi,OFFSET array    ;esi指向数组mov ecx,LENGTHOF array  ;数组计数器call ArraySum           ;计算和数mov theSum,eax          ;取返回的和数INVOKE ExitProcess,0
main ENDP;ArraySum
;计算32位整数数组之和
;接收:ESI = 数组偏移量
;      ECX = 数组元素的个数
;返回  EAX = 数组元素之和ArraySum PROC USES esi ecx;汇编器会生成将这两个寄存器入栈的指令; push esi; push ecx   ;保存esi和ecxmov eax,0 
L1:add eax,[esi] ;将每个整数与和数相加add esi,TYPE DWORD ;指向下一个整数loop L1          ;按照数组大小重复;汇编器会生成将这两个寄存器出栈的指令;pop ecx      ;恢复ecx和esi;pop esiret     ;返回调用片
ArraySum ENDP
END main

10: INC_DEC : INC 伪指令自增,DEC伪指令自减

.386
.model flat,stdcall.stack 4096
ExitProcess PROTO,dwExitCode:DWORD.data
myWord WORD 1000h.code
main PROCinc myWordmov bx,myWorddec bxINVOKE ExitProcess,0
main ENDP
END main

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

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

相关文章

弗林的计算机体系结构分类

计算机体系结构分类 (Classification of computer architecture) According to Flynns there are four different classification of computer architecture, 根据弗林的说法&#xff0c;计算机体系结构有四种不同的分类&#xff0c; 1)SISD(单指令单数据流) (1) SISD (Single…

读入txt

用C#读取txt文件的方法1、使用FileStream读写文件 文件头&#xff1a; using System;using System.Collections.Generic;using System.Text;using System.IO; 读文件核心代码&#xff1a; byte[] byData new byte[100];char[] charData new char[1000]; try{FileStream sFile…

实验6 数据查询--高级查询

实验6 数据查询--高级查询一、实验目的 1.掌握查询结果排序的方法。 2.掌握排序结果进行计算的方法。 3.掌握排序结果分组的方法。 4.掌握排序结果分组后再选择的方法。 二、实验要求 应用SELECT语句对数据库eshop中数据进行指定条件的高级查询。 三、实验步骤 1.查询性别为“…

Python程序可打印今天的年,月和日

In the below example – we are implementing a python program to print the current/ todays year, month and year. 在下面的示例中-我们正在实现一个python程序来打印当前/今天的年&#xff0c;月和年 。 Steps: 脚步&#xff1a; Import the date class from datetime …

工资年结时提示“上年数据已经结转”

解决方案&#xff1a;执行如下SQL语句即可解决&#xff1a;use ufsystem update ua_account_sub set bclosing0 where cacc_id001 and iyear2005 and csub_idwa 重新年结即可 问题分析&#xff1a;产生问题的原因是用户进行过工资的年结&#xff0c;在业务数据需要调整&…

汇编语言-007(ADD_SUB_NEG 、 PUSH和POP指令应用 、 AND,OR,XOR使用 、 条件跳转应用)

1&#xff1a; ADD_SUB_NEG : ADD伪指令增加数值&#xff0c;SUB伪指令减少数值,NEG取反1 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data var1 DWORD 10000h var2 DWORD 20000h.code main PROCmov eax,var1add eax,var2mov eax,var2sub eax,v…

Automatic Reference Counting

Automatic Reference Counting http://clang.llvm.org/docs/AutomaticReferenceCounting.html转载于:https://www.cnblogs.com/StarMud/articles/2642263.html

实验5 数据查询--连接查询

实验5 数据查询--连接查询一、实验目的 1.熟悉等值联接查询的方法。 2.熟悉非等值联接查询的方法。 3.熟悉自身联接查询的方法。 4.熟悉外联接查询的方法。 5.熟悉复合条件联接的方法。 二、实验要求 应用SELECT语句对数据库eshop中数据进行指定条件的连接查询。 三、实验步骤…

Java RandomAccessFile readInt()方法与示例

RandomAccessFile类readInt()方法 (RandomAccessFile Class readInt() method) readInt() method is available in java.io package. readInt()方法在java.io包中可用。 readInt() method is used to read signed 32-bit integer value from this RandomAccessFile. readInt()方…

天高地厚(转)

信乐团-天高地厚作词:武雄作曲:詹凌驾 keith stuart你累了没有可否伸出双手想拥抱怎能握着拳头我们还有很多梦没做还有很多明天要走要让世界听见我们的歌准备好没有时间不再回头想要飞不必任何理由不管世界尽头多寂寞你的身边一定有我我们说过不管天高地厚想飞到那最高最远最洒…

实验4 数据查询--简单查询

实验4 数据查询--简单查询一、实验目的 1.掌握SELECT语句的基本方法。 2.掌握从表中查询特定行的方法。 3.掌握从表中查询前N行的方法。 4.掌握从查询结果中去掉重复行的方法。 5.掌握使用列的别名的方法。 6.掌握从表中查询特定列的方法。 7.掌握查询语句中的通配符的使用。 …

POJ 3189 Steady Cow Assignment

POJ_3189 一开始题意各种理解错&#xff0c;首先输入的那个矩阵第i行第j列的值表示的是奶牛i会第j个中意的牛棚&#xff0c;最后求的range就相当于j的range&#xff0c;至于range是变化的范围&#xff0c;比如j在1、2变化&#xff0c;那么range就应该是2&#xff0c;也就是MAX-…

汇编语言-008(条件跳转应用 、loopnz 条件循环指令使用 、loopz 条件循环指令使用 、 if语句编写汇编时 、while语句编写汇编时 、循环内的if语句嵌套)

1&#xff1a; 条件跳转应用&#xff0c;三个数中最小数 .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data V1 WORD 1 V2 WORD 2 V3 WORD 3.code main PROCmov ax,V1 ;假设V1是最小值cmp ax,V2 ;如果AX小于等于V2jbe L1mov ax,v2 L1:cmp ax,V…

java jar包示例_Java包isCompatibleWith()方法与示例

java jar包示例包类的isCompatibleWith()方法 (Package Class isCompatibleWith() method) isCompatibleWith() method is available in java.lang package. isCompatibleWith()方法在java.lang包中可用。 isCompatibleWith() method is used to check the specification versi…

面向对象的JavaScript编程

Javascript对于做过Web程序的人不应该是陌生&#xff0c;初期是用来做一些简单的FORM验证&#xff0c;基本上是在玩弄一些技巧性的东西。IE 4.0引入了DHTML&#xff0c;同时为了对抗Netscape的Javascript,提出了自己的脚本语言JScript&#xff0c;除了遵循EMAC的标准之外&#…

实验3 SQL Server 表中记录更新操作

实验3 SQL Server 表中记录更新操作一、实验目的 1.掌握INSERT INTO语句的方法。 2.了解INSERT FROM语句的方法。 3.掌握UPDATE语句的方法。 4.掌握DELETE语句的方法。 二、实验要求 1.在已经创建好的eshop数据库中的各表中添加样例数据。 三、实验步骤 1.在eshop数据库的memb…

HTML 5 标签

HTML 5 <nav> 标签 定义和用法 <nav> 标签定义导航链接的部分。 实例 <nav> <a href"index.asp">Home</a> <a href"html5_meter.asp">Previous</a> <a href"html5_noscript.asp">Next</a>…

Assert和异常处理

Assert用于检查不应该发生情况&#xff0c;用来帮助开发人员对问题的快速定位。异常处理用于对程序发生异常情况的处理&#xff0c;增强程序的健壮性、容错性&#xff0c;减少程序使用中对用户不有好的行为&#xff0c;不让(通常也不必)用户知道发生了什么错误。实际开发中&…

tooctalstring_Java Long类toOctalString()方法的示例

tooctalstring长类toOctalString()方法 (Long class toOctalString() method) toOctalString() method is available in java.lang package. toOctalString()方法在java.lang包中可用。 toOctalString() method is used to represent an octal string of the given parameter […

汇编语言-009(表驱动选择 、条件控制流伪指令 、逻辑移位SHL,SHR 算术移位SAL,SAR)

1&#xff1a; 表驱动选择&#xff0c;用查表来代替多路选择结构的一种方法 .386 .model flat,stdcallinclude Irvine32.inc.stack 4096 ExitProcess PROTO,dwExitCode:DWORD.data CaseTable BYTE A ;查询值DWORD Process_A ;过程地址 EntrySize ($ - CaseT…