汇编那些事儿(五)

寻址模型就是根据地址获取到数据,通常有三种寻址模型:

正如前面章节讲到的,要获取存储在内存中的值时要使用中括号[],如果漏掉中括号,其实获取到的是地址。如下代码所示:

寄存器模式就是说,操作数是CPU寄存器。下面的代码中,eax和rbx都是寄存器模式

moveax,ebx立即数模式顾名思义,立即数模式就是操作数是一个立即数

内存模式指的是操作数是一个地址,也叫解引用。内存模式最基础的形式,前面已经多次用到了。如下的代码访问qNum变量的地址并获取到里面存储的值:

当访问数组时,有更加通用的办法。特别地,可以将地址放到寄存器、然后使用寄存器来进行解引用。举例说明,假设存在如下的数组。

数组的第一个元素,可以通过如下方式获取:

moveax,dword[lst]也可以通过如下方式:

第二种方法,可以使得我们再访问获取其他数组元素时更为方便。之前讲过,内存地址的计算单元是byte,一个dword占用4个byte,因此第二个元素的地址是首元素地址加上4,后续的每个元素的地址都依次加上偏移4.

byte类型的数组每个元素地址的偏移是1,word类型的数组每个元素地址的偏移是2,dword类型的数组每个元素地址的偏移是4,qword类型的数组每个元素地址的偏移是8.

有多种办法可以获取数组的元素。第一种就是基地址加上偏移。如下的代码示例了获取lst中第三个元素的三种方法:

movrbx,lstmovrsi,8;method1moveax,[lst+8];method2moveax,[rbx+8];methodmoveax,[rbx+rsi]显然,上述的三种方法都不会影响rbx和rsi寄存器本身存储的内容。关于访问数组元素,通用的形式如下:

其中:

如下均是合法的表达式

moveax,dword[dVar1]movrax,qword[rbx+rsi]movax,word[lst+4]movbx,word[lst+rdx+2]movrcx,qword[lst+(rsi*8)]moval,byte[buff-1+rcx]moveax,dword[rbx+(rsi*4)+16]如果要访问前面定义的dword数组的第三个元素,代码如下:

如下代码用于计算一个数组所有元素的和以及平均数。

如下代码用于计算一系列四棱锥的表面积和体积,并找出最大、最小、和、平均值。

两个收获:

movecx,dword[length];lengthcountermovrsi,0;indexcalculationLoop:movzxr8d,byte[bLst+rsi]movzxr9d,word[wLst+rsi*2];getvalueaccordingoffset...incrsiloopcalculationLoopcmpeax,dword[taMin]jaenotNewTaMinmovdword[taMin],eaxnotNewTaMin:cmpeax,dword[taMax]jbenotNewTaMaxmovdword[taMax],eaxnotNewTaMax:课后习题1.解释如下两条指令的不同:

movrdx,qword[qVar1]movrdx,qVar1解答:第一条指令用于取值,取qVar1的值;第二条指令用于取地址,取qVar1的地址2.下面的代码语句中,源操作数使用的寻址模型是什么?(寄存器/立即数/内存/非法语言/)解答:

3.如下代码在执行完之后,eax寄存器的内容。

解答:0x000000000000000A

4.如下代码在执行完之后,eax和edx寄存器的内容

list1dd2,3,4,5,6,7movrbx,list1addrbx,4moveax,dword[rbx]movedx,dword[list1]解答:

5.如下代码执行完之后,eaxebxrcxrsi寄存器的内容

解答:

listdd8,6,4,2,1,0movrbx,listmovrsi,1movrcx,3movedx,dword[rbx]lp:moveax,dword[list+rsi*4]incrsilooplpimuldword[list]解答:

8.如下代码执行完之后eaxedxrcxrsi寄存器的内容:

listdd2,7,4,5,6,3movrbx,listmovrsi,1movrcx,2moveax,0movedx,dword[rbx+4]lp:addeax,dword[rbx+rsi*4]addrsi,2looplpimuldword[rbx]解答:

1.实现示例程序,计算list所有元素之和,通过调试验证。

解答:略,参考前面代码

2.更新代码,计算list中的最大值,最小值和平均值,通过调试验证。

3.完成示例程序,计算四棱锥的表面积和体积

4.使用冒泡排序,对list进行排序

for(i=(len-1)to0){swapped=falsefor(j=0toi-1)if(lst(j)>lst(j+1)){tmp=lst(j)lst(j)=lst(j+1)lst(j+1)=tmpswapped=true}if(swapped=false)exit}解答:

执行结果:

程序员要去杂货铺,妻子告诉他,买2瓶牛奶,如果碰到卖鸡蛋的,买一打。最后买了12瓶牛奶回家

在计算机中,栈是一种非常有用的数据结构,满足LIFO即后进先出的要求,具备2个基础的操作:push、pop

指令基本形式如下:

栈的实现是通过调整rsp实现的。

入栈push:

出栈:

如下代码将数组进行颠倒.

1.哪一个寄存器指向当前的栈顶?

解答:rsp

2.执行pushrax是发生了什么?

3.poprax将会从栈移走多少byte的数据?

解答:8

4.如下片段代码执行完之后,r10,r11,r12的内容各是什么?

movr10,1movr11,2movr12,3pushr10pushr11pushr12popr10popr11popr12解答:

5.如下代码片段的执行效果是什么?

解答:颠倒数组,并获取数组的首元素(原最后一个元素)

解答:堆和栈相向生长,有助于更加充分的使用整个内存空间。

1.实现一个程序,判断字符串是不是一个回文字符串,可以使用Stack实现

2.实现一个程序,判断一个段落是不是回文字符串,忽略掉逗号、破折号和感叹号。

通用程序开发的几个过程:

本文以一个具体的例子,展示程序开发的全流程

设计一个程序,将数值转化为字符串类型。简化起见,仅考虑dword类型的无符号数

所谓算法,就是为了解决一个问题,需要进行的具体的操作步骤

算法的伪代码如下:

解答:算法就是解决一个具体的问题需要的步骤

2.需求开发通用的4个步骤

3.4个步骤是否只适用于汇编语言程序开发?

解答:否,是通用的

4.如果针对乘法指令,操作数出现立即数,会触发编译时异常还是运行时异常?

解答:编译时异常

5.如果汇编指令出现拼写错误,会触发什么异常?

6.如果一个Label被引用到,但是却没有定义,会触发什么异常?

7.如果在一系除法操作中出现除0错误,会触发什么异常?

解答:运行时异常

1.修改示例程序,要求对有符号数进行转化

解答:中间遇到了不少坑,一开始想使用有符号数的除法,但是忘记正确设置rdx的方法(这种场景应该使用cdq)、修改OK后有发现有符号数的除法对于余数的处理有点反常,最终对负数采用了neg命令取反后按照正数处理了。

3.编写一个程序,将字符串的数字转化成数值,处理有符号数的情况

汇编语言具备非常强大的宏的预处理能力,支持条件宏、多级文件包含、单行和多行以及上下文栈能力。

在使用宏之前,宏必须要先被定义,宏需要在data段和text段之前定义,在text段使用。

使用%define指令定义单行宏。例如

定义好之后就可以按照如下方式使用:

mulby4(rax)多行宏按照如下方式定义:

需要注意的是,对应的参数需要使用%的方式获取,例如%1代表的是第一个参数。

同时,如果要在宏中使用label,必须使用%%前缀。

%macroabs1cmp%1,0jge%%doneneg%1%%done:%endmacro宏的使用举例下面的例子展示了上述的abs宏如何使用:

我们设计一个宏,它可以求助数组的平均值。

;ExampleProgramtodemonstrateasimplemacro;@BianChengFeiChai;**************************************************;Definethemacro;calledwiththreearguments:;aver,,%macroaver3moveax,0movecx,dword[%2];lengthmovr12,0;indexlearbx,[%1]%%sumLoop:addeax,dword[rbx+r12*4];getlist[n]incr12loop%%sumLoopcdqidivdword[%2]movdword[%3],eax%endmacro;**************************************************;Datadeclarationssection.data;-----;DefineconstantsEXIT_SUCCESSequ0;successcodeSYS_exitequ60;codeforterminate;DefineData.section.datalist1dd4,5,2,-3,1len1dd5ave1dd0list2dd2,6,3,-2,1,8,19len2dd7ave2dd0;**************************************************section.textglobal_start_start:;-----;Usethemacrointheprogramaverlist1,len1,ave1;1st,dataset1averlist2,len2,ave2;2nd,dataset2;-----;Done,terminateprogram.last:movrax,SYS_exit;exitmovrdi,EXIT_SUCCESS;successsyscall执行结果:

1.宏定义的代码放置在什么位置?

解答:源代码最前面的位置

2.如果宏被调用,它的代码会在被展开替换多少次?

解答:每一次的调用,都会产生宏代码替换展开。

3.解释下,为什么在宏中的Label必须要用%%符号?

4.解释如果在宏中使用的Label不携带%%会发生什么?

5.在宏中跳转到一个不包含%%的label是否是合法的,为什么?

解答:合法的,宏无非就是代码替换。有些场景是可以这么使用的,例如,对于异常的控制、检测到异常后都统一跳到last标签。

解答:编译阶段

1.更新示例代码,在求取平均数的同时,包括最小值和最大值

2.创建一个程序,创建一个宏将数组中的每个元素乘以2

解答:本题遇到了两个坑,一个是一开始出现了寄存器使用冲突,明明rbx寄存器已经用来存储数组的基地址了、自己还用ebx寄存器存储imul的中间结果;还有一个坑是,imul三个操作数的场景,目的操作数不能直接是内存地址,但是这个限制书中也没有提及。

在linux上,gdb默认使用ATT格式。可以使用如下的命令查询&设置

THE END
1.时间都去哪儿了(课后测试考试题答案).pdf资源在时间管理领域,个人使命宣言扮演着至关重要的角色。它不仅解决了我们时间管理中的价值导向问题,而且为我们提供了明确的方向和目的。一个有效的个人使命宣言应该包含我们的愿景、价值观,并挑战我们去追求卓越,而不是简单地决定我们的优势。因此,答案B是正确的。 在高效时间管理中,我们需要遵循“艾森豪威尔矩阵”,这是https://download.csdn.net/download/weixin_46195928/82755256
2.时间都去哪儿了(课后测试考试题答案)(4页)时间都去哪儿了(课后测试考试题答案).pdf 4页内容提供方:墨象信息 大小:282.84 KB 字数:约小于1千字 发布时间:2021-11-18发布于广东 浏览人气:443 下载次数:仅上传者可见 收藏次数:0 需要金币:*** 金币 (10金币=人民币1元)时间都去哪儿了(课后测试考试题答案).pdf 关闭预览 想预览更多内容,https://max.book118.com/html/2021/1118/6100211203004052.shtm
3.小学一年级语文教案:小蝌蚪找妈妈(精选11篇)3、指导完成课后第二题。 二、指导有感情地分组朗读课文。 三、识记生字,分析字形,指导书写。 1、观看生字表教学录像带,激发学生兴趣。 2、指导学习生字。 3、难写、易错字形分析: 塘:共13画,第八画右边要出头,第10笔一竖上下都要出头,左边是“ ”。 https://www.ruiwen.com/jiaoan/4531446.html
4.学会感恩小学主题班会教案(通用14篇)2、了解节日时间和由来; 3、学习有关母亲的小故事; 4、了解母亲小测试; 5、总结感悟。围绕这五个环节,设计了丰富多彩的活动,加入了阅读故事、小测试等活动形式,通过故事的感悟和小测试中慢慢感受母亲的爱,从而把意识内化为具体的行动,主动去关心母亲,感恩母亲,做一个爱学习懂礼貌讲孝顺的孩子。 https://mip.jy135.com/jiaoan/895903.html
5.认识自己的教案(精选11篇)2、通过活动使学生明白每个人都有自己独特的个性,我们学会自我认识。 3、树立自己的人生目标,同时让他们看到自己与理想自己之间的差距;并引导他们怎么去实现理想的自己 三、活动时间 待定 四、活动对象 韶关新丰县第一中学高一(X)班 五、活动地点 本班教室 https://m.oh100.com/kaoshi/jiaoxuesheji/573346.html
6.六年级语文下册教案(15篇)写好字()每个学生来说都是十分必要的。但()种种原因,()这个问题,学校过去一直没能引起足够重视。这3、布置课后作业 ⑴有感情的朗读课文,背诵喜欢的句子或段落。 ⑵收集关于珍惜时间的诗文、名言、警句。三、激励测试,交流感悟 出示测试题,各小组抢答积分,评出优胜学习小组。 1.回答下列词语在文中的意思。https://m.yuwenmi.com/jiaoan/liunianji/3692159.html
7.如何制定工作计划时代光华课后测试10篇(全文)4)对开发人员的开发工作,整个项目的规划,项目经理的审查都有辅助性作用。 3 测试计划的定义和内容 3.1 测试计划的定义 《IEEE软件测试文档标准829-1998》将测试计划定义为:“一个叙述了预定的测试活动的范围、途径、资源及进度安排的文档。它确认了测试项、被测特征、测试任务、人员时间安排以及与计划相关的风险。”https://www.99xueshu.com/w/fileaksswesk.html
8.IwenttoCentralParkyesterday.(对画线部分提问)yougoyesterda2.The beautiful girl will marry a reporter next month. (改为同义句)The beautiful girl will a reporter next month. 发布:2024/12/19 14:0:2组卷:159引用:2难度:0.7 解析 3.He is nine years old.(对画线部分提问) is he? 发布:2024/12/19 14:0:2组卷:181引用:3难度:0.7 解析把https://www.jyeoo.com/shiti/104b4019-ae15-153e-95b9-aa46ad42259a
9.山东省济宁市小学三上数学第一单元《时分秒》人教版质量检测过关山东省济宁市小学三上数学第一单元《时、分、秒》人教版质量检测过关卷 https://wenku.baidu.com/view/8010c0ca01768e9951e79b89680203d8ce2f6a87.html
10.一年级心理降教案(精选18篇)女主持小结:明明上课迟到了,这样毫无顾忌地冲进教室是很不礼貌的,还弄出很多的响声,破坏了整个教室的安静气氛,这样做影响了大家的学习。如果都按照同学们说去做,那就是讲文明,懂礼貌。 2.那么到同学家做客又要注意什么呢?请看 小品表演《做客》 时间:下午放学后。 https://mip.yjbys.com/xinli/jiankang/182250.html
11.包头师范学院学生学业指导手册去哪里学习? 答:培养方案中每学期安排的课程课堂教学基本上在周20学时左右,但是要求同学们在课后要用双倍的时间来完成该门课程的预习、课后练习、课程扩展、能力提升等内容。同学们可以到图书馆、博学楼、齐志楼、逸夫教学楼、网络机房等场所进行学习。 第二部分 学分制 1、什么是学分制? 答:学分制是一种,以https://jjyglxy.bttc.edu.cn/info/1012/1634.htm
12.生物化学论文精品15篇在社会的各个领域,大家都经常接触到论文吧,论文是探讨问题进行学术研究的一种手段。你知道论文怎样写才规范吗?以下是小编收集整理的生物化学论文,仅供参考,欢迎大家阅读。 生物化学论文1 摘要:本文初步探讨了生物化学与分子生物学的教学过程,包括常规教学课、小组讨论课、测试及课后学习中形成性评价的使用策略,弥补了传https://www.wenshubang.com/huaxuebiyelunwen/4572904.html
13.离散数学教学教案设计模板5篇每个数学老师都应该提升学生的数学运用本事和合作创新本事,提高数学教学的有效性。每个数学老师在教学之前所以方差公式是能够反映一组数据的波动大小的一个统计量,教师也可以根据学生程度和课堂时间决定是否介绍(2)哪种农作物的苗长得比较整齐? 2. 段巍和金志强两人参加体育项目训练,近期的5次测试成绩如下表http://www.jiaoyubaba.com/jiaoan/13131.html
14.linux课后习题linux课后习题 第三章 习题 3.1 进入字符界面有哪些方式 systemctl set-defaultmulti-user.target systemctl isolate multi-user.target 3.2 可以使用哪些命令关闭计算机系统 shutdown -h +[time](可以设定时间的关闭计算机系统)shutdown -r [time](重启系统)shutdown-c(取消运行shutdown)halt(调用shutdown-h来https://www.jianshu.com/p/90c14e4dec77
15.《软件工程导论》课后习题答案张海藩51CTO博客渐增式测试方式:把下一个要测试的模块,同已经测试好的那些模块结合起来进行测试。该方法利用已测试过的模块作测试软件,开销小,较早发现模块间的接口错误,错误定位往往和最近入的模块相关,对已测试好的模块可在新加入模块的条件下受到新的检验,测试更彻底,需要较多的测试时间,不能并行测试。 https://blog.51cto.com/u_16105066/6276440
16.人教版七年级数学上册教案(集锦15篇)作为一名默默奉献的教育工作者,常常要根据教学需要编写教案,编写教案有利于我们科学、合理地支配课堂时间。我们该怎么去写教案呢?下面是小编为大家收集的人教版七年级数学上册教案,欢迎阅读,希望大家能够喜欢。 人教版七年级数学上册教案1 一:说教材: 1教材的地位和作用 https://www.fwsir.com/jiaoan/html/jiaoan_20221125171607_2099619.html